————————————————
https://blog.csdn.net/qq_17298387/article/details/53232341
https://www.jianshu.com/p/1daae319d5fc        【使用 OpenSSL 命令行管理证书】


cp /etc/pki/tls/openssl.cnf ./
sed -i 's|/etc/pki|.|g' openssl.cnf
sed -i '/req_extensions/s/^# //g' openssl.cnf

#use for openssl ca command
mkdir -p CA/{certs,crl,newcerts,private}
touch CA/index.txt
echo 00 > CA/serial

1. 生成ca.key并自签署生成根证书

openssl genrsa -des3 -out ca.key 2048 
去掉中间的-des3可以生成不输密码的密钥. 这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。

openssl req \
    -sha256 -new -x509 -days 3650 \
    -key ca.key -out ca.crt \
    -config openssl.cnf \
    -subj "/C=CN/ST=GD/L=ShenZhen/O=ISPC Co.,LTD/OU=elite/CN=ca.ispc.com/[email protected]"


2. 生成ServerXX0 key和证书签名请求
openssl genrsa -out serverXX0.key 2048
openssl req \
    -new -sha256 \
    -key serverXX0.key -out serverXX0.csr \
    -config openssl.cnf \
    -subj "/C=CN/ST=GD/L=ShenZhen/O=ISPC Co.,LTD/OU=elite/CN=agee.ispc.com/[email protected]"

3. 查看签名请求文件信息
openssl req -text -in serverXX0.csr
检查 Signature Algorithm 是不是sha256WithRSAEncryptio


4. 使用自签署的CA,签署serverXX0.scr
 4.1 使用ca伪命令签发证书
 openssl ca \
    -cert ca.crt -keyfile ca.key \
    -md sha256 -days 3650 -extensions v3_req -config openssl.cnf \
    -in serverXX0.csr -out serverXX0.crt
    

 4.2 使用x509伪命令签发证书
 openssl x509 -req \
    -CA ca.crt -CAkey ca.key \
    -sha256 -days 3650 -CAcreateserial -extensions v3_req -extfile openssl.cnf \
    -in serverXX0.csr -out serverXX0.crt
    


5.查看证书
openssl x509 -text -in serverXX0.crt

6. 转换格式
 6.1 转换成IIS可使用的pfx格式
 openssl pkcs12 -export -out serverXX0.pfx -inkey serverXX0.key -in serverXX0.crt
 
 6.2 转换成pem格式
 openssl rsa -in serverXX0.key -out serverXX0-np.key
 cat serverXX0-np.key serverXX0.crt > serverXX0.pem

 6.3 转换成p12格式
 openssl pkcs12 -export -out tsa.p12 -inkey tsa.key -in tsa.crt -chain -CAfile tsaroot.crt
   
# 从 PEM 转换到 DER:
$ openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

# 从 DER 转换到 PEM:
$ openssl x509 -in cert.der -inform DER -out cert.pem -outform PEM   
   


7. 定义openssl.cnf subjectAltName,增加下行,可实现证书给多个域名使用

7.1 取消req_extentions = v3_req这一行的注释
sed -i '/req_extensions/s/^# //g' openssl.cnf

7.2 在[ v3_req ]增加配置
subjectAltName = @alt_names

7.3 添加alt_names配置信息
[ alt_names ]
DNS.1 = *.ecmms.ispcmj
DNS.2 = *.ispcmj.com
DNS.3 = 928.ecmms.ispcmj

8. 创建crt格式的自签名证书
openssl req \
  -sha256 -newkey rsa:2048 -nodes \
  -keyout agsenterprise.key -out agsenterprise.crt \
  -x509 -days 3650 \
  -config openssl.cnf -extensions v3_req  \
  -subj "/C=CN/ST=GD/L=ShenZhen/O=ISPC Co.,LTD/OU=elite/CN=928.ecmms.ispcmj/[email protected]"
  
  
  
-----------agee.ispcmj.com
#1. 配置openssl.cnf文件
cp /etc/pki/tls/openssl.cnf openssl.cnf
cat <<EOF>> openssl.cnf
[ v3_req2 ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = 930.ecmms.ispcmj
DNS.2 = *.ispcmj.com
EOF

#2. 生成ca.key并自签署生成根证书
openssl genrsa -out ca.key 4096 
openssl req \
    -sha512 -new -x509 -days 7300 \
    -key ca.key -out ca.crt \
    -config openssl.cnf \
    -subj "/C=CN/ST=GD/L=ShenZhen/O=ispcmj Co.,LTD/OU=ispcmj/CN=ca.ispc/[email protected]"

#3. 生成ServerXX0 key和证书签名请求
openssl genrsa -out agee.ispcmj.com.key 2048
openssl req \
    -new -sha256 \
    -key agee.ispcmj.com.key -out agee.ispcmj.com.csr \
    -config openssl.cnf \
    -subj "/C=CN/ST=GD/L=ShenZhen/O=ispcmj Co.,LTD/OU=ispcmj/CN=agee.ispcmj.com/[email protected]

#4. 使用自签署的CA,签署serverXX0.scr
   使用x509伪命令签发证书
openssl x509 -req \
    -CA ca.crt -CAkey ca.key \
    -sha256 -days 3650 -CAcreateserial -extensions v3_req2 -extfile openssl.cnf \
    -in agee.ispcmj.com.csr -out agee.ispcmj.com.crt

10-10 14:53