gpt4 book ai didi

python - python 和 OpenSSL 出现 "no shared cipher"错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:39 40 4
gpt4 key购买 nike

服务器:

#!/usr/bin/env python

import SocketServer
import json
from OpenSSL import SSL
import os
import socket

TERMINATION_STRING = "Done"

CERTIFICATE_PATH = os.getcwd() + '/CA/certs/01.pem'
KEY_PATH = os.getcwd() + '/CA/private/key.pem'
CA_PATH = os.getcwd() + '/CA/cacert.pem'
print CA_PATH

def verify_cb(conn, cert, errnum, depth, ok):
print('Got cert: %s' % cert.get_subject())
return ok

class SSLThreadingTCPServer(SocketServer.ThreadingTCPServer):
def __init__(self, address, handler):
SocketServer.ThreadingTCPServer.__init__(self, address, handler)

ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT, verify_cb)

ctx.use_privatekey_file(KEY_PATH)
ctx.use_certificate_file(CERTIFICATE_PATH)
ctx.load_verify_locations(CA_PATH)

self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type))
self.socket.set_accept_state()

self.server_bind()
self.server_activate()

print "Serving:", address[0], "on port:", address[1]



class MemberUpdateHandler(SocketServer.StreamRequestHandler):
def setup(self):
self.connection = self.request
self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)

print self.client_address, "connected"

def handle(self):
data = ""
while True:
data += self.request.recv(1024).encode('utf-8').strip
if data[-4:] == "Done":
print "Done"
break

dataStrings = data.split(' ')
for item in dataStrings:
print item

if __name__ == "__main__":
ADDRESS = 'localhost'
PORT = 42424
HOST = (ADDRESS, PORT)

s = SSLThreadingTCPServer(HOST, MemberUpdateHandler)
s.serve_forever()

客户:

#!/usr/bin/env python

from OpenSSL import SSL
import socket
import os

HOST = 'localhost'
PORT = 42424
ADDRESS = (HOST, PORT)

CERTIFICATE_FILE = os.getcwd() + '/CA/certs/02.pem'
KEY_PATH = os.getcwd() + '/CA/clientKey.pem'
CA_PATH = os.getcwd() + '/CA/cacert.pem'

def verify_cb(conn, cert, errnum, depth, ok):
print('Got cert: %s' % cert.get_subject())
return ok

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.set_verify(SSL.VERIFY_PEER, verify_cb)
ctx.use_certificate_file(CERTIFICATE_FILE)
ctx.use_privatekey_file(KEY_PATH)
ctx.load_verify_locations(CA_PATH)

sslSock = SSL.Connection(ctx, sock)
sslSock.connect(ADDRESS)

items = "this is a test Done"

sslSock.sendall(items)

sslSock.close()

服务器端错误:

Error: [('SSL routines', 'SSL3_GET_CLIENT_HELLO', 'no shared cipher')]

客户端错误:

OpenSSL.SSL.Error: [('SSL routines', 'SSL23_GET_SERVER_HELLO', 'sslv3 alert handshake failure')]

我觉得我缺少一些简单的东西,但一直无法确定。我在不同的地方发现了几个和我一模一样的问题,但没有一个得到解答。我是网络编程的新手,非常感谢任何帮助。

使用 Ubuntu 10.04 和 python 2.6

最佳答案

试着改变顺序:

...
ctx.use_certificate_file(CERTIFICATE_PATH)
ctx.use_privatekey_file(KEY_PATH)
...

当我在我的代码中使用这个顺序时,我在服务器启动时(而不是在客户端连接时)收到 meanfull 错误消息:

Traceback (most recent call last):
File "src/server_main.py", line 230, in <module>
s = SSLClientsAuthServer()
File "src/server_main.py", line 134, in __init__
ctx.use_privatekey_file (self.config.value['SERVER_KEY'])
OpenSSL.SSL.Error: [('x509 certificate routines', 'X509_check_private_key', 'key values mismatch')]

这是因为我真的使用了不对应webserver.crt的webserver.key:

$ openssl x509 -text -in certs/webserver.crt
Certificate:
Data:
Version: 3 (0x2)
...
Modulus:
00:a1:b6:e3:ce:53:3d:c9:96:a6:06:1d:3e:ae:34:
....


$ openssl rsa -text -in keys/webserver.key
Private-Key: (2048 bit)
modulus:
00:b7:34:61:d7:c7:0d:2b:5c:57:26:d0:8d:7a:04:
....

确保您使用了相同的 RSA key 。

关于python - python 和 OpenSSL 出现 "no shared cipher"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12478048/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com