欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTPS认证二: openssl生成证书及签名

程序员文章站 2022-06-29 21:54:59
...

CA根证书

  • 创建 CA 根证书(使用这个根证书签发服务器和客户端的证书)
mkdir private
# 生成私钥 key 文件:
openssl genrsa -out private/ca.key 2048  
输出
Generating RSA private key, 2048 bit long modulus  
.......+++
.........................+++
e is 65537 (0x10001)  
private 目录下有 ca.key 文件生成。

# 生成证书请求 csr 文件
openssl req -new -key private/ca.key -out private/ca.csr  

这里需要填写一些信息

HTTPS认证二: openssl生成证书及签名

# 生成凭证 crt 文件
openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt  

 创建配置文件:

  • conf 目录新建 openssl.conf 文件
[ ca ] 
default_ca      = foo                   # The default ca section 

[ foo ] 
dir            = ./         # top dir  
database       = ./index.txt          # index file.  
new_certs_dir  = ./newcerts           # new certs dir 

certificate    = ./private/ca.crt         # The CA cert  
serial         = ./serial             # serial no file  
private_key    = ./private/ca.key  # CA private key  
RANDFILE       = ./private/.rand      # random number file 

default_days   = 365                     # how long to certify for  
default_crl_days= 30                     # how long before next CRL  
default_md     = sha1                     # message digest method to use  
unique_subject = no                      # Set to 'no' to allow creation of  
                                         # several ctificates with same subject. 
policy         = policy_any              # default policy 

[ policy_any ] 
countryName = match  
stateOrProvinceName = match  
organizationName = match  
organizationalUnitName = match  
localityName            = optional  
commonName              = supplied  
emailAddress            = optional  

服务器证书的生成

# 创建一个 key,服务器不需要密码
openssl genrsa -out server/server.key 2048  

# 为我们的 key 创建一个证书签名请求 csr 文件
openssl req -new -key server/server.key -out server/server.csr

# 会有一些问题,保持和之前一样就好,注意里面的hostname, 填写服务器的Ip地址,确保能通过这个地址访问服务器

# 使用我们私有的 CA key 为刚才的 key 签名
openssl ca -in server/server.csr -cert private/ca.crt -keyfile private/ca.key -out server/server.crt -config "./conf/openssl.conf"  

# 会有一些提示信息,直接确认

客户端证书的生成

mkdir users 
# 为用户创建一个 key,需要密码
openssl genrsa -des3 -out ./users/client.key 2048  
# 根据提示输入密码

# 为 key 创建一个证书签名请求 csr 文件,会有一些信息,和之前填写一致
openssl req -new -key ./users/client.key -out ./users/client.csr  

# 使用我们私有的 CA key 为刚才的 key 签名
openssl ca -in ./users/client.csr -cert ./private/ca.crt -keyfile ./private/ca.key -out ./users/client.crt -config "./conf/openssl.conf"  

为了可以通过浏览器验证,转化为P12格式:

openssl pkcs12 -export -clcerts -in ./users/client.crt -inkey ./users/client.key -out ./users/client.p12  
# 输入密码后,users 目录下有 client.p12 文件生成。

格式转换:

为了在程序中使用,我们将客户端crt 和 key以及ca.crt转化为PEM格式的文件

openssl x509 -in ca.crt -out cacrt.pem -outform PEM
openssl x509 -in client.crt -out clientcrt.pem -outform PEM
openssl rsa -in client.key -out clientkey.pem

我们需要的证书文件有:

根证书

ca.crt

cacrt.pem

根证书签发的服务端证书

server.crt

 

服务端私钥

server.key

 

根证书签发的客户端证书

client.crt

clientcrt.pem

客户端私钥

client.key

clientkey.pem

 

相关标签: HTTPS SSL OPENSSL