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

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  

这里需要填写一些信息

# 生成凭证 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章