ywdblog / httpsbook

《深入浅出HTTPS:从原理到实战》代码示例、勘误、反馈、讨论
https://www.simplehttps.com
88 stars 35 forks source link

227页 6.7.9小节 校验 OCSP 命令无法执行 #8

Closed practicemp closed 5 years ago

practicemp commented 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" 后执行成功。

ywdblog commented 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 中加双引号,感觉更严谨。

practicemp commented 5 years ago

@ywdblog 还想问下作者,在 openssl ocsp 命令中添加 -respout 选项获取 OCSP 响应文件后,怎么查看该文件的内容?我只查到一个 openssl asn1parse -in ocsp_resp.der -inform DER 命令,但该命令的输出内容中 ocsp 响应好像是在 [HEX DUMP] 部分中,怎么才能解析出可读格式?

ywdblog commented 5 years ago

仅仅讨论 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/)上做个评论,万分感谢。

practicemp commented 5 years ago

@ywdblog 非常感谢!-respin 这个选项看到了,没在意【流汗】。

之所以提这个补充问题,主要是在第10章实战部分,对 Nginx 的 ssl_stapling_file 参数的实现感觉并没有展开来讲,只是说参考第六章,但第六章对 openssl ocsp 命令的 -respout-respin 选项没提,而是我在第一个问题看到报错后注意到了这个 -respout 选项。但没有把握,所以想查看文件的内容是否和预想的一样。

最后,一开始着急用,所以买了豆瓣阅读上的电子书,但是只能在网页上看,比较费劲。最近又在京东上买了纸质版的,还是纸质版的翻着舒服,查找也快。豆瓣早已评论, #2 就是我提的。

ywdblog commented 5 years ago

非常感谢,我回家看看第十章。

ywdblog commented 5 years ago

@practicemp,确实写的不详细,没有说明怎么获取,这一块你如果测试通过了,也可以分享下,:)

practicemp commented 5 years ago

@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选项,使得这个提示不再出现。

ywdblog commented 5 years ago

我最近在外面,下周回去后看看

ywdblog commented 5 years ago

我测试了下,没有问题,你重新编译下OpenSSL 版本看看。

另外生成 der 文件后,你在nginx上配置到 letsencrypt.com 上网络不通的情况下,正确使用本地ocsp响应的文件了吗?

practicemp commented 5 years ago

好的。 如果设置了 ssl_stapling_file 指令,nginx 就不会去访问 letsencrypt.com 了,而是直接使用 ssl_stapling_file 中设置的 本地ocsp响应文件。所以可以正确使用。

ywdblog commented 5 years ago

嗯, ssl_stapling_file 这个我还真没实际用过,学习了。