2

SNIサポートを追加したい M2Crypto を使用して記述された Python SSL クライアントがあります。

OpenSSL では「SSL_set_tlsext_host_name(ssl, servername)」を使用するように見えますが、M2Crypto API で公開されている関数は見当たりません。

私はそれを見逃しているだけですか、それともこれを行う他の方法はありますか?

4

1 に答える 1

2

M2Crypto SVNリポジトリの最新のコードを調べましたが、SNIは(まだ)サポートされていません。私もSNIが必要だったので、真のオープンソース精神でパッチを作成しました:-)

追加するパッチは実際には非常に単純です。

Index: SWIG/_ssl.i
===================================================================
--- SWIG/_ssl.i (revision 739)
+++ SWIG/_ssl.i (working copy)
@@ -14,6 +14,7 @@
 #include <openssl/bio.h>
 #include <openssl/dh.h>
 #include <openssl/ssl.h>
+#include <openssl/tls1.h>
 #include <openssl/x509.h>
 %}

@@ -375,6 +376,10 @@
     return SSL_get_mode(ssl);
 }

+long ssl_set_tlsext_host_name(SSL *ssl, const char *name) {
+    return SSL_set_tlsext_host_name(ssl, name);
+}
+
 void ssl_set_client_CA_list_from_file(SSL *ssl, const char *ca_file) {
     SSL_set_client_CA_list(ssl, SSL_load_client_CA_file(ca_file));
 }
Index: M2Crypto/SSL/Connection.py
===================================================================
--- M2Crypto/SSL/Connection.py  (revision 739)
+++ M2Crypto/SSL/Connection.py  (working copy)
@@ -359,3 +359,7 @@

     def set_post_connection_check_callback(self, postConnectionCheck):
         self.postConnectionCheck = postConnectionCheck
+
+    def set_tlsext_host_name(self, name):
+        "Set the requested hostname for the SNI (Server Name Indication) extension"
+        m2.ssl_set_tlsext_host_name(self.ssl, name)

もちろん、これはM2Cryptoバグ/拡張トラッカーにも送信されています。

于 2012-12-01T14:06:05.117 に答える