Dav*_*oni 4 ssl openssl lets-encrypt certbot
我使用 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
Run Code Online (Sandbox Code Playgroud)
我导航到生成的证书:
$ cd /home/$USER/letsencrypt/live/example.com
Run Code Online (Sandbox Code Playgroud)
我可以验证chain.pem:
$ openssl verify chain.pem
chain.pem: OK
Run Code Online (Sandbox Code Playgroud)
我可以看到里面有什么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
Run Code Online (Sandbox Code Playgroud)
我无法验证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
Run Code Online (Sandbox Code Playgroud)
但我也无法验证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
Run Code Online (Sandbox Code Playgroud)
该证书似乎在浏览器中工作,但失败curl(以及 Android http 客户端,这是真正的问题):
$ curl https://example.com
curl: (60) SSL certificate problem: unable to get local issuer certificate
Run Code Online (Sandbox Code Playgroud)
我已经仔细检查过它fullchain.pem是cert.pemand的串联chain.pem。
所以:我不明白为什么fullchain.pem不验证?
我从man verify阅读untrusted. 结果untrusted这实际上是您指定证书信任链的方式(这样说似乎违反直觉)。
因此,您需要验证 Letsencrypt 证书的命令是:
openssl verify -untrusted chain.pem cert.pem
Run Code Online (Sandbox Code Playgroud)
cert.pem您的证书在哪里,chain.pem是 LE 中级证书。没有必要为此使用fullchain.pem。
| 归档时间: |
|
| 查看次数: |
6220 次 |
| 最近记录: |