Kryptographie und TCP/IP
Secure Socket Layer (SSL)
Transport Layer Security (TLS)
Zertifikate nach X.509
OpenSSL
Einsatzpunkte im Schichtenmodell
Schicht | Bemerkungen | Kryptographie |
---|---|---|
5. Verarbeitung Anwendung |
Telnet, FTP, SMTP, NNTP, HTTP | PGP, S-HTTP, HTTP over SSL |
4. Transport | TCP, UDP | SSL |
3. Vermittlung | IP, Internet Protocoll | IPv6 |
2. Sicherung | Adapter-Karten | |
1. Bitübertragung | Leitungen, Elektronik |
Verarbeitungs- / Anwendungsebene
abgestimmt auf Anwendung
Reimplementierung für jede Anwendung
Beispiel: PGP, Secure-HTTP (S-HTTP)
Transportschicht
einmalige Implementierung
alle Daten werden verschlüsselt
Beispiel: Secure Socket Layer (SSL)
HTTP over SSL: https://host/path/x.html
Netzwerkschicht / Vermittlungsebene
einmalige Implementierung
alle Daten werden verschlüsselt
Beispiel: IP version 6 (IPv6)
implementiert die TCP/IP Socket Programmier-Schnittstelle
Protokoll zur sicheren Client/Server Datenübertragung
Standardisiert:
SSL 2.0 (von Netscape),
SSL 3.0 (Internet Draft von Netscape),
TLS 1.0 (Internet Standard, von IETF, RFC 2246)
Ziele
kryptographische Sicherheit
Interoperabilität
offenes Protokoll
Erweiterbarkeit
neue Verfahren können eingebunden werden
Effizienz
Speichermöglichkeit für ausgehandelte
Verbindungen
für alle TCP/IP Anwendungen nutzbar
leichter zu benutzen und zu verwalten
effizient
evtl. Probleme mit Firewalls
erweiterbar nur mit Rücksicht auf TCP/IP
SSL Protokoll liegt zwischen der Transportschicht und der Anwendungsschicht
aus Sicht der Transportschicht:
SSL ist Anwendung
aus Sicht der Anwendung:
SSL ist Transportschicht (Socket)
SSL besteht aus zwei Schichten plus Statusinformationen
Steuerprotokolle
Verbindungsaushandlung
schreibt Verbindungsparameter in Status
austauschbar
Handshake Protocol, Change Cipher Protocol, Alert Protocol
Recordprotokoll
Kodierung und Transfer entsprechend dem Status
Status
beinhaltet Verbindungsparameter
wird mit Nullwerten initialisiert
durch SSL Handshake Protokoll
Aushandeln von Verbindungsmodalitäten
Protocol Version, Session Id, Cipher Suite,
Compression Method, Random Variables
Austausch von Zertifikaten
(optional)
Schlüsselaustausch
(optional)
Umstellen der Verbindung entsprechend den ausgehandelten Werten
Key Exchange Method
wie werden die gemeinsamen symmetrischen Schlüssel ausgetauscht ?
SSL 2.0 nur RSA, SSL 3.0 auch andere
Cipher for Data Transfer, mit symmetrischen Schlüssel
Stream Ciphers: RC4
Block Ciphers: RC2, DES, Triple-DES, IDEA
Message Digest Method
MD5, SHA-1, für Message Authentication (MAC)
SSL Alert Protokoll behandelt folgende Fehlerarten
unerwartete Nachricht
falsche Prüfsumme
Entpackungsfehler
Handshake Fehler
Kein Zertifikat vorhanden
Ungültiges Zertifikat
Nicht unterstütztes Zertifikat
Ungültiger Parameter
=> Fehlerfall: Nachricht und Verbindungsabbruch
Fehlernachricht wird verschlüsselt gesandt
alle Informationen über die Verbindung werden gelöscht
Browser:
Netscape 1.x, 2.x, 3.x, 4.x, 6.x
Microsoft IE 3.x, 4.x, 5.x
Lynx 2.8 mit OpenSSL
Server:
Netscape, Microsoft
Apache mit mod_ssl und OpenSSL
Probleme:
Import / Export Restriktionen einzelner Länder
Beschränkungen in der Schlüssellänge
Patentierung einiger Verfahren
Zertifikat (certificate) beglaubigt die Verbindung von einem öffentlichen Schlüssel und der Identifikation einer Person.
Die Personen-Identifikation erfolgt mit einem Distinguished Name (DN).
Die Spezifikation eines DN ist im X.509 Standard festgelegt.
DN Feld | Abkürzung | Bedeutung |
---|---|---|
Common Name | CN | Name der Person |
Organization | O | Firma oder Organisation |
Organizational Unit | OU | Abteilung oder Firmenteil |
Locality | L | Stadt, Sitz der Organisation |
State | ST | Staat, Provinz, Gegend |
Country | C | ISO Länderkode |
Beispiel:
CN=Karl Dall O=Schlangenöl AG OU=Brillenabteilung L=Schlangenbad ST=Hessen C=de
Ein Zertifikat kombiniert die Informationen über das Individuum mit weiteren Informationen über die Ausgabestelle und diversen Verwaltungsinformationen:
Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=XY, ST=Snake Desert, L=Snake Town, O=Snake Oil, Ltd, OU=Certificate Authority, CN=Snake Oil CA/Email=ca@snakeoil.dom Validity Not Before: Oct 29 17:39:10 2000 GMT Not After : Oct 29 17:39:10 2001 GMT Subject: C=DE, ST=Germany, L=Weinheim, O=Home, OU=Web Lab, CN=krimel-wh.isdn.uni-mannheim.de/Email=krimel@rz.uni-mannheim.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c4:40:4c:6e:14:1b:61:36:84:24:b2:61:c0:b5: ... f0:b4:95:f5:f9:34:9f:f8:43 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: email:krimel@rz.uni-mannheim.de Netscape Comment: mod_ssl generated test server certificate Netscape Cert Type: SSL Server Signature Algorithm: md5WithRSAEncryption 12:ed:f7:b3:5e:a0:93:3f:a0:1d:60:cb:47:19:7d:15:59:9b: ...
Zertifikate können bei verschiedenen Organisationen (gegen Gebühr) bestellt werden. Zum Beispiel bei Verisign, Thawte, CertiSign oder IKS GmbH.
OpenSSL bietet eine offene Implementierung von SSL und TLS.
Die gewünschten Schlüssel kann man sich mit Hilfe der OpenSSL Kommandozeilen Tools erzeugen.
Erzeugen eines eigenen Schlüsselpaars mit öffentlichem und privatem Teil
Erzeugen einer Anforderung zur Zertifizierung
Zertifizieren von Schlüsseln
Testen der verschlüsselten Kommunikation mit dem OpenSSL Server oder Client
Einsatz der Zertifikate in Servern (z.B. Web-Server mit HTTPS)
Einsatz der Zertifikate in Browsern (auch über HTTPS)
Beispiel Laden eines DFN Zertifikates in den Browser von der RUM CA.
Schlüsselpaare werden mit dem Kommando
openssl genrsa
erzeugt.
openssl genrsa -des3 -out user.key 1024 Generating RSA private key, 1024 bit long modulus .................................................. .............................++++++ ........................++++++ e is 65537 (0x10001) Enter PEM pass phrase: Verifying password - Enter PEM pass phrase:
Ergebnis:
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,DCDD31A379A9E2D6 TlFTgbOfniqLvHIWDmp+faRJA3WYI2WUoiqhGZl85HuMidEK08UNRePwtqRnKNWv DEUDBiGWLap7bgg9yaWuK8jSruSYOJZGkPQdO9t4bD6TQiTXTRkDyC8iIS8R2tbD ... 6DfMmbpuhsaIbYyv3BQfmNDoWSeebTLBtU67jvzq6rzGxcvmrCAbNIES4B7PMqrY v0WcUNBSF5+PAMw5V2KsKTklesuh/Yczh7bkBMaQdJo= -----END RSA PRIVATE KEY-----
Ergebnis als Text:
openssl rsa -noout -text -in myca.key read RSA key Enter PEM pass phrase: Private-Key: (1024 bit) modulus: 00:9d:a0:a1:0e:97:55:aa:74:88:3b:05:c0:18:72: ... 58:72:a4:3a:41:46:22:5a:d5 publicExponent: 65537 (0x10001) privateExponent: ... prime1: 00:cb:ba:31:10:49:d7:4e:51:99:58:c1:cc:05:54: ... prime2: 00:c6:12:5f:85:c2:f1:a8:e7:20:00:e4:af:8f:4d: ... exponent1: 2a:db:a9:94:ae:a4:0f:c2:d4:ca:ba:42:4c:60:cb: ... exponent2: 02:d3:6a:47:77:43:8 ... coefficient: 5b:58:6d:ef:be:37:45:e7:93:36:fd:ae:a9:86:d6: ...
Zertifikatsanforderungen werden mit dem Kommando
openssl req
erzeugt.
openssl req -new -key user.key -out user.csr Using configuration from /etc/ssl/openssl.cnf Enter PEM pass phrase: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:de State or Province Name (full name) [Some-State]:ba-wue Locality Name (eg, city) []:mannheim Organization Name (eg, company) [Internet Widgits Pty Ltd]:uni Organizational Unit Name (eg, section) []:it Common Name (eg, YOUR name) []:Karl Dall Email Address []:kd@al.de Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:. An optional company name []:.
Ergebnis:
-----BEGIN CERTIFICATE REQUEST----- MIIBuTCCASICAQAweTELMAkGA1UEBhMCZGUxDzANBgNVBAgTBmJhLXd1ZTERMA8G ... skXL47VitW2udc/Mgg== -----END CERTIFICATE REQUEST-----
Ergebnis als Text:
openssl req -noout -text -in user.csr Using configuration from /etc/ssl/openssl.cnf Certificate Request: Data: Version: 0 (0x0) Subject: C=de, ST=ba-wue, L=mannheim, O=uni, OU=it, CN=Karl Dall/Email=kd@al.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:9d:a0:a1:0e:97:55:aa:74:88:3b:05:c0:18:72: ... 58:72:a4:3a:41:46:22:5a:d5 Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: md5WithRSAEncryption 37:1c:98:34:0f:42:67:84:e9:2a:8c:f3:3c:38:8e:3a:9d:75: ... f0:ce:20:2b:62:dd:5a:b2:45:cb:e3:b5:62:b5:6d:ae:75:cf: cc:82
Zertifikate für den eigenen Schlüssel können selbst erzeugt
werden mit dem Kommando
openssl req -x509
.
openssl req -new -x509 -key myca.key -out myca.crt Using configuration from /etc/ssl/openssl.cnf Enter PEM pass phrase: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:de State or Province Name (full name) [Some-State]:ba-wue Locality Name (eg, city) []:mannheim Organization Name (eg, company) [Internet Widgits Pty Ltd]:uni Organizational Unit Name (eg, section) []:it Common Name (eg, YOUR name) []:Carl Cert Email Address []:cert@home.de
Ergebnis:
openssl x509 -noout -text -in myca.crt Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=de, ST=ba-wue, L=mannheim, O=uni, OU=it, CN=Carl Cert/Email=cert@home.de Validity Not Before: May 22 20:12:08 2003 GMT Not After : Jun 21 20:12:08 2003 GMT Subject: C=de, ST=ba-wue, L=mannheim, O=uni, OU=it, CN=Carl Cert/Email=cert@home.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b5:b1:39:fb:4a:ca:1b:af:05:4e:87:20:dd:86: ... 37:ac:91:e3:36:f0:29:f0:21 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: C1:F0:F0:91:DC:CD:7E:7A:29:1C:44:0A:F2:64:0F:7E:C9:1F:BE:BE X509v3 Authority Key Identifier: keyid:C1:F0:F0:91:DC:CD:7E:7A:29:1C:44:0A:F2:64:0F:7E:C9:1F:BE:BE DirName:/C=de/ST=ba-wue/L=mannheim/O=uni/OU=it/CN=Carl Cert/Email=cert@home.de serial:00 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: md5WithRSAEncryption 18:15:56:cb:51:b1:e2:6d:8e:c5:a4:e0:45:4c:57:60:51:6b: ... ff:8d
Die Kommunikation über SSL kann mit den Kommandos
openssl s_server
für einen SSL-Server
und
openssl s_client
für einen SSL-Client
getestet werden.
Zum Beispiel kann mit dem
Client eine Verbindung zu einem HTTPS Web-Server hergestellt werden,
oder mit dem Server kann ein HTTPS Web-Browser getestet werden.
Starten eines SSL-Servers:
openssl s_server -cert myca.crt -key myca.key Using default temp DH parameters Enter PEM pass phrase: ACCEPT -----BEGIN SSL SESSION PARAMETERS----- MHUCAQECAgMBBAIAFgQgWG2fR8+cuE+pH/IzRoGu7Bao9hDtGuhdXxQwbojlWNoE MHSAmy7C1n9t6lchz+POiOXQOpI70+lUUuL8fcPOVFU0NUe3rz8OsacXxD1wTrgi 2aEGAgQ+0olHogQCAgEspAYEBAEAAAA= -----END SSL SESSION PARAMETERS----- Shared ciphers:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA: DHE-DSS-RC4-SHA:RC4-SHA:RC4-MD5:EXP1024-DHE-DSS-RC4-SHA:EXP1024-RC4-SHA: EXP1024-DHE-DSS-DES-CBC-SHA:EXP1024-DES-CBC-SHA:EXP1024-RC2-CBC-MD5: EXP1024-RC4-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA: EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA: EXP-RC2-CBC-MD5:EXP-RC4-MD5 CIPHER is EDH-RSA-DES-CBC3-SHA Hallo Wie gehts? DONE shutting down SSL CONNECTION CLOSED
Starten eines SSL-Clients:
openssl s_client -connect localhost:4433 -state CONNECTED(00000003) SSL_connect:before/connect initialization SSL_connect:SSLv2/v3 write client hello A SSL_connect:SSLv3 read server hello A depth=0 /C=de/ST=ba-wue/L=mannheim/O=uni/OU=it/CN=Carl Cert/Email=cert@home.de verify error:num=18:self signed certificate verify return:1 depth=0 /C=de/ST=ba-wue/L=mannheim/O=uni/OU=it/CN=Carl Cert/Email=cert@home.de verify return:1 SSL_connect:SSLv3 read server certificate A SSL_connect:SSLv3 read server key exchange A SSL_connect:SSLv3 read server done A SSL_connect:SSLv3 write client key exchange A SSL_connect:SSLv3 write change cipher spec A SSL_connect:SSLv3 write finished A SSL_connect:SSLv3 flush data SSL_connect:SSLv3 read finished A --- Certificate chain 0 s:/C=de/ST=ba-wue/L=mannheim/O=uni/OU=it/CN=Carl Cert/Email=cert@home.de i:/C=de/ST=ba-wue/L=mannheim/O=uni/OU=it/CN=Carl Cert/Email=cert@home.de --- Server certificate -----BEGIN CERTIFICATE----- MIIDTDCCArWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB9MQswCQYDVQQGEwJkZTEP ... agFM3TOF5bRis9fyA2JspiJTV2RwgzWU4PD1tw6L/40= -----END CERTIFICATE----- subject=/C=de/ST=ba-wue/L=mannheim/O=uni/OU=it/CN=Carl Cert/Email=cert@home.de issuer=/C=de/ST=ba-wue/L=mannheim/O=uni/OU=it/CN=Carl Cert/Email=cert@home.de --- No client certificate CA names sent --- SSL handshake has read 1276 bytes and written 250 bytes --- New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA Server public key is 1024 bit SSL-Session: Protocol : TLSv1 Cipher : EDH-RSA-DES-CBC3-SHA Session-ID: 586D9F47CF9CB84FA91FF2334681AEEC16A8F610ED1AE85D5F14306E88E558DA Session-ID-ctx: Master-Key: 74809B2EC2D67F6DEA5721CFE3CE88E5D03A923BD3E95452E2FC7DC3CE5455343547B7AF3F0EB1A717C43D704EB822D9 Key-Arg : None Start Time: 1053985095 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) --- Hallo Wie gehts? DONE SSL3 alert write:warning:close notify
HTTP over SSL
SMTP over SSL mit STARTTLS
POP mit STLS
IMAP mit STARTTLS
MIME-SEC
SSL und TLS in Java
OpenSSH mit OpenSSL
Teil 1 erstellt unter Verwendung eines Seminarvortrags von Robert Schulz.
© Universität Mannheim, Rechenzentrum, 1998-2003.
Heinz Kredel Last modified: Tue Jul 1 23:36:17 CEST 2003