【发布时间】:2012-05-17 16:11:26
【问题描述】:
我得到了以下代码,应该执行 ssl 握手和证书身份验证:
1 s = socket.socket()
2 print "connecting..."
3 logging.debug("Connecting")
4 # Connect with SSL mutual authentication
5 # We only trust our server's CA, and it only trusts user certificates signed by it
6 c = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED,
7 ssl_version=ssl.PROTOCOL_SSLv3, ca_certs='ca.crt',
8 certfile='user.crt', keyfile='user.key')
9 c.connect((constants.server_addr, constants.port))
我对此有 2 个问题:
- 我们在哪里指定要连接的服务器/端口?这些参数是
socket.socket()的吗? - 我有一个 .p12,我从中提取了一个证书和一个 pem 格式的密钥(请参阅 this question),我假设它们分别对应于
user.crt和user.key(第 8 行)。但是,虽然我假设ca.crt(第 7 行)是从证书颁发机构检索的,但如何检索它?
如果上述代码的任何部分或我对它的假设不正确,请告诉我。谢谢!
【问题讨论】:
-
实际上 -- PKCS#12 文件(您的
.p12文件)也可以并且通常确实包含相关的 CA 证书。 -
@CharlesDuffy,您自己的 PKCS#12 文件可能包含您自己的证书链,但不包含服务器(除非它们相同,但不一定如此)。
-
@CharlesDuffy 如何从 p12 检索 CA 证书?
-
@Bruno 很公平——我假设这里的两端都使用了一个私人(即公司)CA。
-
@ewok 请参阅
man pkcs12-- 特别是-cacerts和-out。也就是说,Bruno 的警告适用——客户端和服务器证书可能由同一个 CA 签署,也可能不同。
标签: python ssl ssl-certificate