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
这里需要填写一些信息
# 生成凭证 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 |