配置自签https ssl证书
由于人们越来越重视网络安全,所以很多平台及系统都要求使用https方式接入。而且一些开源服务框架在调用时也只接受https请求,这将导致平时开发/测试时需要用到ssl证书的地方越来越多。
在2016年的时候StartCom(提供免费ssl证书的CA厂商)违规操作签发证书,现已被各大浏览器厂商列为黑名单,造成免费ssl证书申请越来越困难。收费ssl证书价格又较高。如果只是公司内部使用或是开发/测试需要,我们完全可以自已动手签发ssl证书,下面讲一下如何签发ssl证书的环境准备及签发操作。
1、安装升级openssl
#首先,查看下当前设备的openssl版本,如果版本在openssl1.0.1g以上,可以略过安装升级操作:
openssl version #OpenSSL 1.0.1e-fips 11 Feb 2013
#如果版本低于1.0.1g,请升级到1.0.1g版本以上。因为那些低版本存在漏洞,相关漏洞详情请搜索查看OpenSSL“心脏出血”漏洞。
#从上面信息可以看出系统的openssl版本是1.0.1e,openssl需要升级,接下来下载源代码并安装升级:
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz tar zxf openssl-1.1.0g.tar.gz cd openssl-1.1.0g ./config make -j4 make install
#下面两行操作用于修改历史的OpenSSL文件设置备份
mv /usr/bin/openssl /usr/bin/openssl.old mv /usr/include/openssl /usr/include/openssl.old
ln -s /usr/local/bin/openssl /usr/bin/openssl ln -s /usr/local/include/openssl /usr/include/openssl
#更新动态链接库数据
echo "/usr/local/lib64" >> /etc/ld.so.conf ldconfig -v
#最后查看一下版本
openssl version
OpenSSL 1.1.0g 2 Nov 2017
#版本已升级到了1.1.0g
2、配置签发https ssl证书(CA签发证书方案)
注:网上很多人使用常规命令创建签发证书后,会发现其在客户端安装并信任了相关证书,但在chrome下仍然是不被信任,警告信息有:Subject Alternative Name Missing或NET::ERR_CERT_COMMON_NAME_INVALID错误,如果遇到这样的错误请参考下面的方法重新签发证书试验,至少我在遇到上述问题后,用下面的方法签发证书所有问题都得到了解决。
#创建配置文件:MyCompanyCA.cnf用于创建CA证书,内容如下:
[ req ] distinguished_name = req_distinguished_name x509_extensions = root_ca [ req_distinguished_name ] countryName = CN countryName_min = 2 countryName_max = 2 stateOrProvinceName = Shanghai localityName = Shanghai organizationName = YinChang Information Technology Co., Ltd. organizationalUnitName = YinChang commonName = YinChang commonName_max = 64 emailAddress = admin@lichengxiao.cn emailAddress_max = 64 [ root_ca ] basicConstraints = critical, CA:true
#创建扩展配置文件:MyCompanyLocalhost.ext 用于创建服务器证书,内容如下(如果需要给IP地址签发https证书,请在配置文件尾部增加:IP.1 = x.x.x.x):
subjectAltName = @alt_names extendedKeyUsage = serverAuth [alt_names] DNS.1 = *.lichengxiao.cn DNS.2 = lichengxiao.cn
#如果需要给IP地址签发https证书,请使用下面配置,即在上述配置尾部示增加IP.1/IP.2节点,具体值根据实际情况填写:
subjectAltName = @alt_names extendedKeyUsage = serverAuth [alt_names] DNS.1 = *.lichengxiao.cn DNS.2 = lichengxiao.cn IP.1 = 192.168.2.221 IP.2 = 127.0.0.1
#创建CA证书及密匙(用于签发颁发证书)
openssl req -x509 -newkey rsa:2048 -out MyCompanyCA.cer -outform PEM -keyout MyCompanyCA.pvk -days 3650 -verbose -config MyCompanyCA.cnf -nodes -sha256 -subj "/CN=YinChang CA"
上述命令执行完会产生两个文件:MyCompanyCA.cer 、MyCompanyCA.pvk
#创建ssl证书密匙及申请文件
openssl req -newkey rsa:2048 -keyout MyCompanyLocalhost.pvk -out MyCompanyLocalhost.req -subj /CN=*.lichengxiao.cn -sha256 -nodes
上述命令执行完会产生两个文件:MyCompanyLocalhost.pvk 、MyCompanyLocalhost.req
#签发ssl证书(-days参数用于指定证书有效期,根据需要自行调整)
openssl x509 -req -CA MyCompanyCA.cer -CAkey MyCompanyCA.pvk -in MyCompanyLocalhost.req -out MyCompanyLocalhost.cer -days 3650 -extfile MyCompanyLocalhost.ext -sha256 -set_serial 0x1111
上述命令执行完产生ssl证书文件:MyCompanyLocalhost.cer,配合上一步生成的证书密匙文件:MyCompanyLocalhost.pvk一起使用。
将ssl证书文件:MyCompanyLocalhost.cer、ssl证书密匙文件:MyCompanyLocalhost.pvk配置到Web服务器启用https模块,重启服务。服务器端的配置完成。
#拷贝证书文件:MyCompanyCA.cer到需要使用https访问服务器的客户端安装
#Windows 下安装自签https证书操作如下:
#Mac os 下安装自签https证书操作如下:
3、配置签发https ssl证书(直接用密钥签发证书方案)
此方法不需要借用CA证书那些繁琐的操作就可以简单快速的生成ssl证书文件:
#生成证书密钥文件 openssl genrsa -idea -out https.key 2048 #生成证书请求文件 openssl req -new -key https.key -out https.csr #生成证书文件 openssl x509 -req -days 36500 -in https.csr -signkey https.key -out https.crt #直接生成ssl密钥文件及证书文件 openssl req -days 3650 -x509 -sha256 -nodes -newkey rsa:2048 -keyout https.key -out https.crt #移除密钥文件密码,方便免密启动nginx/Haproxy等服务 openssl rsa -in https.key -out https.pem