Как заменить систему `ssl` на` openssl` в `centos`? - PullRequest
0 голосов
/ 03 июля 2019

Проблема:

Мой сценарий test.py, запущенный из centos, выбрасывает UNKNOWN_PROTOCOL при попытке подключения wss:// сервер сокетов:

sh-4.2# python test.py
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    ws.connect("wss://agentserver.node.aliyun.com:8080")
  File "/usr/lib/python2.7/site-packages/websocket/_core.py", line 223, in connect
    options.pop('socket', None))
  File "/usr/lib/python2.7/site-packages/websocket/_http.py", line 126, in connect
    sock = _ssl_socket(sock, options.sslopt, hostname)
  File "/usr/lib/python2.7/site-packages/websocket/_http.py", line 263, in _ssl_socket
    sock = ssl.wrap_socket(sock, **sslopt)
  File "/usr/lib64/python2.7/ssl.py", line 934, in wrap_socket
    ciphers=ciphers)
  File "/usr/lib64/python2.7/ssl.py", line 609, in __init__
    self.do_handshake()
  File "/usr/lib64/python2.7/ssl.py", line 831, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:618)

Исследование:

Я могу успешно запустить тот же сценарий на моей локальной машине macOS, и на той же машине centos тот же сценарий может успешно подключиться, заменив wss:// на ws://.

Анализ:

Так что я думаю, что проблема здесь связана с ssl.Я проверяю macOS openssl версию:

➜ openssl version
LibreSSL 2.6.5

и проверяю ее на centos:

sh-4.2# openssl version
sh: openssl: command not found

Требуется помощь

Я могу установитьopenssl on centos by

yum install openssl

Но после его установки вылезла такая же ошибка при подключении к wss://.Так как же заменить системный ssl по умолчанию на мой установленный openssl?

Заранее спасибо!

PS

test.py:

import websocket

ws = websocket.WebSocket()
# Connect to host url
ws.connect("wss://agentserver.node.aliyun.com:8080")
send_string = "Testing WebSocket"
print("Sending: ",send_string)
# Use ws.send() to send data to server
ws.send(send_string)
# Use ws.recv() to get the data sent from server
result = ws.recv()
print("Received: ",result)
# Use ws.close() to close the WebSocket handshake
ws.close()
...