Nginx 关于 OCSP 的调试部署

因为某些浏览器的原因,可能我们需要为证书配置 OCSP 。

花了一下午进行调试和整理,现在已经成功,现在写下心得。

证书是在 PositiveSSL 购买的,也就是现在的 Comodo 证书。

如何生成 csr 并生成密钥,并购买证书,因为教程比较多,这里就不在阐述了。

一般我们购买证书之后,在邮件或者等地方都可以下载到我们需要的证书文件,常见的压缩包里会包含两个:

doamin.crt  也就是我们的域名网站证书

domain.ca-bundle 捆绑证书,包含根证书和中间证书。

当然如果没有中间证书,我们也可以在购买的对应证书官网下载,比如 comodo :https://support.sectigo.com/Com_KnowledgeDetailPage?Id=kA01N000000rfBO

我们来看一下该页面对中间证书的介绍,因为我们使用的是个人域名申请,所以这里就只看 Domain Validation 这一栏

Domain Validation

[Download] Sectigo RSA Domain Validation Secure Server CA [ Intermediate ] 为中间证书
[Download ] USERTrust RSA Root xSigned using AAA CA [ Cross Signed ] 为交叉签名
(Or)
[Download] Sectigo RSA DV Bundle [ Intermediate + Cross Signed ] 顾名思义,就是以上两个的合并文件。

其实我们下载上面的捆绑证书,然后在使用我们的域名证书合并在一起也就生成了完整的证书链:

cat domain.crt SectigoRSADomainValidationSecureServerCA.crt USERTrustRSAAAACA.crt > fullchain.crt

不过在 comodo 早版本之前,购买的证书曾经碰到过三个中间证书,合并规则如下:

cat domain.crt SectigoRSADomainValidationSecureServerCA.crt USERTrustRSAAAACA.crt AAACertificateServices.crt > fullchian.crt

因为 AAACertificateServices.crt 这个为旧版本的中间证书:https://support.sectigo.com/Com_KnowledgeDetailPage?Id=kA01N000000zFQj

 

好了,拿到证书的文件之后,我们开始测试并使用 OCSP:

查看csr文件信息命令:

openssl req -in domain.csr -noout -text

查看证书文件信息命令,csr 为申请域名之前自己生成的:

openssl x509 -in site.crt -noout -text

查看证书fingerprint的命令:

openssl x509 -in domain.crt -noout -fingerprint

接下来是证书及https验证相关的命令:

openssl x509 -in domain.crt -noout -subject

这个命令用来检查证书的主体,可以查看到证书的域,在这里我们可以查到 comodo 的 ocsp 网址为:http://ocsp.sectigo.com

openssl x509 -in domain.crt -noout -ocsp_uri

接下来我们验证 ocsp 结果,在这里一直卡在了一个错误:

注意,代码中的 domain.ca-bundle 为中间证书,domain.crt 为我们的域名证书,别错了,一般都是购买后下载压缩里的两个文件

openssl ocsp -issuer domain.ca-bundle -cert domain.crt -no_nonce -text -url http://ocsp.digicert.com/ -text -respout stapling_ocsp

返回错误信息如下:

OCSP Request Data:
    Version: 1 (0x0)
    Requestor List:
        Certificate ID:
          Hash Algorithm: sha1
          Issuer Name Hash: 430BD20E4F137A1A6C918F24E5DA7E324D4733C8
          Issuer Key Hash: 8D8C5EC454AD8AE177E99BF99B05E1B8018D61E1
          Serial Number: E5CAE551D10B808BA44AA90A85E0F65F
Responder Error: unauthorized (6)

后来参考 http://www.voidcn.com/article/p-xirnixfk-btx.html 为 openssl 加上 host

 openssl ocsp -issuer domain.ca-bundle.crt -cert domain.crt -no_nonce -url http://ocsp.sectigo.com -header "HOST" "ocsp.sectigo.com"

还是报错如下:

Response Verify Failure
140196948916112:error:27069076:OCSP routines:OCSP_basic_verify:signer certificate not found:ocsp_vfy.c:92:
www_luckfile_com.crt: good
        This Update: Dec  2 20:04:31 2020 GMT
        Next Update: Dec  9 20:04:31 2020 GMT

这期间测试过很多方法,包括更换 ocsp 网址,以及代码中的两个证书文件,都不行

知道无意间搜索到一篇文章才知道要使用如下格式,这里的 SectigoRSADVBundle.pem 不用管,等同于上面的 domain.ca.bundle 中间证书

重点是 -verify_other fullchain.pem 这个,也就是我们的完整证书链,也就是 域名证书+中间证书的合并文件,也就是 nginx 里的 ssl_certificate 配置文件

openssl ocsp -respout ocsp_sta.oscp -issuer SectigoRSADVBundle.pem -cert domain.crt -no_nonce -url http://ocsp.sectigo.com -header "HOST" "ocsp.sectigo.com" -verify_other fullchain.pem 

返回如下,并生成 ocsp_sta.oscp 文件:

Response verify OK
www_luckfile_com.crt: good
        This Update: Dec  2 20:04:31 2020 GMT
        Next Update: Dec  9 20:04:31 2020 GMT

PS:我直接在终端 cat 了 ocsp_sta 文件,然后终端工具就花屏了

接下来进行测试:

 openssl s_client -connect 127.0.0.1:443 -servername domain.com -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"

当然也可以去除 | grep -i "OCSP response" 来查看返回的详细信息

返回如下证明成功:

OCSP response: 
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response

接下来在宝塔的网站 nginx 配置文件中修改:

    ssl_stapling on;
    ssl_stapling_file /www/server/panel/vhost/cert/domain.com/ocsp_sta.oscp;
    ssl_stapling_verify on;
    ssl_trusted_certificate /www/server/panel/vhost/cert/domain.com/SectigoRSADVBundle.pem;
    resolver 8.8.4.4 valid=300s;
    resolver_timeout 1s;

然后重 重启 nginx ,reload 不行,必须 restart

参考文章如下:

https://www.cnblogs.com/maintell/p/13601458.html

http://www.voidcn.com/article/p-xirnixfk-btx.html

https://sillydong.com/mysa/myserver/https_openssl.html

https://blog.csdn.net/HalsonHe/article/details/81030292

 

 

oscp 在线检测:https://www.getssl.cn/ocsp

https://myssl.com/

https://certificatetools.com/ocsp-checker

 

提醒:如果使用 cloudflare 等 CDN ,检测状态将不会显示 ocsp 装订,这个 cdn 的策略有关.

我进行了两次测试,使用 CDN ,在线检测不到,关闭 CDN,检测生效 .

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值