售前咨询
技术支持
渠道合作

Nginx ocsp 装订指南

 一、说明

1. OCSP装订(英语:OCSP Stapling)

正式名称为TLS证书状态查询扩展,可代替在线证书状态协议(OCSP)来查询X.509证书的状态。服务器在TLS握手时发送事先缓存的OCSP响应,用户只需验证该响应的有效性而不用再向数字证书认证机构(CA)发送请求。

2. 动机

OCSP装订解决了在线证书协议中的大多数问题。CA给网站颁发证书之后,网站的每个访问者都会进行OCSP查询。因此使用在线证书协议时,高并发的请求会给CA的服务器带来很大的压力。同时由于必须和CA建立连接,OCSP查询还会影响浏览器打开页面的速度并泄漏用户隐私。此外,当OCSP查询无法得到响应时,浏览器必须选择是否在无法确认证书状态的情况下继续连接,造成安全性和可用性二选一的困局。

3. 意义

在服务器上部署ocsp装订,能大大缓解链接数与高并发量。省去多次握手操作,使网站访问速度更快。

 二、环境准备

1. 环境简介

Linux或Windows服务器一台。系统自带有openssl工具,或单独安装的openssl工具。

2. 网络要求

此站点拥有一个合法的外网可以访问的域名地址。

3. 中间件版本

nginx/1.10.1版本以上。

 三、获取证书

1. 下载证书

在您完成申请数安时代GDCA服务器证书的流程后,登录系统将会下载一个压缩文件,使用Nginx_Other_Server里面的文件;文件内有issuer.crt,www.domainame.com_chain.crt(此为原申请的域名命名的证书)。

2. 准备证书

站点证书(www.domainame.com_chain.crt)+ 根证书(root.crt)+ 中级证书(issuer.crt)。以及准备申请证书时填写csr下载的私钥www.domainame.com.key文件,以便后续部署使用。除了站点证书与中级证书已有,根证书可以根据以下步骤获取:

双击证书-选择证书路径-“GDCA TrustAUTH R5 ROOT”-查看证书。

选择详细信息-复制到文件,点击下一步。

选择CER格式,点击下一步。

选择导出的目录,命名为root.crt,点击下一步,然后点击完成导出即可。

 四、生成OCSP Stapling

1. 上传证书

将三份证书上传到服务器,生成OCSP Stapling验证文件。即是将中级证书与根证书合并一起。注意,中级证书在上、根证书在下。

Linux下可使用命令,重命名为hecheng.crt。如下:

cat issuer.crt >> hecheng.crt
cat root.crt >> hecheng.crt

Windows下使用文本编辑打开中级证书与根证书分别按照中级证书在上、根证书在下的顺序排列合并,然后重命名即可:

最后合并生成的hecheng.crt就是所需的ocsp stapling验证文件。

2. 验证ocsp

查看站点证书对应的ocsp服务地址。命令:

openssl  x509 -noout -ocsp_uri -in www.domainame.com_chain.crt

例如GDCA自主证书dv的ocsp地址是http://ocsp6.gdca.com.cn/dv

以GDCA dv证书为例,获取站点证书的 OCSP Response。执行以下命令:

openssl ocsp -no_nonce  -issuer issuer.crt  -CAfile hecheng.crt  -VAfile hecheng.crt  -cert www.domainame.com_chain.crt  -url http://ocsp6.gdca.com.cn/dv  -text  -header "HOST" "ocsp6.gdca.com.cn/dv"

#选项大意:
 -issuer   #中级证书
 -CAfile   #ocsp stapling验证的文件,即刚合并的证书
 -VAfile   #ocsp stapling验证的文件,即刚合并的证书
 -cert     #站点证书
 -url      #ocsp地址
 -header "HOST"     #去掉主机头的ocsp地址

若执行没有错误,会返回以下:

若返回:

注意:如果站点证书的ocsp地址是http://ocsp6.gdca.com.cn/dv,由于在Windows访问是需要下载一个二进制文件,而Linux访问与Windows的下载机制不一样,所以会报这个错误。此错误不影响,可以忽略。

 五、Nginx启用OCSP Stapling

1. 说明

前提下nginx要先部署ssl证书,并可以正常访问。配置参考如下:

server {
    listen 443;
    server_name www.domainame.com;   #证书绑定的网站域名
    ssl on;
    ssl_certificate  conf/www.domainame.com_chain.crt;  #证书公钥
    ssl_certificate_key conf/www.domainame.com.key;    #证书私钥
    ssl_stapling on;       #开启stapling
    ssl_stapling_verify on;    #开启stapling验证
    ssl_trusted_certificate conf/hecheng.crt;  #指定验证的证书
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!3DES:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        root html;          #站点目录
        index index.html index.htm;
    }
}

配置完成,保存退出。重启nginx,就成功启用了OCSP Stapling。

2. 测试OCSP Stapling状态。

(1)命令如下:

openssl s_client -connect www.domainame.com:443 -servername www.domainame.com -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"
#注:测试的是站点域名与https默认端口443,域名也可用本地127.0.0.1来代替测试。

若站点返回OCSP response: no response sent,代表开启失败。

若站点已成功启用OCSP Stapling,会返回以下提示:

(2)或者使用:

echo QUIT | openssl s_client -connect www.domainame.com:443 -status 2> /dev/null | grep -A 17 'OCSP response:'
#注:测试的是站点域名与https默认端口443,域名也可用本地127.0.0.1来代替测试。

执行后,若没有返回信息,则开启失败。

若站点已成功启用OCSP Stapling,会返回以下提示:

3. 外网域名检测

检测地址:https://www.ssllabs.com/ssltest/

输入域名,点击submit进行检测。

若ocsp stapling这项是yes,代表站点ocsp stapling已成功开启。

上一篇:

下一篇:

相关文章