因为某些浏览器的原因,可能我们需要为证书配置 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
参考文章如下:
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