由于人们越来越重视网络安全,所以很多平台及系统都要求使用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证书操作如下:

win-install.png

#Mac os 下安装自签https证书操作如下:

mac-install.png


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