wolfTips: 言語ラッパーを使いこなす– Python 編 —

Python言語用インターフェースを提供するwolfSSL Python を使用する

wolfSSL をPython環境で使用したいという方は、wolfSSL Pythonパッケージを利用することが出来ます。wolfSSL PythonはSSL/TLS組み込みライブラリである wolfSSL とPython言語間のインターフェースを提供します。

Python の標準TLSライブラリは OpenSSL を利用していますが、リソース環境の制限が厳しい場合にはwolfSSLが有効な場合があります。そのようなケースでは一度wolfSSL Python を試してみてください。

今回は、wolfSSL Python の使用方法について紹介します。

wolfSSL Python に関する詳細は下記URLから参照可能です。

また、wolfSSL Python のソースコードは下記からダウンロード可能です。

 

OSX 64 や Linux 64 ビットをお使いの場合、wolfSSL Pythonをインストールするには事前にコンパイル済みの Python Wheelから簡単にインストール可能です。下記、コマンドを実行します。

$ pip install wolfssl

 

その他の環境やカスタマイズを行った wolfSSL ライブラリに対応したwolfSSL Pythonを使用するには次の手順を行います。

1.事前にgithub から取得したwolfSSL を少なくとも次の2つのオプションを指定し、ビルド・インストールを行います。

$./configure –enable-opensslextra –enable-sni
$make && make check
$sudo make install
  1. 事前にgithub から取得した wolfssl-py のビルドを行いインストールします
$ cd wolfssl-py
// wolfSSL ライブラリがデフォルトのフォルダーにインストールされている場合
$USE_LOCAL_WOLFSSL=1 pip install .//wolfSSL ライブラリがカスタムのパスへインストールされている場合
$USE_LOCAL_WOLFSSL=/tmp/install pip install .

 

wolfSSL Python インストール後の確認は wolfssl-py フォルダーで下記コマンドを実行します。

$ pytest

または

$ py.test tests

インストールが正常に行われている場合、下記のようなログが出力されます。

$ pytest
====================== test session starts =================================
platform linux2 — Python 2.7.15+, pytest-3.3.2, py-1.5.2, pluggy-0.6.0
rootdir: /home/xxxx/gitrepo/wolfssl-py, inifile:
collected 35 items 

tests/test_client.py ….                                          [ 11%]
tests/test_context.py ……………………                [ 80%]
tests/test_methods.py …….                                  [100%]

================= 35 passed in 0.88 seconds =================================

 

 

次にhttps://wolfssl.github.io/wolfssl-py/index.html#document-installation にあるソケットを利用したTLSクライアントの例を試してみます。

wolfssl_TLSclient_ex.py などとファイル名で Python プログラムを作成します。このプログラムでは、TLS 1.2 を使用しwww.python.org と通信を試みます。

import socket
import wolfssl
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
context = wolfssl.SSLContext(wolfssl.PROTOCOL_TLSv1_2)
secure_socket = context.wrap_socket(sock)
secure_socket.connect((“www.python.org”, 443))
secure_socket.write(b”GET / HTTP/1.1\n\n”)
print(secure_socket.read())
secure_socket.close()

作成したプログラムを実行します。

$ python wolfssl_exa2.py
HTTP/1.1 500 Domain Not Found
Server: Varnish
Retry-After: 0
content-type: text/html
Cache-Control: private, no-cache
connection: keep-alive
X-Served-By: cache-hnd18736-HND
Content-Length: 221
Accept-Ranges: bytes
Date: Mon, 27 Jan 2020 00:50:34 GMT
Via: 1.1 varnish
Connection: keep-alive<html>
<head>
<title>Fastly error: unknown domain </title>
</head>
<body>
<p>Fastly error: unknown domain: . Please check that this domain has been added to a service.</p>
<p>Details: cache-hnd18736-HND</p></body></html>

 

WireShark などのツールを使うと TLS 1.2 で通信を行っていることが分かります。

今回wolfSSL を Python言語より利用するためのパッケージwolfSSL Python を紹介しました。Python言語用のインターフェースは、他にも wolfCrypt 使用のみに特化した wolfCrypt Python パッケージもございます(URL: https://wolfssl.github.io/wolfcrypt-py/)。wolfSSL Python の使い方や、wolfCrypt Python に興味がある方はお気軽に support@wolfssl.com までお知らせください。