一、证书申请流程
HTTPS使用签名证书流程如下:
1、服务器生成一对公钥和私钥(不对称加密方式,此处的公钥简称<服公钥>,密钥简称<服密钥>)
2、服务器向CA机构进行通信,将<服公钥>交给CA机构
3、CA对<服公钥>进行数字签名,生成一个<数字签名>,将两者绑定在一起<公钥证书>
4、<公钥证书>返回并且存在服务器,在paas平台的Nginx上导入签名的证书
二、签名过程
1、创建私钥
使用openssl工具生成一个RSA私钥
# openssl genrsa -des3 -out server.key 2048
注意:生成私钥,需要提供一个至少4位,最多1023位的密码。
2、生成CSR(证书签名请求CSR文件)
# openssl req -new -key server.key -out server.csr
说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致(对应要签名的域名),否则会引起浏览器警告。
3、删除密钥中的密码
# openssl rsa -in server.key -out server.key
说明:如果不删除密码,在应用加载的时候会出现输入密码进行验证的情况,不方便自动化部署。
-------------------------------------------------------------------------------------------------------------------------------------
CA机构签名
可以将上面的证书发server.csr送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书,需要花钱。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名。
------------------------------------------------------------------------------------------------------------------------------------------
自签名方法
4、生成自签名证书
内部或者测试使用,只要忽略证书提醒就可以了。
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
5、生成pem格式的公钥
有些服务,需要有pem格式的证书才能正常加载,可以用下面的命令:
# openssl x509 -in server.crt -out server.pem -outform PEM
6、CER格式转CRT格式
# openssl x509 -inform DER -in server.cer -out server.crt |
三、多域名SSL证书请求
一般默认是针对一个域名进行签名,也可以在一个证书里设置多个域名,来实现多个域名使用一个证书的目的。
经过多次实验,只发现下面一个命令能够实现:
# openssl req -new -sha256 -key server.key -subj "/" -reqexts SAN -config <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:yoursite1.com,DNS:www.yoursite2.com")) > server.csr
使用下面的命令来查看csr文件里的包含信息:
# openssl req -text -noout -in server.csr
如果显示下面标红的文字,说明设置成功:
Certificate Request:
Data:
Version: 0 (0x0)
Subject:
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus: ..........
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:yoursite1.com, DNS:www.yoursite3.com
Signature Algorithm: sha256WithRSAEncryption
........