我可以使用 openssl s_client 来检索 MySQL 的 CA 证书吗?
你可能做不到。
配置良好的服务器将发送服务器证书和所有中间证书,以构建到根 CA 的路径。您必须已经拥有根 CA 证书。
例如:
$ openssl s_client -connect www.cryptopp.com:443 -tls1 -servername www.cryptopp.com
CONNECTED(00000003)
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify error:num=20:unable to get local issuer certificate
---
Certificate chain
0 s:/OU=Domain Control Validated/OU=COMODO SSL Unified Communications
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA
1 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
2 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
---
...
服务器发送了服务器的证书。上面显示为 0 s:/OU=Domain Control Validated/OU=COMODO SSL Unified Communications。 S 表示其主题,而 I 表示其发行者。
服务器在 1 和 2 发送了两个中间证书。但是,我们需要在本地拥有证书 2 的颁发者来构建验证路径。证书 2 的颁发者使用 Common Name “AddTrust External CA Root”。
“AddTrust External CA Root”可以从 Comodo 的网站[Root] AddTrust External CA Root 下载
如果服务器发送了根 CA,那么坏人可能会篡改链,而客户端也不会更聪明。他们可以换入自己的 CA 并使用邪恶的链。
我们可以通过获取根 CA 来清除 verify error:num=20:unable to get local issuer certificate,然后使用 -CAfile :
$ openssl s_client -connect www.cryptopp.com:443 -tls1 -servername www.cryptopp.com \
-CAfile addtrustexternalcaroot.pem
这将导致 Verify Ok (0)。