修改日期 | 修改人 | 备注 |
2021-08-24 13:47:42[当前版本] | 潘帅 | 1.2 |
2021-08-19 07:12:23 | 潘帅 | 1.0 |
如果你的项目有等级保护测评、国产密码测评的要求,那你就不能错误这篇文章了。等级保护测评和国产密码测评的范围虽然不太一样,但在数据传输安全层面都要求使用https协议,也就是要为Web站点安装SSL证书。
需求有两条:
1.支持内网IP地址
我们很多项目都是在内部局域网运行,没有公网IP,更没有域名,因此必须能支持内网IP地址。
2.免费
相当一部分SSL证书需要付费购买,虽然一般不是很贵,成本也需要稍稍考虑一下。免费的SSL证书也有不少地方可以申请,但是能支持内网IP地址的好像没有。
基于这两条需求,考虑使用开源组件OpenSSL创建自签名SSL证书。自己发给自己的证书,可不就想怎么改就怎么改。
CentOS操作系统是自带OpenSSL组件,可以选择直接使用或者更新后使用。
查看OpenSSL版本
openssl version获取最新版本OpenSSL
wget https://www.openssl.org/sources/openssl-1.1.1k.tar.gz解压后进行配置,升级到最新版本
Windows操作系统可以安装OpenSSL for Windows。
创建一个后缀为cnf的配置文件,名称随便起,但是要记得,后面会用到。
[req] distinguished_name = req_distinguished_name encrypt_key = no req_extensions = req_ext [req_distinguished_name] countryName = CN countryName_default = US stateOrProvinceName = HuNan stateOrProvinceName_default = HuNan localityName = ChangSha localityName_default = ChangSha organizationalUnitName = HNRF organizationalUnitName_default = HNRF commonName = www.hunanszrf.com commonName_max = 64 [req_ext] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = www.hunanszrf.com DNS.2 = *.hunanszrf.com DNS.3 = njrgrj.imwork.net IP.1 = 192.168.199.86 IP.2 = 192.168.199.189 IP.3 = 113.246.57.49
其中req_distinguished_name项内是证书的基本信息,alt_names是可以使用证书的域名和IP地址,可以填写多个。
总体过程是先创建一个私钥,然后通过私钥创建一系列证书。
下面是在CentOS中的执行示例
# 生成ca openssl genrsa -out ca.key 2048 openssl req -new -key ca.key -out ca.csr -config san.cnf -extensions req_ext openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -extfile san.cnf -extensions req_ext # 生成client openssl genrsa -out client.key 2048 openssl req -new -key client.key -out client.csr -config san.cnf -extensions req_ext openssl x509 -req -sha256 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt最后生成的是这么一堆文件
后缀为crt的就是我们需要的证书文件。
可以为操作系统或者某个单独的站点安装SSL证书。
SSL证书创建完、安装完并不是就结束了,开发人员的工作还没结束呢。
目前我们采用的是前后端分离的开发方式,SSL证书一般加在前端站点上,这就要求所有的请求都必须是https协议的,也就是前端的调用、后端的接口提供都需要在代码中改成https形式。