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
Base64

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
DER oder Base64

CRT

Binäres Zertifikat

X.509
binary

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
RFC 2315 PKCS 7: Cryptographic Message Syntax Version 1.5

 

crl

Enthält die Liste der zurückgezogenen Zertifikate
RFC3280 Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile

 

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.

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

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.

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.

Anforderung erstellen

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.

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

STARTTLS

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.

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.

openssl-ca.zip

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.

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.

Weitere Links