使用openssl创建自签名的证书和私钥
- 创建根私钥、证书和证书请求文件
[email protected]: /usr/lib/ssl/demoCA# openssl genrsa -out ca-key.pem 4096
[email protected]: /usr/lib/ssl/demoCA# openssl req -new -out ca-req.csr -key ca-key.pem
[email protected]: /usr/lib/ssl/demoCA# openssl x509 -req -in ca-req.csr -out ca-cert.pem -signkey ca-key.pem -days 3650
- 创建服务器私钥、证书和证书请求文件
[email protected]: /usr/lib/ssl/demoCA# openssl genrsa -out server-key.pem 4096
[email protected]: /usr/lib/ssl/demoCA# openssl req -new -out server-req.csr -key server-key.pem
[email protected]: /usr/lib/ssl/demoCA# openssl x509 -req -in server-req.csr -out server-cert.pem -signkey server-key.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -days 3650
- 创建客服端私钥、证书和证书请求文件
[email protected]: /usr/lib/ssl/demoCA# openssl genrsa -out client-key.pem 4096
[email protected]: /usr/lib/ssl/demoCA# openssl req -new -out client-req.csr -key client-key.pem
[email protected]: /usr/lib/ssl/demoCA# openssl x509 -req -in client-req.csr -out client-cert.pem -signkey client-key.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -days 3650
另一种生成证书的方法:
- 生成证书的脚本如下:
#!/usr/bin/env bash
openssl genrsa -out zk.private.pem 4096
openssl rsa -in ./zk.private.pem -out ./zk.public.pem
openssl req -new -key ./zk.private.pem -out ./zk.root.csr -config ./openssl.cnf -subj '/C=CN/ST=FJ/L=XM/OU=Zkteco Co., Ltd./O=ZKTeco Xiamen/CN=access.control.com'
openssl x509 -req -days 36500 -extensions v3_ca -set_serial 1 -in ./zk.root.csr -signkey ./zk.private.pem -sha256 -out ./zk.root.crt -extfile ./openssl.cnf
openssl pkcs12 -export -clcerts -in zk.root.crt -inkey zk.private.pem -out zk.p12
- openssl.cnf配置文件的内容:
[ req ]
# 生成的证书中RSA**对的默认长度,取值是2的整数次方。建议使用4096以上
default_bits = 4096
# 读取输入私钥文件时的口令,如果未设置那么将会提示输入。
input_password = zkteco-xm-mjjwlw-gjz
# 保存输出私钥文件时的口令,如果未设置那么将会提示输入。
output_password = zkteco-xm-mjjwlw-gjz
# 签名默认使用的信息摘要算法,可以使用:md5,sha1,mdc2,md2
default_md = sha1
# 保存生成的私钥文件的默认文件名
default_keyfile = zk.private.pem
# 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
distinguished_name = req_distinguished_name
# 生成自签名证书时要使用的证书扩展项字段名,该扩展字段定义了要加入到证书中的一系列扩展项。
x509_extensions = v3_ca
extensions = v3_ca
req_extensions = v3_ca
# 新签发的证书默认有效期,以天为单位
default_days = 36500
##### 要加入到证书请求中的一系列扩展项 #####
[ v3_ca ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
#authorityKeyIdentifier = keyid:always, issuer:always
keyUsage = critical, cRLSign, digitalSignature, keyCertSign
nsCertType = sslCA
subjectAltName = @acc_names
[req_distinguished_name ]
countryName = CN
countryName_default = CN
countryName_min = 2
countryName_max = 2
organizationName = match
organizationName_default = ZKTeco
#organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default = Condor Project
commonName = zkteco
commonName_default = zkteco Self Signed CA
commonName_max = 64
[ acc_names ]
# IPv4 localhost
DNS.1 = access.control.com
IP.1 = 192.168.227.90
IP.2 = 127.0.0.1
IP.3 = ::1