(日本語) Raspberry PiのPython3でSSLv3 handshake failureを解決した話
Sorry, this entry is only available in 日本語. あくあたん在室モニターは,Raspberry Piで動いています. 先日らぼのWebサーバがアップデートされたときから,うまく動作しなくなりました. モニターでは,らぼのWebサーバで公開しているAPIを叩いて在室状況を取得します. APIはhttpだけでなく,httpsも対応していました. モニターのログを見ると,データ取得ルーチンが止まっています. ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure おっ,SSLのエラーか. 新しいサーバではTLS1.0は捨てられました.そこに異議を唱えるつもりはないので,こちらで対応すべきですね. 普通に考えて,何かSSL周りが古いとかそういう状況が考えられます. これまで,http.clientを使ってアクセスしていたのですが,requestsのほうが良い感じと聞いたので,書き換えてみました.実際,requestsは良い感じに書けます. テストは次の方法でできます. $ /usr/bin/python3 Python 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] on linux Type “help”, “copyright”, “credits” or “license” for more information. >>> import requests >>> import ssl >>> print(ssl.OPENSSL_VERSION) OpenSSL 1.1.0j 20 Nov 2018 >>> requests.get(‘https://se.is.kit.ac.jp/’) Traceback (most recent call last): File “/home/pi/.local/lib/python3.5/site-packages/urllib3/connectionpool.py”, line 600, in urlopen chunked=chunked) File “/home/pi/.local/lib/python3.5/site-packages/urllib3/connectionpool.py”, line 343, in _make_request self._validate_conn(conn) File “/home/pi/.local/lib/python3.5/site-packages/urllib3/connectionpool.py”, line 839, in _validate_conn conn.connect() File “/home/pi/.local/lib/python3.5/site-packages/urllib3/connection.py”, line 344, in connect ssl_context=context) File “/home/pi/.local/lib/python3.5/site-packages/urllib3/util/ssl_.py”, line 347, in ssl_wrap_socket return context.wrap_socket(sock, server_hostname=server_hostname) File “/usr/lib/python3.5/ssl.py”, line 385, …