我是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和客户端的证书以及客户端和ca的私钥。 现在我有六个文件:
ca.crt
server.crt
client.crt
ca.key
server.key
client.key
那么现在如何修改服务器端和客户端代码以执行双向SSL身份验证?
对不起我的英文,请帮忙。
答案 0 :(得分:0)
您只需要在客户端和服务器中执行相同的操作:
#server
ssl.wrap_socket(connection,
server_side=True,
certfile="ssl/server.crt",
keyfile="ssl/server.key",
ca_certs="ssl/client.crt"
)
#client
ssl_sock = ssl.wrap_socket(s,
ca_certs="ssl/server.crt",
cert_reqs=ssl.CERT_REQUIRED,
certfile="ssl/client.crt",
keyfile="ssl/client.key"
)
我知道这是一个旧的,但我寻找同样的事情并没有找到答案。
答案 1 :(得分:0)
如果你是客户端并且想同时连接服务器和发送请求,你可以使用下面的代码
response = requests.post(url, data=your_data, cert=('path_client_certificate_file', 'path_certificate_key_file'), verify='path_rootCA')