【发布时间】:2018-11-21 00:35:24
【问题描述】:
我使用 Certbot 容器通过 Letsencrypt 生成证书:
$ mkdir /home/$USER/letsencrypt
$ docker run -it --rm -p 80:80 -p 443:443 -v /home/$USER/letsencrypt:/etc/letsencrypt certbot/certbot certonly --standalone --email user@example.com --agree-tos -d example.com
我导航到生成的证书:
$ cd /home/$USER/letsencrypt/live/example.com
我可以验证chain.pem:
$ openssl verify chain.pem
chain.pem: OK
我可以看到chain.pem 中的内容:
$ openssl x509 -noout -in chain.pem -subject -issuer
subject=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
issuer=O = Digital Signature Trust Co., CN = DST Root CA X3
我无法验证cert.pem(大概是因为它需要链):
$ openssl verify cert.pem
CN = example.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error cert.pem: verification failed
但我也无法验证fullchain.pem:
$ openssl verify fullchain.pem
CN = example.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error fullchain.pem: verification failed
证书似乎在浏览器中有效,但在 curl(和 Android http 客户端,这是真正的问题)中失败:
$ curl https://example.com
curl: (60) SSL certificate problem: unable to get local issuer certificate
我再次确认fullchain.pem 是cert.pem 和chain.pem 的串联。
所以:我不明白为什么fullchain.pem 不验证?
【问题讨论】:
-
我可以在任何域的新生成的证书上重现这一点。如果我生成一个证书,
cd到.../live/example.com并运行openssl verify fullchain.pem我始终得到error 20 at 0 depth lookup: unable to get local issuer certificate / error fullchain.pem: verification failed。 -
AIUI,
openssl verify只读取文件中的第一个证书,因此不能用于验证fullchain.pem。
标签: ssl openssl lets-encrypt certbot