Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

tux:root_ca [2014/06/04 14:18]
wikisysop [Erstellen einer neuen CA]
tux:root_ca [2014/06/14 21:01] (aktuell)
wikisysop [Zertifikat ausstellen und signieren]
Zeile 2: Zeile 2:
 ===== Certification Authority (CA) ===== ===== Certification Authority (CA) =====
  
-Eine >><​fc #​008000>​Certification Authority (CA)</​fc><<​((http://​de.wikipedia.org/​wiki/​Zertifizierungsstelle)) ist eine Instanz die digitale Zertifikate erstellt und signiert, quasi digital unterschreibt. Damit wird ein öffentlicher Schlüssel einer Person oder Organisation beglaubigt. Somit soll sichergestellt werden, dass der Kommunikationspartner auch derjenige ist, den er vorgibt zu sein. Ein Anwendungsbeispiel für die Verwendung von digitalen Zertifikaten ist die Verschlüsselung der Kommunikation bestimmter Webseiten im Umgang mit sensiblen Daten, zB Logininformationen. ​+Eine >><​fc #​008000>​Certification Authority (CA)</​fc><<​((http://​de.wikipedia.org/​wiki/​Zertifizierungsstelle))((http://​www.tldp.org/​HOWTO/​SSL-Certificates-HOWTO/​x195.html)) ist eine Instanz die digitale Zertifikate erstellt und signiert, quasi digital unterschreibt. Damit wird ein öffentlicher Schlüssel einer Person oder Organisation beglaubigt. Somit soll sichergestellt werden, dass der Kommunikationspartner auch derjenige ist, den er vorgibt zu sein. Ein Anwendungsbeispiel für die Verwendung von digitalen Zertifikaten ist die Verschlüsselung der Kommunikation bestimmter Webseiten im Umgang mit sensiblen Daten, zB Logininformationen. ​
  
-Vereinfacht ausgedrückt verläuft der SSL-Handshake wie folgt((http://​publib.boulder.ibm.com/​tividd/​td/​TRM/​SC23-4822-00/​de_DE/​HTML/​user277.htm)):​ +Daten können nur dann ver- und entschlüsselt werden, wenn beide Kommunikationspartner die öffentlichen Schlüssel des jeweils anderen übermittelt bekommen haben. Das Schlüsselpaar privater Schlüssel >><​fc #​008000>​private key</​fc><<​ und öffentlicher Schlüssel >><​fc #​008000>​public key</​fc><<​ stehen in direktem Zusammenhang. Ein Datenpaket wird mit dem privaten Schlüssel des Senders und dem öffentlichen Schlüssel des Empfängers verschlüsselt und der Empfänger entpackt das Paket mit seinem privaten Schlüssel und den öffentlichen Schlüssel des Senders. Somit ist sichergestellt dass sich beide Kommunikationspartner kennen und sich kein dritter einschleichen kann ohne aufzufallen.((http://​publib.boulder.ibm.com/​tividd/​td/​TRM/​SC23-4822-00/​de_DE/​HTML/​user277.htm)) ​
- +
-  * Der Client sendet eine Anfrage zur verschlüsselten Kommunikation. +
-  * Der Server antwortet und sendet sein digitales Zertifikat. +
-  * Der Client prüft die Gültigkeit des Zertifikats. +
-  * Der Client antwortet mit einem zufällig generiert Schlüssel und verschlüsselt diesen mit dem öffentlichen Schlüssel des Servers. +
-  * Der Server verschlüsselt nun die Daten mit seinem privaten und dem öffentlichen (zufällig generierten) Schlüssel des Clients. +
-  * Der Client entschlüsselt die Daten mit seinem in Verbindung mit dem zufällig generierten privaten und dem öffentlichen Schlüssel des Servers. +
- +
-Somit können ​Daten nur dann ver- und entschlüsselt werden, wenn beide Kommunikationspartner die öffentlichen Schlüssel des jeweils anderen übermittelt bekommen haben. Das Schlüsselpaar privater Schlüssel >><​fc #​008000>​private key</​fc><<​ und öffentlicher Schlüssel >><​fc #​008000>​public key</​fc><<​ stehen in direktem Zusammenhang. Ein Datenpaket wird mit dem privaten Schlüssel des Senders und dem öffentlichen Schlüssel des Empfängers verschlüsselt und der Empfänger entpackt das Paket mit seinem privaten Schlüssel und den öffentlichen Schlüssel des Senders. Somit ist sichergestellt dass sich beide Kommunikationspartner kennen und sich kein dritter einschleichen kann ohne aufzufallen. ​+
  
  
Zeile 19: Zeile 10:
 Vertrauen ist eine der Hauptanforderungen an SSL verschlüsselte Kommunikation und auch zugleich das Hauptproblem jeder selbst erstellten >><​fc #​008000>​CA</​fc><<​. Damit ein Client einem Serverzertifikat vertraut, muss es auch von einer vertrauenswürdigen >><​fc #​008000>​CA</​fc><<​ ausgestellt worden sein. Möchte ich nun als Bandit ein gültiges uns seriöses Serverzertifikat für zb >><​fc #​008000><​nowiki>​www.meinonlinebanking.de</​nowiki></​fc><<​ erstellen lassen, muss ich der ausstellenden >><​fc #​008000>​CA</​fc><<​ meine Identität beweisen. Das geht von der Lieferung einer Kopie des Personalausweises bis hin zu notarieller Beglaubigung bei sicherheitsrelevanten Organisationen. Der Bandit könnte jetzt zwar eine eigene >><​fc #​008000>​CA</​fc><<​ installieren und das Zertifikat seiner gekaperten Seite >><​fc #​008000><​nowiki>​www.meinonlinebanking.de</​nowiki></​fc><<​ selbst ausstellen, nur hat er dann das Problem, dass kein Webbrowser diese ausstellende <fc #​008000>​CA</​fc>​ kennt und dieser somit auch nicht vertraut und eine Warnung ausgeben wird.  Vertrauen ist eine der Hauptanforderungen an SSL verschlüsselte Kommunikation und auch zugleich das Hauptproblem jeder selbst erstellten >><​fc #​008000>​CA</​fc><<​. Damit ein Client einem Serverzertifikat vertraut, muss es auch von einer vertrauenswürdigen >><​fc #​008000>​CA</​fc><<​ ausgestellt worden sein. Möchte ich nun als Bandit ein gültiges uns seriöses Serverzertifikat für zb >><​fc #​008000><​nowiki>​www.meinonlinebanking.de</​nowiki></​fc><<​ erstellen lassen, muss ich der ausstellenden >><​fc #​008000>​CA</​fc><<​ meine Identität beweisen. Das geht von der Lieferung einer Kopie des Personalausweises bis hin zu notarieller Beglaubigung bei sicherheitsrelevanten Organisationen. Der Bandit könnte jetzt zwar eine eigene >><​fc #​008000>​CA</​fc><<​ installieren und das Zertifikat seiner gekaperten Seite >><​fc #​008000><​nowiki>​www.meinonlinebanking.de</​nowiki></​fc><<​ selbst ausstellen, nur hat er dann das Problem, dass kein Webbrowser diese ausstellende <fc #​008000>​CA</​fc>​ kennt und dieser somit auch nicht vertraut und eine Warnung ausgeben wird. 
  
-Warum dann also selbst eine >><​fc #​008000>​CA</​fc><<​ erstellen? Die Gründe können vielfältig sein und reichen vermutlich von bloßer Ignoranz über Zertikikate zu Demo und Dokumentationszwecken bis hin zu Unternehmenszertifikaten,​ wo die Client System vorhersagbar und somit bekannt sind. Bei bekannten Clientsystemen zB bestünde die Möglichkeit das Zertifikat der >><​fc #​008000>​CA</​fc><<​ in den Zertifikatsspeicher des Clients als vertrauenswürdige ​>><​fc #​008000>​CA</​fc><<​ zu importieren,​ was dann die Zertifikatswarnung beim aufrufen des SSL verschlüsselten Inhalts beseitigt.+Warum dann also selbst eine >><​fc #​008000>​CA</​fc><<​ erstellen? Die Gründe können vielfältig sein und reichen vermutlich von bloßer Ignoranz über Zertikikate zu Demo und Dokumentationszwecken bis hin zu Unternehmenszertifikaten,​ wo die Client System vorhersagbar und somit bekannt sind. Bei bekannten Clientsystemen zB bestünde die Möglichkeit das Zertifikat der >><​fc #​008000>​CA</​fc><<​ in den Zertifikatsspeicher des Clients als >><​fc #008000>vertrauenswürdige ​CA</​fc><<​ zu importieren,​ was dann die Zertifikatswarnung beim aufrufen des >><​fc #008000>SSL</​fc><< ​verschlüsselten Inhalts beseitigt. ​Man spricht dann von >><​fc #​008000>​selbstsignierten Zertifikaten</​fc><<​ 
 + 
 +Eine eigene >><​fc #​008000>​CA</​fc><<​ zum Erstellen >><​fc #​008000>​selbstsignierte Zertifikate</​fc><<​ ist unter Linux im Handumdrehen installiert. Debian bringt mit dem Paket >><​fc #​008000>​openssl</​fc><<​ bereits alle notwendigen Werkzeuge mit. Starten Sie das >><​fc #​008000>​CA.pl</​fc><<​ Perlskript mit dem Parameter >><​fc #​008000>​-newca</​fc><<​ und folgen Sie dem Assistenten:​ 
 + 
 +<​xterm>#​ <fc #​008000>/​usr/​lib/​ssl/​misc/​CA.pl -newca</​fc>​ 
 +CA certificate filename (or enter to create) 
 + 
 +Making CA certificate ... 
 +Generating a 2048 bit RSA private key 
 +.............................................+++ 
 +................+++ 
 +writing new private key to '​./​demoCA/​private/​cakey.pem'​ 
 +Enter PEM pass phrase: ​ <fc #​008000><​nowiki>​***</​nowiki></​fc>​ 
 +Verifying - Enter PEM pass phrase: <fc #​008000><​nowiki>​***</​nowiki></​fc>​ 
 +----- snip ----- 
 +Country Name (2 letter code) [AU]:<fc #​008000>​DE</​fc>​ 
 +State or Province Name (full name) [Some-State]:<​fc #​008000>​BY</​fc>​ 
 +Locality Name (eg, city) []:<fc #​008000>​Wolnzach</​fc>​ 
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:<fc #​008000>​Prontosystems.org</​fc>​ 
 +Organizational Unit Name (eg, section) []:<fc #​008000>​CA</​fc>​ 
 +Common Name (e.g. server FQDN or YOUR name) []:<fc #​008000>​prontotsystems.org</​fc>​ 
 +Email Address []:<fc #​008000>​camaster@prontosystems.org</​fc>​ 
 + 
 +Please enter the following '​extra'​ attributes 
 +to be sent with your certificate request 
 +A challenge password []: 
 +An optional company name []: 
 +Using configuration from /​usr/​lib/​ssl/​openssl.cnf 
 +Enter pass phrase for ./​demoCA/​private/​cakey.pem:​ 
 +Check that the request matches the signature 
 +Signature ok 
 +Certificate Details: 
 +        Serial Number: 12518091987949220495 (0xadb93256df60728f) 
 +        Validity 
 +            Not Before: Jun  3 20:30:29 2014 GMT 
 +            Not After : Jun  2 20:30:29 2017 GMT 
 +        Subject: 
 +            countryName ​              = DE 
 +            stateOrProvinceName ​      = BY 
 +            organizationName ​         = Prontosystems.org 
 +            organizationalUnitName ​   = CA 
 +            commonName ​               = prontotsystems.org 
 +            emailAddress ​             = camaster@prontosystems.org 
 +        X509v3 extensions:​ 
 +            X509v3 Subject Key Identifier:  
 +                1C:​AE:​23:​F5:​0A:​3B:​20:​D1:​CC:​11:​D3:​82:​4C:​66:​3D:​31:​2E:​7F:​B0:​3A 
 +            X509v3 Authority Key Identifier:  
 +                keyid:​1C:​AE:​23:​F5:​0A:​3B:​20:​D1:​CC:​11:​D3:​82:​4C:​66:​3D:​31:​2E:​7F:​B0:​3A 
 + 
 +            X509v3 Basic Constraints:​  
 +                CA:TRUE 
 +Certificate is to be certified until Jun  2 20:30:29 2017 GMT (1095 days) 
 + 
 +Write out database with 1 new entries 
 +Data Base Updated</​xterm>​ 
 + 
 +Das war es eigentlich schon auch, Sie finden nun ein Verzeichnis >><​fc #​008000>​demoCA</​fc><<​ in dem Verzeichnis wo Sie das Kommando <fc #​008000>/​usr/​lib/​ssl/​misc/​CA.pl -newca</​fc>​ ausgeführt haben: 
 + 
 +<​xterm>#​ <fc #​008000>​tree demoCA/</​fc>​ 
 +demoCA/ 
 +├── cacert.pem 
 +├── careq.pem 
 +├── certs 
 +├── crl 
 +├── crlnumber 
 +├── index.txt 
 +├── index.txt.attr 
 +├── index.txt.old 
 +├── newcerts 
 +│   └── ADB93256DF60728F.pem 
 +├── private 
 +│   └── cakey.pem 
 +└── serial 
 + 
 +4 directories,​ 9 files</​xterm>​ 
 + 
 +//''​It'​s just that simple''//​ 
 + 
 +==== Zertifikatsanforderung erstellen ==== 
 + 
 +Um Zertifikate auszustellen benötigt man eine >><​fc #​008000>​Zertifikatsanforderung</​fc><<​ bzw. einen >><​fc #​008000>​Certificate Request</​fc><<​. Darin verschlüsselt der Antragsteller diverse Information wie Land, Stadt, Provinz, Admin und vor allem den >><​fc #​008000>​Common Name</​fc><<​ des Hosts welcher SSL anbieten soll. IdR ist das der >><​fc #​008000>​Full Qualified Domain Name</​fc><<​ oder kurz >><​fc #​008000>​FQDN</​fc><<,​ zB: >><​fc #​008000><​nowiki>​www.example.com</​nowiki></​fc><<​. IdR wird dieser CertRequest vom Serveradministrator des zu verschlüsselnden Hosts ausgefüllt. Führen Sie das folgende Kommando (idR) auf dem Server aus auf dem die zu verschlüsselnde Seite gehostet wird. Hier im Beispiel heißt der Host >><​fc #​008000><​nowiki>​www.example.com</​nowiki></​fc><<​. Dieser Name muss __exakt__ dem Namen des Server FQDN entsprechen. : 
 + 
 +<​xterm>#​ <fc #​008000>​openssl req -new -nodes -keyout example.key -out example.csr -newkey rsa:​2048</​fc>​ 
 +Generating a 2048 bit RSA private key 
 +..............................+++ 
 +......................................................................+++ 
 +writing new private key to '​example.key'​ 
 +----- snip ----- 
 +Country Name (2 letter code) [AU]:<fc #​008000>​DE</​fc>​ 
 +State or Province Name (full name) [Some-State]:<​fc #​008000>​BY</​fc>​ 
 +Locality Name (eg, city) []:<fc #​008000>​Wolnzach</​fc>​ 
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:<fc #​008000>​WWW</​fc>​ 
 +Organizational Unit Name (eg, section) []:<fc #​008000>​Public</​fc>​ 
 +Common Name (e.g. server FQDN or YOUR name) []:>><​fc #​008000><​nowiki>​www.example.com</​nowiki></​fc><<​ 
 +Email Address []:<fc #​008000>​contact@example.de</​fc>​ 
 + 
 +Please enter the following '​extra'​ attributes 
 +to be sent with your certificate request 
 +A challenge password []: 
 +An optional company name []:</​xterm>​ 
 + 
 + ​**Note:​** Sie können dieses Kommando auch auf jedem beliebigen Client System oder gar auf dem Server der die >><​fc #​008000>​CA</​fc><<​ hostet ausführen, Sie müssen lediglich dafür Sorge tragen, dass der private Schlüssel >><​fc #​008000>​example.key</​fc><<​ auf dem richtigen Server und in den richtigen Händen gelangt. Geraten private Schlüssel in falsche Hände ist die Identität quasi gestohlen. 
 + 
 +<note important>​**Note:​** Wenn Sie bei der Zertifikatsanforderung ein >><​fc #​008000>​Challenge Password</​fc><<​ vergeben müssen Sie dieses bei jedem Start des Webservers erneut eingeben. Verzichten Sie wenn möglich darauf, ansonsten kann es nach einer Systemstörung sein, dass Ihr Webangebot solange nicht mehr erreichbar ist, bis Sie das >><​fc #​008000>​Challenge Password</​fc><<​ wieder eingeben. Viel Vergnügen auf Ihrer Atlantiküberquerung... ;​-)</​note>​ 
 + 
 +Sie finden dann im Verzeichnis wo Sie das og Kommando ausgeführt haben die Dateien >><​fc #​008000>​example.key</​fc><<​ was Ihren privaten Schlüssel repräsentiert und die Datei >><​fc #​008000>​example.csr</​fc><<​ in welcher die Zertifikatsanforderung verschlüsselt wurde. Senden Sie nun dem >><​fc #​008000>​CA-Administrator</​fc><<​ die Datei mit der Zertifikatsanforderung... 
 + 
 +...und warten Sie geduldig, bis dieser Ihnen Ihr Zertifikat zukommen lässt. 
 + 
 +==== Zertifikat ausstellen und signieren ==== 
 + 
 +Der >><​fc #​008000>​CA-Administrator</​fc><<​ hat nun von Ihnen Ihre in der Datei >><​fc #​008000>​example.csr</​fc><<​ verpackte Zertifikatsanforderung erhalten. Mit dem folgenden Kommando wird nun die Zertifikatsanforderung verarbeitet und ein signiertes Zertifikat >><​fc #​008000>​example.cert</​fc><<​ erstellt. : 
 + 
 +<​xterm>#​ <fc #​008000>​openssl ca -config /​etc/​ssl/​openssl.cnf -policy policy_anything -out example.cert -infiles example.csr</​fc>​  
 +Using configuration from /​etc/​ssl/​openssl.cnf 
 +Enter pass phrase for ./​demoCA/​private/​cakey.pem:​ 
 +Check that the request matches the signature 
 +Signature ok 
 +Certificate Details: 
 +        Serial Number: 12518091987949220496 (0xadb93256df607290) 
 +        Validity 
 +            Not Before: Jun  3 21:44:33 2014 GMT 
 +            Not After : May 31 21:44:33 2024 GMT 
 +        Subject: 
 +            countryName ​              = DE 
 +            stateOrProvinceName ​      = BY 
 +            localityName ​             = Wolnzach 
 +            organizationName ​         = WWW 
 +            organizationalUnitName ​   = Public 
 +            commonName ​               = >><​fc #​008000><​nowiki>​www.example.com</​nowiki></​fc><<​ 
 +            emailAddress ​             = contact@example.de 
 +        X509v3 extensions:​ 
 +            X509v3 Basic Constraints:​  
 +                CA:FALSE 
 +            Netscape Comment:  
 +                OpenSSL Generated Certificate 
 +            X509v3 Subject Key Identifier:  
 +                FC:​DA:​FD:​8D:​87:​2B:​70:​DF:​56:​02:​8F:​3F:​B4:​D0:​35:​FA:​47:​51:​D6:​68 
 +            X509v3 Authority Key Identifier:  
 +                keyid:​1C:​AE:​23:​F5:​0A:​3B:​20:​D1:​CC:​11:​D3:​82:​4C:​66:​3D:​31:​2E:​7F:​B0:​3A 
 + 
 +Certificate is to be certified until May 31 21:44:33 2024 GMT (3650 days) 
 +Sign the certificate?​ [y/​n]:​**<​fc #​008000>​y</​fc>​** 
 + 
 + 
 +1 out of 1 certificate requests certified, commit? [y/​n]**<​fc #​008000>​y</​fc>​** 
 +Write out database with 1 new entries 
 +Data Base Updated</​xterm>​ 
 + 
 +Beachten Sie bitte die beiden Rückfragen >><​fc #​008000>​Sign the certificate?​ [y/​n]</​fc><<​ und >><​fc #​008000>​1 out of 1 certificate requests certified, commit? [y/​n]</​fc><<​ mit einem >><​fc #​008000>​y</​fc><<​ zu beantworten.  
 + 
 +Das ausgestellte und signierte Zertifikat >><​fc #​008000>​example.cert</​fc><<​ kann nun dem Antragsteller zurückgesendet werden. 
 + 
 +**Verwandte Artikel:​** 
 +[[:​it:​ssl|SSL -> So funktioniert es]] 
 +[[:​tux:​apache_vhost|Virtuelle Hosts auf Apache2 Webserver einrichten]] 
 + 
 + --- //pronto 2014/06/05 09:26// 
 +{{keywords>​openssl certification authority certificate request public private key sign}} 
 + 
 + 
 + 
tux/root_ca.1401884307.txt.gz (20199 views) · Zuletzt geändert: 2014/06/04 14:18 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0