数字证书的理解以及自建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:......通信......
 
相关博客
原文地址:https://www.cnblogs.com/lemon-le/p/8137477.html