Closed practicemp closed 5 years ago
我的 OpenSSL 版本信息为:
OpenSSL 1.0.2k-fips 26 Jan 2017
原命令:
# 校验 OCSP $ openssl ocsp -issuer chain.pem -cert cert.pem -CAfile chain.pem \ -no_nonce --text -url http://ocsp.int-x3.letsencrypt.org \ -header Host=ocsp.int-x3.letsencrypt.org
报错。将
--text
改为-text
后还是无法执行。然后根据谷歌到的这篇文章中的线索,将-header Host=ocsp.int-x3.letsencrypt.org
改为-header "Host" "ocsp.int-x3.letsencrypt.org"
后执行成功。
我在 openssl1.1.1 和 OpenSSL 1.1.0g 上运行没有问题,我觉得原因主要是 openssl 命令参数的不严谨(不同版本)导致的,比如 man 手册中也没说清楚,他的本意是传递 host 头,我在测试的时候也是头很大。
不过感觉在 key 和 value 中加双引号,感觉更严谨。
@ywdblog 还想问下作者,在 openssl ocsp
命令中添加 -respout
选项获取 OCSP 响应文件后,怎么查看该文件的内容?我只查到一个 openssl asn1parse -in ocsp_resp.der -inform DER
命令,但该命令的输出内容中 ocsp 响应好像是在 [HEX DUMP]
部分中,怎么才能解析出可读格式?
仅仅讨论 openssl ocsp 命令。
里面我觉得有一点误解,上面的openssl ocsp 就是为了校验 ocsp 请求,所有你看到的返回其实就是文本字符串,就是解析结果。
那么 openssl ocsp 也可以将响应以der 的结构保存到文件中,比如
openssl ocsp -respout response.der
如果用文本编辑器打开 response.der ,肯定是看不明白的,这时候需要一个 der 解析器。der 解析器网络上有很多。openssl 也自带了,比如执行:openssl ocsp -respin response.der -text -noverify
另外我是从应用的角度,或者说工具的角度简单理解下 ocsp 协议,其实要深入了解,可以用wireshark 或 tcpdump 抓个包,或者部署个ocsp 服务器更能了解其本质。
最后,如果你觉得本书写的还可以,欢迎去豆瓣(dohttps://book.douban.com/subject/30250772/)上做个评论,万分感谢。
@ywdblog 非常感谢!-respin
这个选项看到了,没在意【流汗】。
之所以提这个补充问题,主要是在第10章实战部分,对 Nginx 的 ssl_stapling_file
参数的实现感觉并没有展开来讲,只是说参考第六章,但第六章对 openssl ocsp
命令的 -respout
和 -respin
选项没提,而是我在第一个问题看到报错后注意到了这个 -respout
选项。但没有把握,所以想查看文件的内容是否和预想的一样。
最后,一开始着急用,所以买了豆瓣阅读上的电子书,但是只能在网页上看,比较费劲。最近又在京东上买了纸质版的,还是纸质版的翻着舒服,查找也快。豆瓣早已评论, #2 就是我提的。
非常感谢,我回家看看第十章。
@practicemp,确实写的不详细,没有说明怎么获取,这一块你如果测试通过了,也可以分享下,:)
@ywdblog 能力有限,写了一个非常简单的脚本 https://github.com/practicemp/ocsp,在 OpenSSL 1.0.2 上面测试通过。虽然已经确认过 OpenSSL 手册上 1.1.0 及 1.1.1 版本的 -header
选项确实如书中所写格式,并将其写入脚本中,但没有响应的版本环境进行测试。不知道你是否感兴趣并有条件帮助我在这两个版本上测试?非常感谢!
另外,在 6.7.9 小节 228 页,输出的响应内容最后部分有 Response verify OK
这一行,但我在测试时出现的是
Response Verify Failure
140679048464288:error:27069076:OCSP routines:OCSP_basic_verify:signer certificate not found:ocsp_vfy.c:92:
按照书中所说,Let's Encrypt 的 OCSP 响应中并不包含 Certificate 信息,为什么书中的例子显示的是校验成功,我的是校验失败?我根据书中提示,将 -CAfile
选项取消 ,并添加了 -noverify
选项,使得这个提示不再出现。
我最近在外面,下周回去后看看
我测试了下,没有问题,你重新编译下OpenSSL 版本看看。
另外生成 der 文件后,你在nginx上配置到 letsencrypt.com 上网络不通的情况下,正确使用本地ocsp响应的文件了吗?
好的。
如果设置了 ssl_stapling_file
指令,nginx 就不会去访问 letsencrypt.com 了,而是直接使用 ssl_stapling_file
中设置的 本地ocsp响应文件
。所以可以正确使用。
嗯, ssl_stapling_file 这个我还真没实际用过,学习了。
我的 OpenSSL 版本信息为:
OpenSSL 1.0.2k-fips 26 Jan 2017
原命令:
报错。将
--text
改为-text
后还是无法执行。然后根据谷歌到的这篇文章中的线索,将-header Host=ocsp.int-x3.letsencrypt.org
改为-header "Host" "ocsp.int-x3.letsencrypt.org"
后执行成功。