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 文件,然后终端工具就花屏了

Nginx 关于 OCSP 的调试部署

未完待续,下一步讲解部署 nginx

参考文章如下:

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

上一篇:CRT自动保存日志


下一篇:objdump 分析