OpenSSL
Eigentlich ist diese Seite für einen Windows Administrator eher unwichtig, denn Windows Server enthält eine Zertifizierungsstelle, die sich auch einfach installieren lässt und das Rollout von Zertifikaten in der Domäne zu einem Kinderspiel macht. (Siehe auch CA installieren, IIS Zertifikat einrichten, Clientzertifikat anfordern) Aber auch in einer Windows Umgebung kann OpenSSL sehr gute Dienste leisten, z.B. für:
- Ausgabe von Informationen über die Zertifikatsdateien
OpenSSL kann sehr schön die Details als Textdatei extrahieren und sie können auch direkt per TCP das Zertifikat auf einem anderen Mailserver abholen. - Konvertieren von PKCS12-Dateien in PEM-Dateien
Damit können Sie Zertifikate, die aus einem Windows Server oder mit einer Windows CA als PKCS12-Datei (Endung pfx) erstellt wurden, in das von Apache und anderen Diensten eher gebräuchliche PEM-Format konvertieren. - Konvertieren von PEM-Dateien in PKCS12-Dateien
Auch der umgekehrte Weg ist möglich um z.B. eine Zertifikat in Form von PEM-Dateien in das von Windows verdaubare PKCS12-Format zu konvertieren. - Umbauen von Zertifikaten
Mit OpenSSL kann man auch wunderbar ein Zertifikat (PKCS12)-Datei in die Bestandteile auseinander nehmen und mit anderen Zertifikaten wieder zusammen bauen. Das ist z.B.: sehr nützlich, wenn man wie Verisign eine IntermediateCA hat und man ein Zertifikat mit kompletter Kette nutzen möchte oder die Zertifizierungsstelle ein früher ausgestelltes Zertifikat einfach verlängert.
Wie nutze ich OpenSSL?
Um OpenSSL zu nutzen, müssen Sie die Software erst herunter laden und installieren. Ich nutze dazu meist das OpenSSL von GnuWIN32, welches mit weniger als 2 MB schnell heruntergeladen und installiert ist.
OpenSSL runtergeladen
https://wiki.openssl.org/index.php/Binaries
http://sourceforge.net/project/downloading.php?groupname=gnuwin32&filename=openssl-0.9.7c-bin.exe
FAQ:
http://www.madboa.com/geek/openssl
Die Steuerung selbst erfolgt dann komplett per Kommandozeile und Parameter.
Dateierweiterungen
OpenSSL ist nicht nur eine Library, um Programme um TLS-Funktionen zu erweitern. Die Kommandozeile erlaubt auch umfangreiche Konvertrierungen zwischen verschiedenen Formaten. Dazu sollten Sie aber ein paar Dateiendungen kennen:
Endung | Inhalt | Format Encoding |
---|---|---|
PEM |
Zertifikate oder Private Keys. Mehrere Abschnitte können in einer Datei zusammengefasst sein |
DER |
REQ |
RFC2986 PKCS #10: Certification Request Syntax Specification Version 1.7 |
DER oder Base64 |
CER |
Enthält das Zertifikat bestehend aus den Daten (Name, Gültigkeitsdauer, Ausstellende CA, Fingerprint etc. |
X509 |
CRT |
Binäres Zertifikat |
X.509 |
PFX/P12 |
Mit Kennwort geschützter PKCS#12 Kontainer enthält Zertifikate und private schlüssel |
|
P7B/P7C |
PKCS#7 Datenstruktur, die Certifikate,
revocation Liste (CRL) etc enthalten kann |
|
crl |
Enthält die Liste der zurückgezogenen
Zertifikate |
|
SST |
Microsoft proprietäres Speicherformat für Zertifikate |
|
Beachten sie, dass einige Erweiterungen sowohl Base64- also auch DER-codierte Daten enthalten können. OpenSSL arbeitet bevorzugt mit Base64-codierten Daten. Da es sich dabei im weitesten um TEXT-Dateien handelt. Bei der Bearbeitung mit Notepad o.ä. sollte sie darauf achten, dass die diese nicht im UNICODE-Format speichern. Manchmal sieht die Formatierung seltsam aus, da OpenSSL im Unix-Format nur ein "Linefed (LF)" und nicht das Windows übliche CRLF verwendet.
- Public-Key Cryptography Standards (PKCS)
http://www.rsa.com/rsalabs/node.asp?id=2124 - Wikipedia: X.509
http://en.wikipedia.org/wiki/X.509
OpenSSL Key Encryption
Bestimmte Formate, z.B.P12 oder PFX, werden durch ein Kennwort gesichert, da sie den privaten Schlüssel enthalten. Hierbei kann es zu Problemen kommen, dass ein Import auf älteren Windows Servern nicht funktioniert. Die Fehlermeldung "Kennwort falsch" ist dabei irreführend.
Bei OpenSSL Version 1.1.1 und neuer wird Private-Key mittels SHA256 im P12 Container verschlüsselt. Windows Server 2012 und Windows Server 2016 unterstützen aber nur P12 oder PFX-Dateien, in denen der private Schlüssel mit SHA1 und 3DES verschlüsselt sind und der Import liefert folgenden Fehler:
"The password you entered is incorrect"
Eine Verschlüsselung mit SHA256 wird erst ab Windows Server 2019 und höher unterstützt. Wenn Sie mit OpenSSL 1.1.1 oder neuer eine PFX-Datei für Windows Server 2016 und früher erstellen müssen, dann müssen Sie z.B. 3DES als Parameter mit angeben.
-des3 “use triple DES to encrypt private
keys before outputting, this is the default.“
Version 1.0.2:
https://www.openssl.org/docs/man1.0.2/man1/openssl-pkcs12.html
-descert “Encrypt the certificates using triple DES.
By default the private key and the certificates are
encrypted using AES-256-CBC unless the '-legacy' option is
used.
If '-descert' is used with the '-legacy' then both, the
private key and the certificates are encrypted using triple
DES.”
Version 3.0:
https://www.openssl.org/docs/man3.0/man1/openssl-pkcs12.html
- Importing a pkcs12 to windows server
2016?
https://learn.microsoft.com/en-us/answers/questions/518605/importing-a-pkcs12-to-windows-server-2016.html - "The password you entered is incorrect"
when importing .pfx files to Windows
certificate store
https://stackoverflow.com/questions/69343254/the-password-you-entered-is-incorrect-when-importing-pfx-files-to-windows-cer
Konvertierung von Zertifikatsdateien
OpenSSL ist ein geniales Werkzeug, um die diversen Dateiformate zu konvertieren. Folgende Befehle nutzt ich relativ häufig:
Von | Nach | Aufruf | Bemerkungen |
---|---|---|---|
PFX |
PEM |
openssl pkcs12 -in quelle.pfx -out ziel.pem -nodes |
Hiermit kann ich ein Windows Zertifikat samt private Key in ein PEM-Format überführen und weiter verarbeiten und z.B. den private Key nutzen, um mit einem veränderten Zertifikat wieder ein Paar zu bilden |
PEM |
PFX |
openssl pkcs12 -export -out iis.pfx -in all.pem Rem Ausgabe für Windows 2016/2012 openssl pkcs12 -export -out iis.pfx -in all.pem -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES |
Die PEM Datei muss sowohl den private Key als auch das dazu gehörige Zertifikat enthalten. Windows 2012/2016 können keinen SHA265-verschlüsselten Key einlesen |
CER |
PEM |
openssl x509 -inform der -in Quelle.cer -out ziel.pem |
Konvertiert eine DER-codierte CER-Datei in das PEM Format. Diese umkodierung können Sie übrigens auch mit dem Microsoft Tool "CertUtil" durchführen |
PEM |
CER |
openssl x509 -outform der -in quelle.pem -out ziel.cer |
Konvertiert ein PEM-Zertifikat in das CER-Format. Diese umkodierung können Sie überigens auch mit dem Microsoft Tool "CertUtil" durchführen |
CER |
Text |
openssl.exe x509 -text -in cert.cer > cert.txt |
Exportiert das Zertifikat in einer lesbaren Form, um die Details in einer Datei einsehen zu können. |
- A few frequently used SSL commands
http://shib.kuleuven.be/docs/ssl_commands.shtml
OpenSSL, Textdateien, Unix und Windows
Notepad ist im Prinzip ein sehr schönes Programm, da es auf jedem Windows System vorhanden ist und relativ problemlos mit Textdateien überschaubarer Größe umgehen kann. Allerdings gibt es zwei Dinge die sie in Verbindung mit OpenSSL beachten müssen.
- ANSI statt Unicode
Beachten Sie, dass sie alle Dateien als ANSI speichern und nicht etwas im UNICODE-Format
- LF statt CRLF
Zudem bekommen Sie oft Dateien von Unix, die am Zeilenende kein CR/LF sondern nur ein LF haben. Notepad bricht solche Texte dann nicht um. Wenn Sie zur Lesbarkeit dann manuell die Zeilen umbrechen, dann wird daraus am eine ein CR/LF/LF, was OpenSSL wieder nicht verträgt.
Aber dann ist Notepad ein guter Begleiter, wenn Sie nicht eh schon auf alternativen wie SctiTE oder andere umsteigen.
SAN-Zertifikate und OpenSSL
Mit ist es einmal passiert, das ein Kunde das Zertifikat nicht mit dem IIS angefordert hat, sondern von der Zertifizierungsstelle einfach drei Texte bekommen hat, die etwa wie folgt aussahen. (Keine echten Daten !)
Der Private Schlüssel als PEM-Datei (Base64 codiert)
-----BEGIN RSA PRIVATE KEY----- wQXR86TXwJPSOWDBuZoTH2SGptgp334yExu/twKZ2gqYANJJwMgDctZIKN69Ywzr IICXQIBAAKBgQCkot4L8gOrytf9JzhF6D1s7fzzod9ZvtyALXQkCDAIacyFP8OR .... d3VssIQpr/XrRBlq95lmK/ZiY2OqZ8q4B41IIu3ilqKR1sBM917TM2ZKwQIDAQAB fHhpPjje9ySIdn+Us5n80JpMDrxKyTjQi0vWPYtbC3Daps3Yo+DWfmbUSpumnZOq kjkQ8sallNbkWnDEpyZxNeHaRGgZU1R6ZQJBAJtfCtokqBF5tBniPBybllg2ezK2 iM4fxYO/ZsQDTDgVxm/VpGfbIIlzPgMABB+FcrOQA2Xj -----END RSA PRIVATE KEY-----
Das dazu gehörige Zertifikat mit dem signierten öffentlichen Schlüssel (keine echten Daten)
-----BEGIN CERTIFICATE----- MmVyIENBIC0gQ2xhc3MgMzFJMEcGA1UECxNAd3d3LnZlcmlzaWduLmNvbS9DUFMg SI5jb3JwLmJ5IFJlZi4gTElBQklMSVRZIExURC4oYyk5NyBWZXJpU2lnbjAeFw0w ..... NvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRwcaHR0cDovL3dy52ZXJlnbi5jb20v cnsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYY29jc3AudmVyzovL3daXpc2NpZ24u Y29DAhoEFEtrUSiWBgy70FI4mymsSweLIQUYMCYWJGh0dHA6Ly9sb2dvLnZlcmlz aWduLmNvbSWOgzF+HMMB1V/8xo3MpsMWmWvK7ENsSwV4CXqvOl2MJG1DiRDx/B/x lRf2ajUp922cpfNiu2BpAKag== -----END CERTIFICATE-----
Und zuletzt noch das IntermediateCA von Verisign, welches Sie auch https://www.verisign.com/support/verisign-intermediate-ca/secure-site-pro-intermediate/index.html herunter laden können.
Um daraus nun ein P12-File (PKCS12) zu erstellen muss man zuerst alle drei Dateien einfach in eine PEM-Datei speichern.
c:\>type public.pem + private.pem + intermediate.pem >all.pem
Diese Datei (/hängen und dann mit OpenSSL diese in eine PFX-Datei konvertieren, die man auf dem IIS dann einlesen kann.
c:\>openssl pkcs12 -export -out iis.pfx -in all.pem
Bei der Anforderung sollte man OpenSSL dann auch ein Kennwort geben, damit die PFX-Datei nicht komplett ungeschützt ist.
Windows CA und Unix Webserver
Natürlich kann eine Windows CA auch Zertifikatsanforderungen für nicht-Windows Systeme verarbeiten. Allerdings muss man dazu erst eine Zertifikatsanforderung stellen und diese von der Windows CA signieren lassen und dann das Zertifikat wieder bereit stellen.
Nun ist es mir aber mindestens einmal passiert, dass das Gerät, welches per SSL gesichert werden sollte, keine Zertifikate anfordern konnte. (Es was ein SUN-ILOM Board, welches per HTTPS die Steuerung des Servers erlaubt.) Dieses Managementsystem möchte einfach nur zwei Textdateien als upload haben:
- PEM-Datei mit dem private Key
- PEM-Datei mit dem signierten Public Key
In diesem Fall ist dann auch OpenSSL wieder ein einfacher Weg, einen "Private Key" zu rechnen, als Datei zu speichern und eine Anfrage für die Zertifizierungsstelle vorzubereiten. Zuerst müssen Sie aber eine Konfigurationsdatei erstellen ( z.B:srv1-mgmt.txt
[ req ]
default_bits = 1024
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
countryName = DE
localityName = Paderborn
organizationalUnitName = MSXFAQ
commonName = cn=www.msxfaq.de,o=MSXFAQ,c=de
Diese Datei wird im folgenden Aufruf dann spezifiziert.
openssl req -newkey rsa:1024 -nodes -subj '/CN=srv1-mgmt.msxfaq,de/O=MSXFAQ/C=DE' -keyout srv1-mgmt-private.pem -out srv1-mgmt-request.pem -config srv1-mgmt.txt
Die Werte der Config-Datei werden vorgegeben. Den Wert für den CommonName muss aber auf jeden Fall noch einmal von Hand eintragen.
Die Datei "srv1-mgmt-request.pem" liefert man dann bei der Windows CA ein und enthält eine unterschriebene CER-Datei zurück. Diese CER-Datei enthält den signierten Public Key und zusammen mit der Datei "srv1-mgmt-private.pem" hat man einen Satz, den man auf einem Apache, einem Juniper SSL-Gateway oder anderen Systemen verwenden kann.
Wenn man schon ein Zertifikat mit den Windows Bordmitteln als PFX-Datei angelegt hat, dann hilft OpenSSL auch hier.
- Convert PFX Certificate to PEM Format für use with Citrix Access
Gateway
http://support.citrix.com/article/CTX106028
openssl pkcs12 -in srv01cert.pfx -out cag.pem -nodes
OpenSSL prüft SSL
Die OpenSSL Library kann aber noch mehr als nur Zertifikate verwalten. Folgende Befehle zeigen, wie man per OpenSSL quasi eine TELNET-Verbindung zu einem Server mit SSL aufbauen.
# Verbindung zu HTTP over SSL openssl s_client -connect owa.msxfaq.de:443 # Verbindung zu IMAP over SSL openssl s_client -connect imap4.msxfaq.de:993 # Verbindung zu POP3 over SSL openssl s_client -connect pop3.msxfaq.de:995 # Verbindung zu SMTP Port 25 mit StartTLS openssl.exe s_client -connect mail.netatwork.de:25 -starttls smtp # Verbindung zu SMTPS (eher selten genutzt) openssl s_client -connect remote.host:465 # SfB/Lync/OCS Zertifikate openssl.exe s_client -connect sfbserver.sipdomain:5061
Auch LDAP und andere Protokolle sind möglich und sie sollten natürlich ihre eigenen Servernamen als Ziele verwenden. für den Einsatz mit Exchange ist HTTPS, POP3S und IMAP4S der häufigste Anwendungsfall. Interessant ist hier auch, dass man so einfach sieht, dass per SSL auch die komplette Chain ausgetauscht wird:
C:\Program Files\OpenSSL-Win64\bin>openssl s_client -connect lyncweb.msxfaq.com:443 Loading 'screen' into random state - done CONNECTED(0000017C) depth=2 C = uS, O = "Starfield Technologies, Inc.", OU = Starfield Class 2 Certification Authority verify error:num=19:self signed certificate in certificate chain verify return:0 --- Certificate chain 0 s:/O=lyncweb.msxfaq.com/OU=Domain Control Validated/CN=lyncweb.msxfaq.com i:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldte ch.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435 1 s:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldte ch.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435 i:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority 2 s:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority i:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority
Das ist in der Regel einfacher als ein Mitschnitt per NETMON.
SMTP mit StartTLS
Es gibt zwar auch einen SMTP over SSL Weg (SMTPS), mit dem direkt eine SSL-Verbindung genutzt wird. Allerdings wird der eher nicht genutzt. Statt dessen kann ein Mailserver über die Verbindung auf Port 25 mit dem Befehl "STARTTLS" auf eine SS-Verbindung umsteigen, wenn der empfangende Mailserver dies bei einem EHLO anbietet
Hoffentlich nutzen immer mehr Server die Funktion, auch ein Zertifikat anzubieten, so dass der Absender die Mail verschlüsseln kann. Dazu benötigt man natürlich ein Zertifikat für den Mailserver, wie er im MX-Record eingetragen ist. Mit OpenSSL kann man auch diese Zertifikate schon mal "abrufen". Hier ein Beispiel mit einem Selbstzertifikat.
C:\OpenSSL\bin>openssl.exe s_client -connect mail.netatwork.de:25 -starttls smtp Loading 'screen' into random state - done CONNECTED(0000014C) depth=0 /C=DE/ST=NRW/L=Paderborn/O=Net at Work/OU=Technik/CN=owa.netatwork.de verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 /C=DE/ST=NRW/L=Paderborn/O=Net at Work/OU=Technik/CN=owa.netatwork.de verify error:num=27:certificate not trusted verify return:1 depth=0 /C=DE/ST=NRW/L=Paderborn/O=Net at Work/OU=Technik/CN=owa.netatwork.de verify error:num=21:unable to verify the first certificate verify return:1 --- Certificate chain 0 s:/C=DE/ST=NRW/L=Paderborn/O=Net at Work/OU=Technik/CN=owa.netatwork.de i:/DC=de/DC=netatwork/CN=nawca --- Server certificate -----BEGIN CERTIFICATE----- MIIFejCCBGKgAwIBAgIKYnfouwAAAAAAsjANBgkqhkiG9w0BAQUFADA/MRIwEAYK CZImiZPyLGQBGRYCZGUxGTAXBgoJkiaJk/IsZAEZFgluZXRhdHdvcmsxDjAMBgNV BAMTBW5hd2NhMB4XDTA4MDUxNzA4NTUwM1oXDTEwMDUxNzA4NTUwM1owcjELMAkG A1UEBhMCREUxDDAKBgNVBAgTA05SVzESMBAGA1UEBxMJUGFkZXJib3JUMRQwEgYD VQQKEwtOZXQgYXQgV29yazEQMA4GA1UECxMHVGVjaG5pazEZMBcGA1UEAxMQb3dh Lm5ldGF0d29yay5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAy8aZy2+r mvFLmkhHd9L56P+VBwIdnvyJpRy45xDfyA32xjlX2PHbHLPtrYdtXc83v4dKcz6Z 0qUJw0ceHKV4gfIptLm2lsN3Zqx5U8odwEr/dFYh11P0KXigFZPR09jZQXmSLJh2 b43V6Ks6m+TpbuNmcbLLVHFRUrFAvoQjRzUCAwEAAaOCAscwggLDMAsGA1UdDwQE AwIFoDBEBgkqhkiG9w0BCQ8ENzA1MA4GCCqGSIb3DQMCAgIAgDAOBggqhkiG9w0D BAICAIAwBwYFKw4DAgcwCgYIKoZIhvcNAwcwEwYDVR0lBAwwCgYIKwYBBQUHAwEw HQYDVR0OBBYEFF/nOfj7Ygy49ucmlYiFH0JPOq+YMB8GA1UdIwQYMBaAFLkRKrfd 7Ov2omJCSgHn3HdYUcpZMIHuBgNVHR8EgeYwgeMwgeCggd2ggdqGga5sZGFwOi8v L0NOPW5hd2NhLENOPW5hd3N2MDEwLENOPUNEUCxDTj1QdWJsaWMlMjBLZXklMjBT ZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPW5ldGF0d29y ayxEQz1kZT9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Q2xh c3M9Y1JMRGlzdHJpYnV0aW9UUG9pbnSGJ2h0dHA6Ly9uYXdjYS5uZXRhdHdvcmsu ZGUvcGtpL25hd2NhLmNybDCCAQMGCCsGAQUFBwEBBIH2MIHzMIGlBggrBgEFBQcw AoaBmGxkYXA6Ly8vQ049bmF3Y2EsQ049QUlBLENOPVB1YmxpYyUyMEtleSUyMFNl cnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9bmV0YXR3b3Jr LERDPWRlP2NBQ2VydGlmaWNhdGU/YmFzZT9vYmplY3RDbGFzcz1jZXJ0aWZpY2F0 aW9uQXV0aG9yaXR5MEkGCCsGAQUFBzAChj1odHRwOi8vbmF3Y2EubmV0YXR3b3Jr LmRlL3BraS9uYXdzdjAxMC5uZXRhdHdvcmsuZGVfbmF3Y2EuY3J0MCEGCSsGAQQB gjcUAgQUHhIAVwBlAGIAUwBlAHIAdgBlAHIwDQYJKoZIhvcNAQEFBQADggEBAEc9 zlGM2d+HcqxfeLQ17jwSXIO9/0nZLoetg2Mn/BguGncMKKneW6SBu+GZLdCLY4c/ TDnkVc3Dq4JRG8CA2fsSDfRMm62zkyxJzv/0toNbKw00piKXLUT7raJ3zJ+1J9PL SKRNzA8NZk5SB/8spq2qGoIoel1SHWCYkbxqRBGOuPWQ+GJazghYs0M9pzjML08s 793QgDW2KGREabKhBUmun/KnK2eJWhEt3q2GOumL/d/+jbfaXy4a5s4w4gyp7pxD lcbgd6A2n/H/LDcYc2GCgNDPZ9GxXcwOSeMqlHVvxl1L97ULbDYXF4qiAV0Eaxlq 9Q0pHffW+GDV0zkN/l4= -----END CERTIFICATE----- subject=/C=DE/ST=NRW/L=Paderborn/O=Net at Work/OU=Technik/CN=owa.netatwork.de issuer=/DC=de/DC=netatwork/CN=nawca --- No client certificate CA names sen --- SSL handshake has read 13913 bytes and written 353 bytes --- New, TLSv1/SSLv3, Cipher is RC4-MD5 Server public key is 1024 bit Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : RC4-MD5 Session-ID: E0180000F23972EEF0BE7C4005C349384D552B1FD590C7A4E8454D6B739B44E2 Session-ID-ctx: Master-Key: CA3FB3EC5EE5094AF823BEDDE125C68BEAA9F81F2E341E106C5F39EFA1002F075AC25ACBDBD8FF50C6D65A39B44D29FA Key-Arg : None Start Time: 1248873587 Timeout : 300 (sec) Verify return code: 21 (unable to verify the first certificate) --- 250 STARTTLS quit
Den Abschnitt zwischen "-----BEGIN CERTIFICATE-----" und "-----END CERTIFICATE-----" können Sie natürlich einfach per Notepad als "CER-Datei speichern und mit einem Doppeltklick auch anzeigen lassen.
Man kann nun geteilter Meinung sein, ob nicht öffentliche Zertifikate auf einem Mailserver Sinn machen. Exchange 2007 arbeitet generell erst einmal mit den Selbstzertifikaten. Es ist immer noch besser die Mails verschlüsselt an das andere System zu senden, als unverschlüsselt. Einen Schutz gegen eine bösartige Umleitung der Mails an einen anderen Server ist so natürlich nicht gegeben.
OpenSSL und Office Communications Server
OpenSSL leistet aber auch gute Dienste, um den SSL-Handshake eines OCS-Servers zu prüfen. Ein einfacher S_Client-Connect zum OCS-Port liefert auch hier das SSL-Zertifikat und kann helfen. Falsche Bindungen zu erkennen.
C:\OpenSSL\bin>openssl.exe s_client -connect sip.firma.com:5061
OpenSSL zeigt Details einer PEM-Datei an
Übrigens kann man mit OpenSSL auch ganz einfach einen Detailauszug des Zertifikats generieren
C:\Programme\GnuWin32\bin>openssl.exe x509 -text -in "iis.pem" Certificate: Data: Version: 3 (0x2) Serial Number: 2d:61:01:97:19:5c:52:7f:d9:18:90:af:d1:85:01:81 Signature Algorithm: sha1WithRSAEncryption Issuer: O=VeriSign Trust Network, OU=VeriSign, Inc., OU=VeriSign Interna tional Server CA - Class 3, OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD .(c)97 VeriSign Validity Not Before: Dec 6 00:00:00 2007 GMT Not After : Dec 5 23:59:59 2008 GMT Subject: C=DE, ST=NRW, L=Paderborn, O=MSXFAQ, OU=IT, CN=autodiscover.msxfaq.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 3d:6c:ed:fc:f3:a1:df:59:be:dc:80:2d:74:24:08: .......... c0:4c:f7:5e:d3:33:66:4a:c1 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: DNS:webmail.msxfaq.de, DNS:autodiscover.msxfaq.de X509v3 Basic Constraints: CA:FALSE .....
OpenSSL lädt Zertifikat und zeig es an
Am Beispiel von Microsoft und OpenSSL habe ich einfach deren Zertifikat per TCP geholt und ausgeben lassen:
Echo "" | openssl.exe s_client -starttls smtp -connect 216.32.181.22:25 WARNING: can't open config file: /usr/local/ssl/openssl.cnf Loading 'screen' into random state - done CONNECTED(00000090) depth=1 /O=Cybertrust Inc/CN=Cybertrust SureServer Standard Validation CA verify error:num=20: unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/CN=mail.global.frontbridge.com/C=US/emailAddress=support@frontbridge.com/L =Redmond/O=Microsoft/OU=Exchange Hosted Services/ST=Washington i:/O=Cybertrust Inc/CN=Cybertrust SureServer Standard Validation CA 1 s:/O=Cybertrust Inc/CN=Cybertrust SureServer Standard Validation CA i:/C=US/O=GTE Corporation/OU=GTE CyberTrust Solutions, Inc./CN=GTE CyberTrust Global Root --- Server certificate -----BEGIN CERTIFICATE----- MIIEWzCCA0OgAwIBAgILAQAAAAABHQ0xv/EwDQYJKoZIhvcNAQEFBQAwUDEXMBUG A1UEChMOQ3liZXJ0cnVzdCBJbmMxNTAzBgNVBAMTLEN5YmVydHJ1c3QgU3VyZVNl cnZlciBTdGFuZGFyZCBWYWxpZGF0aW9uIENBMB4XDTA4MTAxNzIzNDQwM1oXDTA5 MTAxNzIzNDQwM1owgbkxJDAiBgNVBAMTG21haWwuZ2xvYmFsLmZyb250YnJpZGdl LmNvbTELMAkGA1UEBhMCVVMxJjAkBgkqhkiG9w0BCQEWF3N1cHBvcnRAZnJvbnRi cmlkZ2UuY29tMRAwDgYDVQQHEwdSZWRtb25kMRIwEAYDVQQKEwlNaWNyb3NvZnQx ITAfBgNVBAsTGEV4Y2hhbmdlIEhvc3RlZCBTZXJ2aWNlczETMBEGA1UECBMKV2Fz aGluZ3RvbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOhbGv6COFgI xEkPM8CPwnqokg/VB4bbXJYAaypNgNJpUHnUUykpOfr/gLeBifE/KGDj8Pz0YehI /hy3dh2qg2dEba26E16sDkMNLu3/jO1xpKJujhBo9K6CFEJROHPdXUrngyh3gCej Vu+LJjhBjG66D7UaMYa5bpFknynavpZx6S6hkpHPS1gPppy7NmyZ7zgXxgD6n3BT K2YjdEB5pTtYmbb+HsQv4dt9GktosY/NyI+v6zCWjRDKtUk3setirP0KImRDSt2S EHxUN/AZiJADJJNO2+F2WJuE7M140lghjIWZZl5GqamdKSCUElT/f5MuJTmayhNd FXRW07fjhPMCAwEAAaOByzCByDAfBgNVHSMEGDAWgBTNOpafrm4PQFwcSPhLLbhx AeuJ2jA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLm9tbmlyb290LmNvbS9T dXJlU2VydmVyRzIuY3JsMB0GA1UdDgQWBBRlrJspLRiXFeZiOakK5bHexhRBLzAJ BgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYI KwYBBQUHAwIwEQYJYIZIAYb4QgEBBAQDAgbAMA0GCSqGSIb3DQEBBQUAA4IBAQAz e/0mnUezRgKylffXfUtIx6KmKh5zAPY2cPu5q6WDIylrVcZkg/gVza+CeChDODgE fkFPknLwo51w9Z+/t+agkqGtFxGfV67/JX2Hsizkkxr5698werUewwphMq4hikk9 x/1ryJs2qBttaja6u2v/o+Zcy6aYOafQebv7Ih8xS/svWI7rn4EE9V3MJDfeZOFb a7C90PwqulGdzz1LDRPwuPvMdgn9VAiaRze0HJp3ybcT22pZc4h+WWItSuKhPyRa X1dvYa+GghXhPteDarvty6JtO8QHkWiAOmmrp2Z9tdWj6xSOBJIBHviI3KgJAkwY NXQMpKm1UDIkryABHmw8 -----END CERTIFICATE----- subject=/CN=mail.global.frontbridge.com/C=US/emailAddress=support@frontbridge.co m/L=Redmond/O=Microsoft/OU=Exchange Hosted Services/ST=Washington issuer=/O=Cybertrust Inc/CN=Cybertrust SureServer Standard Validation CA --- No client certificate CA names sent --- SSL handshake has read 3074 bytes and written 357 bytes --- New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA Server public key is 2048 bit Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : DHE-RSA-AES256-SHA Session-ID: 457800D63708E9235954087F28279F820B0A34EB6EFF38568205C46081B341DB Session-ID-ctx: Master-Key: 8B48753D0F58915956AF5CB7D5CF2B07EAB6D574D3BC5EA19E6ED541CFEA9DFD 5AF675E8CA26D2E2C427FF9B94495B21 Key-Arg : None Start Time: 1226356543 Timeout : 300 (sec) Verify return code: 20 (unable to get local issuer certificate) --- 250 8BITMIME
Es ist also gar nicht schwer mal das Zertifikat eines Mailservers ab zu sammeln. Aber ein Sicherheitsrisiko ist es natürlich auch nicht.
OpenSSL als Zertifikatsstelle
Wer sich scheut eine Windows Zertifizierungsstelle zu installieren, wie auf CA installieren beschrieben, kann auch mit OpenSSL eine kleine RootCA aufbauen und Zertifikate ausstellen.
Die RootCA ist ja idealerweise gar nicht mit dem Netzwerk verbunden und macht nichts anderes als:
- Die wenigen SubCAs zu signieren
- Regelmäßig eine CRL erstellen und irgendwo hin kopieren
Für diese Tätigkeiten brauchen wir aber keinen permanent aktiven Windows Dienst mit WebSeite oder offenen Ports. Dsa kann auch ein Verzeichnis mit den entsprechenden Dateien sein und ein geplanter Tasks zum Aktualisierung der CRL.
- OpenSSL Certificate Authority
https://jamielinux.com/docs/openssl-certificate-authority/introduction.html
Thorsten Janke hat mir dazu ein ZIP-Archiv zur Verfügung gestellt, welches alle erforderlichen Komponenten von OpenSSL und passende Skripte enthält, so dass Sie damit eine "kleine CA-Lösung" aufbauen können.
Nachdem Sie das Stammzertifikat auf allen Clients ausgerollt haben, können Sie weitere Zertifikate für ihre Server recht einfach erstellen. für Windows Administratoren ist aber weiterhin der Aufbau einer Firmen CA eine lohnende Überlegung.
PFX Sicherheit
An mehreren Stellen haben Sie nun gelesen, dass sie Zertifikate als CER oder PFX-Datei exportieren können. Beim Export können Sie unter Windows die Berechtigungen auch an ein AD-Konto oder eine Gruppe knüpfen oder die Datei mit einem Kennwort sichern. Bei der Wahl eines Kennworts sollten Sie immer ein ausreichend langes Kennwort wählen, denn es gibt natürlich Programme, die per Brute-Force einfach Kennworte für eine PFX-Datei durchprobieren. Schon im Jahr 2011 konnte eine Software ca. 36-41 Mio Kennworte durchprobieren.
Der Angriff ist heute sicher viel schneller möglich und die PFX-Datei kann sich ja nicht "wehren". Es gibt hier kein Throtting auf Netzwerk- oder Service-Ebene.
- Certificate Password Recovery Tool
https://7thzero.com/blog/certificate-password-recovery-tool - PFX Certificate Password Recovery Tool (Brute Force)
https://blog.icewolf.ch/archive/2022/01/25/pfx-certificate-password-recovery-tool-brute-force/
OpenSSL und S/MIME
Wussten Sie schon, das Sie mit OpenSSL auch E-Mails nach S/MIME-Standard signieren und verschlüsseln können? Die Kommandos in der SMIME-Gruppe sind dazu verfügbar.
C:\Program Files\OpenSSL-Win64\bin>openssl.exe smime usage smime [options] cert.pem ... where options are -encrypt encrypt message -decrypt decrypt encrypted message -sign sign message -verify verify signed message -pk7out output PKCS#7 structure -des3 encrypt with triple DES -des encrypt with DES -seed encrypt with SEED -rc2-40 encrypt with RC2-40 (default) -rc2-64 encrypt with RC2-64 -rc2-128 encrypt with RC2-128 -aes128, -aes192, -aes256 encrypt PEM output with cbc aes -camellia128, -camellia192, -camellia256 encrypt PEM output with cbc camellia -nointern don't search certificates in message für signer -nosigs don't verify message signature -noverify don't verify signers certificate -nocerts don't include signers certificate when signing -nodetach use opaque signing -noattr don't include any signed attributes -binary don't translate message to text -certfile file other certificates file -signer file signer certificate file -recip file recipient certificate file für decryption -in file input file -inform arg input format SMIME (default), PEM or DER -inkey file input private key (if not signer or recipient) -keyform arg input private key format (PEM or ENGINE) -out file output file -outform arg output format SMIME (default), PEM or DER -content file supply or override content für detached signature -to addr to address -from ad from address -subject s subject -text include or delete text MIME headers -CApath dir trusted certificates directory -CAfile file trusted certificates file -crl_check check revocation status of signer's certificate using CRLs -crl_check_all check revocation status of signer's certificate chain using CRLs -engine e use engine e, possibly a hardware device. -passin arg input file pass phrase source -rand file;file;... load the file (or the files in the directory) into the random number generator cert.pem recipient certificate(s) für encryption
Allerdings benötigen Sie den Privatekey und das Zertifikat nicht als PFX-Datei sondern im PEM-Format
openssl smime -sign -in rfc822mailfile -out signed-mailfile -signer <pfad>/certificate.pem -inkey <pfad>/secret-key.pem -text
Um die Mail noch zu verschlüsseln können Sie diese nach der Signierung noch einmal durch OpenSSL schicken und mit dem PublicKey der Gegenseite verschlüsseln.
openssl smime -encrypt -out encrypted-signed-message -in signed-message /path/to/intended-operators/certificate.pem
Umgekehrt können Sie mit "VERIFY/DECRYT" dann auch eine empfangene Mail überprüfen bzw. entschlüsseln. Sie sehen aber schon, dass dies alles "dateibasiert" arbeitet, d.h. ihre Mail muss als Text-Datei vorliegen.
- Sending S/MIME email using
OpenSSL
http://certificate.nikhef.nl/info/smime-manual.html
Weitere Links
-
www.openssl.org
Homepage von OpenSSL
FAQ http://www.openssl.org/support/faq.html - MSXFAQ - Network Load Balancing
- MSXFAQ - CA installieren
- MSXFAQ - IIS Zertifikat einrichten
- MSXFAQ - Clientzertifikat anfordern
- MSXFAQ - ISA-Server und SSL
- MSXFAQ - SelfSSL
- MSXFAQ - E2K7: Zertifikate
-
Benutzerzertifikate im AD
Wo liegen sie, wie können Sie exportiert und importiert werden. - E-Mail-Verschlüsselung austesten Diagnose von POP3, IMAP und SMTP
via SSL
http://www.heise.de/security/artikel/E-Mail-Verschluesselung-austesten-785451.html - Certificate Concepts
http://blogs.technet.com/askds/archive/2008/04/04/certificate-concepts.aspx - http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.enablessl.aspx
- http://www.madboa.com/geek/openssl/
-
CSR dekodieren
https://secure.comodo.net/utilities/decodeCSR.html -
Verifying The SSL Certificate Expiration with a tool
http://blogs.technet.com/b/pki/archive/2011/02/22/verifying-the-ssl-certificate-expiration-with-a-tool.aspx -
Das OpenSSL Handbuch
http://www.absolute-cool.de/dokus/ssl/openssl/ -
Mini-Howto zur Zertifikat-Erstellung
http://www.heimpold.de/mhei/mini-howto-zertifikaterstellung.htm -
Praktische Experimente mit OpenSSL
https://www-User.tu-chemnitz.de/~hot/SSL/