目录
文章目录
一. 名词解释
1. CA机构
电子商务认证中心、电子商务认证授权机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA是负责签发证书、认证证书、管理已颁发证书的机关。
2. SSL 证书(SSL Certificates)
即安全套接层(SSL)数字证书,数字证书是一种用于电脑的身份识别机制。数字证书可以从身份认证机构获得。理论上任何人都可以给您发个数字证书。换个说法就是给您发数字证书的那个人或机构对您的公钥进行加签。一般国际可信的证书由CA机构制作颁发,据各种不同情况,可能是CA给用户颁发的,或者用户主动申请的。
3. HTTPS(超文本传输安全协议)
一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加密。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性。
4. 单向认证
只需要验证SSL服务器身份,不需要验证SSL客户端身份。
5. 双向认证
要求服务器和客户端双方都有证书,客户端需要校验服务端,服务端也需要校验客户端。
二. 获取证书途径
- 向CA认证商购买
- 使用OpenSSL自签证书
三. 使用OpenSSL自签证书
前置准备
-
下载并安装OpenSSL,win端在此网站下载
http://slproweb.com/products/Win32OpenSSL.html
安装之后执行在命令行执行openssl version -a会输出相关信息
-
修改上一步执行命令后,OPENSSLDIR路径下的配置文件openssl.cnf
将CA_default下的dir的值改为
.
,其他不变
-
新建一个文件夹,之后都是基于该文件夹下进行操作
-
在文件夹内新建以下内容
certs // 文件夹,保存导出证书 config // 文件夹,保存配置文件 crl // 文件夹,保存吊销列表 csr // 文件夹,保存请求文件 newcerts // 文件夹,保存证书 private // 文件夹,保存密钥 crlnumber // 文本,下一个吊销列表序列号 index.txt // 文本,保存签证信息 serial // 文本,下一个证书序列号
-
给crlnumber、serial写入文本
01
-
以下均是在win系统上执行,若要在Linux上执行,请将执行步骤里的反斜杠
\
替换成正斜杠
/
1. 生成CA证书
既然要自签证书,因此需要自己承担CA这个角色,首先需要生成CA证书
生成步骤
-
生成CA密钥
openssl genrsa -out .\private\cakey.pem 4096
-
生成CA请求文件
openssl req -new -sha256 -out .\csr\cakey.csr -key .\private\cakey.pem
-
生成CA证书
openssl x509 -req -days 3650 -in .\csr\cakey.csr -signkey .\private\cakey.pem -out .\cacert.pem
-
导出安装用证书
openssl pkcs12 -export -inkey .\private\cakey.pem -in .\cacert.pem -out .\certs\ca.pfx
注意事项
-
执行第二步时,会要求填入相关信息,内如如下
Country Name (2 letter code) [AU]:CN // 国家 State or Province Name (full name) [Some-State]:GuangDong // 省份 Locality Name (eg, city) []:ShenZhen // 城市 Organization Name (eg, company) [Internet Widgits Pty Ltd]:YD-Cat // 机构 Organizational Unit Name (eg, section) []: // 单位,可选 Common Name (e.g. server FQDN or YOUR name) []:YD-Cat // 公用名,可选 Email Address []: // 可选 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: // 可选 An optional company name []: // 可选
-
第三步的 -days 3650 用来指定证书有效时间,若不指定则使用OpenSSL配置文件里的默认值
2. 生成服务端证书
生成步骤和CA证书类似,
但需要添加一个配置文件
配置文件
在config文件夹下新建一个server.conf文件,内容如下
[ req ]
req_extensions = req_ext
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = test.com # 自行根据待配置证书的域名修改
DNS.2 = *.test.com # 自行根据待配置证书的域名修改,该项用来认证二级域名,若无需验证去掉即可
生成步骤
-
生成证书密钥
openssl genrsa -out .\private\serverkey.pem 2048
-
生成证书请求文件
openssl req -new -sha256 -out .\csr\serverkey.csr -key .\private\serverkey.pem
-
生成证书
openssl ca -in .\csr\serverkey.csr -out .\certs\server.crt -days 3650 -extensions req_ext -extfile .\config\server.conf
执行后输入两次 Y 并且回车即可
注意事项
-
执行第二步时,会要求填入相关信息,内容和CA证书一致
但此时若不修改OpenSSL配置文件,服务端证书部分字段要求和CA证书的对应字段一致,或者必填,否则无法签名
详情看配置文件openssl.cnf的
[ policy_match ]
项,根据需要修改对应的匹配规则即可# 匹配规则 # match 完全一致 # optional 可选 # supplied 必填,可不一致 [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional
-
根据server.conf中的[alt_names]项的
DNS.1 = test.com
来匹配认证域名,若不匹配打开网之后会提示证书不安全
可使用 *.test.com 来通用匹配二级域名
3. 生成客户端证书
生成步骤和服务端类似,会多一个导出安装用证书的步骤
该步骤导出的文件用来在访问端电脑上安装
生成步骤
-
生成证书密钥
openssl genrsa -out .\private\clientkey.pem 2048
-
生成证书请求文件
openssl req -new -sha256 -out .\csr\client.csr -key .\private\clientkey.pem
-
生成证书
openssl ca -in .\csr\client.csr -out .\certs\client.crt -days 3650
执行后输入两次 Y 并且回车即可
-
导出安装用证书
openssl pkcs12 -export -inkey .\private\clientkey.pem -in .\certs\client.crt -out .\certs\client.pfx
四. 配置证书
以Nginx为例,在Nginx的配置文件做以下修改
单向认证
-
listen改为
443 ssl
,server_name改为待配置证书的域名注:server_name需和生成服务端证书的server.conf里的[alt_names]一致
-
新增以下配置
ssl_certificate D:\CA\certs\server.crt; # 服务端证书,即生成服务端证书第三步生成的文件
ssl_certificate_key D:\CA\private\serverkey.pem; # 服务端证书密钥,即生成服务端证书第一步生成的文件
-
在需要访问的电脑上安装certs文件夹下的CA证书,即生成CA证书的第四步生成的文件
ca.pfx
注意事项:
-
安装证书时选择安装位置,将证书安装在
受信任的根证书颁发机构
路径 - 若执行导出证书步骤时有填入密码,在安装证书时也要填写
-
安装证书时选择安装位置,将证书安装在
- 重新加载Nginx配置文件
- 打开HTTPS网址,若一切正常,会正常登录,并在浏览器地址栏旁边会出现锁的图标
双向认证
- 在单向认证的基础上,Nginx新增以下配置
ssl_client_certificate D:\CA\cacert.pem; # CA证书,即生成CA证书第三步所生成的文件
ssl_verify_client on; # 开启客户端证书验证,即双向认证
-
在需要访问的电脑上安装certs文件夹下的客户端证书,即生成客户端证书的第四步生成的文件
client.pfx
注意事项:
- 安装时一直下一步即可
-
若最后打开网址无法选择证书,尝试像安装CA证书一样选择安装位置,安装到
个人
路径下
-
重新加载Nginx配置文件
-
打开HTTPS网址
- 若一切正常,会弹框提示选择证书
- 若有正常安装客户端证书,会有上一步所安装的客户端证书,以及相关信息
- 选择后可正常登陆,并在浏览器地址栏旁边会出现锁的图标
五. 吊销列表
目前吊销列表只适用于吊销客户端证书,并且已开启双向认证,将客户端证书吊销后即可无法登录
吊销步骤
-
获取证书编号
openssl x509 -in .\certs\证书名.crt -noout -serial
证书名改为生成客户端证书第三步生成的证书名
执行后,serial后为证书编号
-
吊销证书
openssl ca -revoke .\newcerts\证书编号.pem
将证书编号改为上一步所获取的证书编号
-
生成吊销列表文件,
每一次吊销证书后都需要执行,否则无法更新其文件内容
openssl ca -gencrl -out .\crl\crl.pem
-
查看吊销列表,用来查看已吊销的证书,
可不执行
openssl crl -in .\crl\crl.pem -noout -text
Nginx使用吊销列表
-
在双向认证的基础上,新增以下配置
ssl_crl D:\CA\crl\crl.pem; # 吊销列表文件
-
重新加载Nginx配置文件
-
打开HTTPS网址,之后和双向认证登陆一致,只是选择被吊销的证书后无法正常登陆