Ich versuche zu kontrollieren, welche TLS/SSL-Protokolle für HTTPS-Verbindungen zu meinem Webservice unterstützt werden, indem ich eine TIdServerIOHandlerSSLOpenSSL
Komponente verwende und die Eigenschaften SSLOptions.Method
und SSLOptions.SSLVersions
(wie in this answer vorgeschlagen) festlegen.Wie kann ich nur TLS 1.x (in meinem Webservice) unterstützen?
Die Standardeinstellung ist Methode sslvTLSv1
und SSLVersions [sslvTLSv1]
(siehe this answer für die Beziehungen zwischen Methode und SSLVersions):
Ich benutze nmap mit dem ssl-enum-ciphers.nse
Skript von this answer zu überprüfen, was tatsächlich vorhanden ist, und Get dieses Skript Ausgabe:
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_IDEA_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A
| TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: client
| warnings:
| Ciphersuite uses MD5 for message integrity
| Weak certificate signature: SHA1
|_ least strength: C
Aber TLS 1.1 und TLS 1.2 fehlen.
Wenn ich Set-Methode auf sslvSSLv23
(„ein Platzhalter, die in Fällen dynamische Version Verhandlungen ermöglicht, wo Client- und Server-Unterstützung verschiedene SSL/TLS-Versionen. Es sie die höchste Version, um herauszufinden, ermöglicht und zu verwenden, die für beide Parteien“ (source)) Ich sehe sslvSSLv2
und sslvSSLv3
werden aktiv.
Aber ich möchte nicht unterstützen SSL 2.0 (veraltet/verboten im Jahr 2011 von RFC 6176) und 3.0 (veraltet im Juni 2015 von RFC 7568) (source).
Ich kann nicht beide sslvTLSv2
und sslvTLSv3
aus dem Satz von Methode sslvSSLv23
generiert generiert: Wir setzen auf die Standardkonfiguration, wo nur TLS 1.0 unterstützt wird.
Beachten Sie, dass, wenn ich 'nur' sslvTLSv2
auslassen (Methode ist sslvSSLv23
und SSLVersions ist [sslvSSLv3,sslvTLSv1]
) erzählt nmap mich:
| ssl-enum-ciphers:
| SSLv3:
| ciphers:
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_IDEA_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A
| TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: client
| warnings:
| CBC-mode cipher in SSLv3 (CVE-2014-3566)
| Ciphersuite uses MD5 for message integrity
| Weak certificate signature: SHA1
| TLSv1.0:
| ciphers:
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_IDEA_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A
| TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: client
| warnings:
| Ciphersuite uses MD5 for message integrity
| Weak certificate signature: SHA1
| TLSv1.1:
| ciphers:
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_IDEA_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A
| TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: client
| warnings:
| Ciphersuite uses MD5 for message integrity
| Weak certificate signature: SHA1
| Weak cipher RC4 in TLSv1.1 or newer not needed for BEAST mitigation
| TLSv1.2:
| ciphers:
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_IDEA_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A
| TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A
| compressors:
| NULL
| cipher preference: client
| warnings:
| Ciphersuite uses MD5 for message integrity
| Weak certificate signature: SHA1
| Weak cipher RC4 in TLSv1.1 or newer not needed for BEAST mitigation
|_ least strength: C
Was kann ich nur alle TLS 1.x-Versionen, so dass Sie sind unterstützt?
Dies ist Delphi XE2 mit Indy 10.5.8.0, läuft auf Win7, getestet mit OpenSSL 1.02f. Mit OpenSSL 1.02g bekomme ich this issue, wir sind noch nicht bereit für unser Update auf Delphi Seattle (Update 1) wo dies im Indy-Code gelöst ist.
Zusätzliche Hinweise:
Sollte ich fallen TLS 1.0-Unterstützung als auch?
SSLOptions.Mode
ist immer noch auf der StandardeinstellungsslmUnassigned
, ich möchte später darauf schauen.Beachten Sie, dass das nmap-Skript nur SSLv3/TLS-Versionen und nicht SSLv2 testet. Ich benutzen SSLScan zusätzlich, und das zeigt, dass, wenn ich
sslvTLSv3
nur auslassen, wird SSL2 in der Tat immer noch aktiviert ;-(die Daten zu schwach Chiffren vergessen, das ist das nächste, was ;-)
- angehen
Ich bin tatsächlich nicht in der Lage, einen nmap Test zu machen, wenn ich meinen Webservice in der Delphi IDE starte, dies gibt alle Arten von Laufzeitfehlern (die nicht auftauchen, wenn ich die ausführbare Datei ausführe).Vielleicht sollten diese passieren, weil das nmap-Skript alle Arten von Tests abfeuert?
EIdOSSLAcceptError 'Error accepting connection with SSL. EOF was observed that violates the protocol.' EIdOSSLUnderlyingCryptoError in ssl3_get_client_hello:no shared cipher EIdOSSLUnderlyingCryptoError in ssl3_get_client_hello:wrong version number
Danke Remy, das funktioniert. Zum Glück habe ich zur Laufzeit alles gemacht. Wir arbeiten auch daran, in naher Zukunft alles von XE2 nach Seattle zu bringen. –