openssl生成https

https运作流程:

HTTPS交互

  • 客户端生成一个随机数 random-client,传到服务器端(Say Hello)
  • 服务器端生成一个随机数 random-server,和着公钥,一起回馈给客户端(I got it)
  • 客户端收到的东西原封不动,加上 premaster secret(通过 random-client、random-server 经过一定算法生成的东西),再一次送给服务器端,这次传过去的东西会使用公钥加密
  • 服务器端先使用私钥解密,拿到 premaster secret,此时客户端和服务器端都拥有了三个要素:random-client、random-server 和 premaster secret
  • 此时安全通道已经建立,以后的交流都会校检上面的三个要素通过算法算出的 session key

        .key格式:私有的密钥
        .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
        .crt格式:证书文件,certificate的缩写
        .crl格式:证书吊销列表,Certificate Revocation List的缩写
        .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

ca根证书:

生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt)(CA给自已颁发的证书)。

  1. # Generate CA private key   
  2. openssl genrsa -out ca.key 2048   
  3. # Generate CSR   
  4. openssl req -new -key ca.key -out ca.csr  
  5. # Generate Self Signed certificate(CA 根证书)  
  6. openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt  

用户证书生成步骤: 生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt)

服务器端用户证书:

  1. # private key  
  2. $openssl genrsa -des3 -out server.key 1024   
  3. # generate csr  
  4. $openssl req -new -key server.key -out server.csr  
  5. # generate certificate  
  6. $openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key 

Organization Name (eg, company) [Internet Widgits Pty Ltd]: ca,服务端,客户端写成不一样即可

Common Name (e.g. server FQDN or YOUR name) []: 填写生成证书的域名

客户端证书:

  1. $openssl genrsa -des3 -out client.key 1024   
  2. $openssl req -new -key client.key -out client.csr  
  3. $openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key  

生成pem格式证书: 
有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成 

$cat client.crt client.key> client.pem 

$cat server.crt server.key > server.pem

结果:

服务端证书:ca.crt, server.key, server.crt, server.pem

客户端证书:ca.crt, client.key, client.crt, client.pem

注意:

在执行$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key时可能会出错:

Using configuration from /usr/share/ssl/openssl.cfg I am unable to access the ./demoCA/newcerts directory ./demoCA/newcerts: No such file or directory 

解决方法:

1)mkdir -p ./demoCA/newcerts 
2)touch demoCA/index.txt 
3)touch demoCA/serial 
4)echo 01 > demoCA/serial

参考:https://blog.csdn.net/moonhillcity/article/details/52768218

https://www.cnblogs.com/liyulong1982/p/6106129.html

猜你喜欢

转载自my.oschina.net/u/2271162/blog/1803420
今日推荐