Имеет ли M2Crypto поддержку индикации имен серверов (SNI) на стороне клиента? - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть клиент Python SSL, написанный с использованием M2Crypto, к которому я хотел бы добавить поддержку SNI .

Похоже, с OpenSSL можно использовать ```SSL_set_tlsext_host_name (ssl, servername) '' ', но я не вижу, чтобы эта функция была представлена ​​в M2Crypto API.

Я просто ее пропускаю или есть какой-то другой способ сделать это?

1 Ответ

2 голосов
/ 01 декабря 2012

Я посмотрел последний код в репозитории 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.

...