2016-05-31 3 views
4

Ich entwickle einen SSL-Cipher-Scanner. Das heißt, ich gebe Host und Port an und mein Programm teilt mir mit, welche Chiffren der Host akzeptiert.Verschlüsselung bei offener Verbindung ändern

Meine aktuelle Version funktioniert aber ist tot langsam (etwa 20 bis 30 sec pro Host), weil ich eine neue Verbindung für jede Chiffre öffnen.

ich die folgenden Methoden (in dieser Reihenfolge):

ssl_ctx = SSL_CTX_new(method); 
bio = BIO_new_ssl_connect(ssl_ctx); 
BIO_set_conn_port(bio, port); 
BIO_set_conn_hostname(bio, host); 
BIO_get_ssl(bio, &ssl); 
SSL_set_cipher_list(ssl, cipher); 
BIO_do_connect(bio); 
BIO_do_handshake(bio); 

Ich versuchte nun setzen gerade die cipherlist wieder und machen einen weiteren Handshake statt wieder zu verbinden. In Wireshark habe ich gesehen, dass es das Change-Cipher-Spec-Protokoll verwendet hat, aber dass der Server einen verschlüsselten Alarm zurückgab (also kann ich Ihnen nicht sagen, welcher es ist). Die Rückgabewerte von

SSL_set_cipher_list(ssl, cipher); 

und

BIO_do_handshake(bio); 

beide 1 so sollte es erfolgreich sein.

Könnte mir bitte jemand helfen, wie man die verwendete Chiffre bei einer offenen Verbindung ändert?

Einige zusätzliche Informationen: Ich benutze openssl Version 1.0.2h

+0

Überprüfen Sie den Quellcode für [sslscan] (http://sourceforge.net/projects/sslscan/). Dies geschieht meistens mit OpenSSL, aber zu einem anderen Zeitpunkt im Workflow als Sie versuchen. Das ursprüngliche Projekt wurde vor einiger Zeit aufgegeben, aber es gibt viele moderne Gabeln auf GitHub. – jww

+0

Der Alarm wurde in der alten Cipher-Suite verschlüsselt, Sie sollten also sehen können, was er war. Es schlägt auch vor, dass der Server die angeforderte neue Verschlüsselungssuite nicht unterstützt. – EJP

Antwort

3

Was Sie tun, ist sehr ähnlich zu einem renegotiation DOS attack. Es ist nicht ungewöhnlich, dass Server Beschränkungen hinsichtlich der Anzahl der Neuverhandlungen haben. In der Regel ist nach dem anfänglichen TLS-Handshake keine oder nur eine Neuverhandlung erlaubt, um gegen einen solchen DOS-Angriff zu verteidigen.

+0

Okay, danke für deine Antwort! Hast du irgendwelche Vorschläge für mich, wie ich das angehen könnte? Ich meine, das Tool sslyze kann den Scan in etwa 5-8 Sekunden auf dem gleichen Server durchführen und hat zusätzlichen Python-Overhead. – Drilexus

+2

@Drilexus: Beginnen Sie mit 'ALL' Ziffern und dann entfernen Sie alle Chiffre, die erfolgreich war. I.E. Wenn Sie zuerst "AES-128" erhalten, ist Ihr nächster Verschlüsselungssatz "ALL:! AES-128". Und sobald die Verbindung fehlschlägt, wissen Sie, dass alle relevanten Verschlüsselungen überprüft wurden. –

+0

gute Idee, danke! – Drilexus