• 数字证书的理解以及自建CA机构颁发证书


    一、理解什么是数字证书
     
     
    理解数字证书等概念,无数次想好好看看数字证书,CA什么的,都没看懂,直到昨天看到了这篇博文,基本上是理解了
     
    二、阿里云证书的CA证书使用情况
     
    比如我在阿里云申请了一个域名lile.capatain.com,然后我要实现对这个域名能实现https,那么该怎么办呢?
     
    阿里云的文档
    1)首先去阿里云购买一个证书(在云盾那里),付钱之后才填写资料
     
    2)然后补全资料
         填写域名
         填写个人信息
         企业组织信息
         上传相关信息:(重要的是这一步)
          这里需要生成CSR证书请求文件,阿里云的有两种选择,一种是系统生成CSR方式,一种是自己生成CSR,使用他的系统生成CSR方式,将自动生成证书和私钥,并且在证书申请成功后可直接在证书管理列表中下载证书和私钥
          
    3)待审核通过后,就可以管理自己的证书列表了,使用了,如nginx,apache等。
     
    三、自己扮演CA机构签发证书
     
    因为我现在不需要真正的买一个CA证书,所以就自己当CA机构模拟一下,然后给自己的服务器颁发证书
     
    这里模拟需分清楚两个角色:CA证书颁发机构、服务器申请方
     
    CA证书颁发机构:
     
    CA机构
    自己扮演CA角色,必须准备好CA机构相关的文件:CA私钥、CSR证书请求文件,根据这两个生成CA根证书
     
    1:生成CA证书私钥
    openssl genrsa -out server.key 1024
     
    2:生成CSR文件
    openssl req -new -key ca.key -out ca.csr
     
    3:命令行生成CA根证书
    openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
     
    以上是CA机构的文件准备完毕,下面为HTTPS服务器颁发证书
     
    服务器申请方:
     
    申请数字证书之前,必须准备好证书私钥和证书请求文件CSR(Certificate Signing Request,简称CSR)。CSR文件是公钥证书原始文件,里面包含了申请者的基本信息,如Common Name、Organization,同时也包含了申请者的公钥,需要提交给CA认证中心进行审核
     
    手动生成CSR文件一般需要填写的信息:
     
    • Organization Name(O): 申请单位名称法定名称,可以是中文或英文。
    • Organization Unit(OU): 申请单位的所在部门,可以是中文或英文。
    • Country Code(C): 申请单位所属国家,只能是两个字母的国家码。如:中国只能是 CN。
    • State or Province(S): 申请单位所在省名或州名,可以是中文或英文。
    • Locality(L): 申请单位所在城市名,可以是中文或英文。
    • Common Name(CN): 申请SSL证书的具体网站域名。
     
    1)使用OPENSSL生成私钥
     
    openssl genrsa -out server.key 1024
     
    2)生成CSR证书请求文件:
     
    openssl req -new -key server.key -out server.csr
     
    准备工作全部做好之后,自建的CA机构就可以根据服务器提供的证书请求文件CSR颁发证书了
     
    openssl x509 -req -sha256 -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
     
    四、nginx测试
     
    这样证书颁发就完成了,也就是server.crt这个文件,接下来假如到nginx做测试:
     
    1:使用这个功能的模块ngx_http_ssl_module
          这个模块并不是默认就有的,必须得在安装编译的时候指定(--with-http_ssl_module),编译才有
     
    2:这个模块要求Openssl
     
    3:修改配置文件
          server_name  lile.captain.com;
          listen 443 ssl;
          ssl_certificate /root/test/ca/server.crt;
          ssl_certificate_key    /root/test/ca/server.key;
     
          打开ssl,建议使用listen 443 ssl,而不是ssl on;
     
    4:在浏览器的安全选项里,导入CA根证书
          
     
     
    5:在浏览器输入地址访问
          
          
         可以看到是没有问题的,这是火狐浏览器,用谷歌浏览器的话会提示这不是安全链接
     
          
    客户端与服务端的交互过程如下:
    1:客户端对域名lile.captain.com发起请求的时候,服务端会先把这个域名对应的证书文件发送给客户端
    2:客户端接收到这个域名的证书文件,然后使用自己浏览器里给域名lile.captian.com颁发证书的CA根证书里CA公钥,对lile.captain.com这个域名证书文件进行解密,得到这个证书的hash值以及hash算法,客户端用hash算法对证书做一次hash,取得hash值与之前解密得到的hash值进行对比,一样说明此证书文件没有被更改过,然后客户端就可以使用证书里的公钥和服务端进行通信了
    3:客户端会随机生成一个字符串发送给服务端,服务端用私钥加密发送给客户端,然后客户端用公钥解密,如果是的就认为对方是服务端
    4:然后客户端随机生成对称密钥,并把对称密钥和生成对称密钥的算法用公钥加密发送给服务端
    5:服务端得到后,用自己的私钥解密,然后服务端和客户端就开始了用堆成密钥通信的过程了
    6:......通信......
     
    相关博客
  • 相关阅读:
    C#判断网络链接状态
    C# 创建临时文件(转帖)
    C# 很久以前几个常用类
    正则附表
    如何判断WebBrowser浏览器网页加载完成
    控件阴影
    C# 使用WM_COPYDATA传输数据(两个窗体间通信)
    C# 调用POST请求
    改变无边框窗体的尺寸大小和移动无边框窗体
    IT学习网站
  • 原文地址:https://www.cnblogs.com/lemon-le/p/8137477.html
Copyright © 2020-2023  润新知