python - 如何在 python 中执行双向 SSL 身份验证?

标签 python authentication ssl

我是python初学者。我已经在 python 中实现了一种方式的 SSL 身份验证,下面是服务器端代码的一部分:

...
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', 12345))
s.listen(5)
while True:
    (connection, address) = s.accept()
    connstream = ssl.wrap_socket(connection,
                                server_side=True,
                                certfile="ssl/server.crt",
                                keyfile="ssl/server.key",
                                )
    #print repr(connection.recv(65535));
    try:
        deal_with_client(connstream)
            ....

客户端代码如下:

import socket, ssl, pprint
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(s,
                       ca_certs="ssl/server.crt",
                       cert_reqs=ssl.CERT_REQUIRED)
ssl_sock.connect(('localhost', 12345))
print repr(ssl_sock.getpeername())
print ssl_sock.cipher()
print pprint.pformat(ssl_sock.getpeercert())
while 1:
ssl_sock.write("boo!")
s.close()

其实我想进行双向SSL认证,然后我使用openssl工具生成了ca和client的证书以及client和ca的私钥。 现在我有以下六个文件:

ca.crt
server.crt
client.crt
ca.key
server.key
client.key

那么现在如何修改服务器端和客户端代码来执行双向双向 SSL 身份验证?

抱歉我的英语不好,请帮忙。

最佳答案

如果你是客户端,想连接一个服务器同时发送请求,可以使用下面的代码

response = requests.post(url, data=your_data, cert=('path_client_certificate_file', 'path_certificate_key_file'), verify='path_rootCA')

关于python - 如何在 python 中执行双向 SSL 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493945/

相关文章:

ruby-on-rails - Rails omniauth facebook SSL 握手失败

mysql - 谷歌云 SQL 到外部奴隶 - 无法让 SSL 工作

python - 来自两个 3D 点的欧拉角和旋转矩阵

ssl - 没有ssl的登录表单

php - PHP 中的 JWT(JSON Web token ),无需使用第 3 方库。怎么签?

WCF使用数据库对客户端进行身份验证

http - 无论如何在不设置 https 连接的情况下设置 Telegram Webhook

python - 自定义信号在 PySide 中不起作用

python - 如果二进制图像几乎全黑,我如何检查 numpy?

python - 计算满足 if 语句的元素并在 Python 的列表理解中使用此计数器?