2015-04-21 11 views
5

Hallo Ich möchte mehrere Version des von TLS SSLV23 Methode auf Client side.But Ich bin nicht in der Lage zu verbinden, immer Fehler unterstützen:Wie würde ich mehrere Versionen von TLS auf der Client-Seite unterstützen?

SSL23_GET_SERVER_HELLO: SSLv3 Alarm Handshake-Fehler

Kann jemand bitte sagen Wie würde ich mehrere Versionen von TLS mit openssl unterstützen?

Codeschnipsel für SSLV23 (nicht funktioniert)

cctx = SSL_CTX_new(SSLv23_client_method()); 
    if(cctx) { 
    SSL_CTX_set_options(cctx, SSL_OP_NO_SSLv3); 
    } 

Nur für den TLS V1 (Arbeits)

cctx = SSL_CTX_new(TLSv1_client_method()); 
+0

In welchem ​​Kontext verwenden Sie dies? – tadman

+0

Eigentlich möchten wir sslv3 auf unserer Client-Seite deaktivieren und TLS-Protokolle aktivieren, aber wenn mein Server nur TLS v1.2 oder TLS v1.1 oder TLS v1 unterstützt, wie würde ich diese Funktionalität auf Client-Seite bereitstellen? – mahan07

+0

Warum benutzen Sie nicht einfach 'TLSv1_client_method()'? BTW, der gleiche Code, den Sie gezeigt haben, führte zu TLS1.0 Verbindung in meinem Test. – Prabhu

Antwort

6

Basierend auf Ihre Tags und Kommentare, ich nehme an, Sie nur TLS-Verbindungen wollen. Die Clients sollten nur TLS-Verbindungen initiieren. Wenn ja, warum bestehen Sie auf SSLv23_client_method? Aber die folgende haben auszusenden TLS 1.0 Client-Hallo in meinem Test:

ctx = SSL_CTX_new(SSLv23_client_method()); 
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3); 

POODLE Angriff zu verhindern, wäre die beste sein, um vollständig zu deaktivieren SSL3 Unterstützung auf Client und Server. In Ihrem Fall haben Sie erwähnt, dass die Server nur TLS unterstützen. Daher gibt es keine Notwendigkeit für die Abwärtskompatibilität mit den Kunden auf SSL3 Falls der Server SSL3 nicht reden, POODLE Angriff, Client zu verhindern und sollte Server TLS implementieren Rückfall-Signalisierung Cipher Suite Value- https://tools.ietf.org/html/draft-ietf-tls-downgrade-scsv-05

Beispiele für TLS Einrichten auf Client Seite:

/* Exclude SSLv2 and SSLv3 */ 
ctx = SSL_CTX_new(TLSv1_client_method()); 
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2); 
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3); 

/* Exclude SSLv2, SSLv3 and TLS 1.0 */ 

ctx = SSL_CTX_new(TLSv1_1_client_method()); 
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2); 
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3); 
SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1); 

/* Exclude SSLv2, SSLv3 ,TLS 1.0 and TLS 1.1 */ 

    ctx = SSL_CTX_new(TLSv1_2_client_method()); 
    SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2); 
    SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3); 
    SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1); 
    SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1_1); 

Sie auch und SSL_CTX_set_options in einem Rutsch weitergeben oder den Optionen können.