Howto self-signed SSL Certificate
von griesgram am Mrz.16, 2009, unter Allgemein, Howto, Linux, Security, Websecurity
Wer kennt es nicht, man möchte gerne seinen Mail-, Web- oder FTP Server absichern mit SSL oder TLS, weiss aber nicht wie er die Zertifikate erstellen soll. Durch das benutzen von SSL wird die Kommunikation zwischen Client und Server verschlüsselt. Dadurch werden alle Daten, wie zum Beispiel Passwörter, Emails, Inhalte von Webseiten verschlüsselt übertragen. Der Vorteil von selbst signierten Zertifikaten gegenüber gekauften ist ganz einfach, sie kosten NICHTS! Um dies zu bewerkstelligen, benötigt man Openssl und in unserem Fall eine Linux Machine. In diesem Howto wird ein Debian Lenny 64Bit benutzt. Geht aber genau so mit anderen Distribution und Debian Versionen. Theoretisch würde es auch mit Windows funktionieren - wird hier aber nicht näher behandelt.
Das Ziel dieses Howto ist es, das man am Schluss eine Zertifizierungsstelle (Root CA) besitzt mit der man beliebig viele selbst signierte Zertifikate erstellen kann.
Voraussetzungen
- OpenSSL
- Linux System (In diesem Howto benutzt: Debian Lenny 64Bit)
Openssl installieren
Damit wir überhaupt SSL Zertifikate erstellen können, müssen wir OpenSSL installieren. Installiert OpenSSL mit folgendem Befehl:
aptitude install opensslbenötigte Dateien und Ordner erstellen
Als erstes müssen wir eine Zertifizierungsstelle (Root CA) erstellen. Diese wird benötigt damit wir unsere Zertifikate mit uns selber signieren können. Nur so haben wir gültige Zertifikate.
Erstellt die folgenden Ordner und Dateien in eurem home Verzeichnis.
cd /home/username
mkdir CA
cd CA
mkdir newcerts private
Das CA Verzeichnis hat folgenden Inhalt:
- CA Zertifikat
- Die Datenbank mit den signierten Zertifikaten
- Die Schlüssel, Requests und Zertifikate die wir generieren
Es ist zudem unser Arbeitsverzeichnis wen wir Zertifikate erstellen und signieren.
Das CA/newcerts Verzeichnis beinhaltet:
- Eine Kopie von jedem signierten Zertifikat
Das CA/private Verzeichnis beinhaltet:
- Unseren Privaten und geheimen CA Schlüssel
Dieser Schlüssel ist sehr wichtig! Ohne diesen Schlüssel kann man keine Zertifikate signieren oder erneuern! Verliert ihn also auf keinen Fall! Zudem passt auf das dieser Schlüssel nur durch Root gelesen werden kann und nicht in falsche Hände kommt! Ansonsten könnt ihr alle Zertifikate zurückziehen und von Vorne anfangen.
Beim nächsten Schritt erstellen wir 2 Dateien die zum signieren der Zertifikate benötigt werden:
echo '01' >serial
touch index.txt Konfigurationsdatei "openssl.cnf" erstellen
Erstellt eine neue Konfigurationsdatei "openssl.cnf".
vim /home/username/CA/openssl.cnfmit folgendem Inhalt:
#
# OpenSSL configuration file.
#
# Establish working directory.
dir = .Root CA Zertifikat erstellen
Jetzt können wir mit dem erstellen des Root CA Zertifikats beginnen. Aber zuerst noch ein paar Details zur Konfiguration.
Die Konfigurationsdatei ist dazu da, das man nicht so viele Parameter in der Kommandozeile eingeben muss. Zudem ist die Konfigurationsdatei in Sektionen aufgeteilt, sie werden je nach Angabe von Kommandozeilen Argumenten, gelesen und verarbeitet. Ein Name in "Eckigen Klammern", z.B "[ req ]", zeigt das eine Sektion beginnt.
Wir benötigen nun eine Sektion zum überprüfen der Zertifikate und eine Sektion welche definiert was für ein Typ Zertifikat wir erstellen möchten.
Füge folgendes zu der neuen "openssl.cnf" hinzu:
[ req ]
default_bits = 1024 # Size of keys
default_keyfile = key.pem # name of generated keys
default_md = md5 # message digest algorithm
string_mask = nombstr # permitted characters
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
# Variable name Prompt string
#---------------------- ----------------------------------
0.organizationName = Organization Name (company)
organizationalUnitName = Organizational Unit Name (department, division)
emailAddress = Email Address
emailAddress_max = 40
localityName = Locality Name (city, district)
stateOrProvinceName = State or Province Name (full name)
countryName = Country Name (2 letter code)
countryName_min = 2
countryName_max = 2
commonName = Common Name (hostname, IP, or your name)
commonName_max = 64
# Default values for the above, for consistency and less typing.
# Variable name Value
#------------------------------ ------------------------------
0.organizationName_default = The Sample Company
localityName_default = Basel
stateOrProvinceName_default = Basel-Stadt
countryName_default = CH
[ v3_ca ]
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:alwaysUm sicher zustellen das unser CA Zertifikat geschützt ist gegen unbefugte Nutzung, ist das Zertifikat Passwort geschützt. Jedesmal wen man ein Zertifikat mit dem CA Zertifikat von uns Signieren möchte, muss man ein Passwort eingeben.
Jetzt können wir unser selbstsigniertes Root Zertifikat erstellen.
Benutzte Kommandzeilen Optionen
- Ein neues Selbst-signiertes Zertifikat erstellen: -new -x509
- Ein CA Zertifikat erstellen: -extensions v3_ca
- Gültigkeit: -days 3650
- Ausgabe in spezifizierte Datei: -keyout, -out
- Eigene Konfigurationsdatei benutzen: -config ./openssl.cnf
(Ein Hinweis in Bezug der gültigkeit des Root Zertifikates: Wen ein Root Zertifikat abgelaufen ist, sind alle Zertifikate, welche mit dem Root Zertifikat signiert sind, nicht mehr gültig! Deshalb ist unser Root Zertifikat 10 Jahre gültig.)
Führt folgenden Befehl aus. Ihr werdet nach einem neuen Passwort gefragt, welches ihr 2 mal angeben müsst. Merkt euch das Passwort! Den es wird benötigt, um eure Zertifikate zu signieren.
openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem \
-out cacert.pem -days 3650 -config ./openssl.cnfAusgabe:Using configuration from ./openssl.cnf
Generating a 1024 bit RSA private key
.......++++++
..........................++++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:demo
Verifying password - Enter PEM pass phrase:demo
-----
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.
-----
Organization Name (company) [Meine Firma]:
Organizational Unit Name (department, division) []:CA Division
Email Address []:ca@sample.com
Locality Name (city, district) [Basel]:
State or Province Name (full name) [Basel-Stadt]:
Country Name (2 letter code) [CH]:
Common Name (hostname, IP, or your name) []:Mein Root CADies erstellt 2 Dateien:- Ein Privater Schlüssel in "private/cakey.pem"
- Ein Root CA Zertifikat in "cacert.pem"
cacert.pem ist die Datei welche man den Clients verteilt, damit sie das Root CA Zertifikat manuell importieren können. Weiter unten gibt es noch eine Methode, wie man das CA Zertifikat als Datei mit der Dateiendung ".crt", als Download Link anbieten kann. Dazu aber später mehr.
Der Privat Key (cakey.pem) sieht so aus:
cat /home/username/CA/private/cakey.pem-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,3A1E24518648628
jlQvt9WdR9Vpg3WQT5+C3HU17bUOwvhp/r0+viMcBUCRW85UqI2BJJKTi1IwQQ4c
tyTrhYJYOP+A6JXt5BzDzZy/B7tjEMDBosPiwH2m4MaP+6wTbi1qR1pFDL3fXYDr
QAPXhxpC7ftxMiKbdf2RTmgo/2JgU4AF1p45cIISJerf42g+GK36XA1paeVIgEUO
qZb3mC6U2nRaP/NpZPcEx4lv2vH7OzHTu1TZ7t0asSpgpuH58dfHPw775kZDep2F
LXA3Oeavg0TLFHkaFBU3fzreEG6Txpt9I74aAsw1T6UbTSjqgtsK0PHdjPNfPGlY
5U3Do1pnU9hfoem/4RAOe0cCovP/xf6YPBraSFPs4XFfnWwgEtL09ReFqO9T0aSp
5ajLyBOYOBKQ3PCSu1HQDw/OzphInhKxdYg81WBBEfELzSdMFQZgmfGrt5DyyWmq
ITzTQcxXiAzkydqwnMKIAp1W2atwXDv7fZIthzQ+XkyVz0HlAM7M2uKS8Ug/FjUt
0FMHTEB5HQebEkKBoRQMCJN/uyKXTLjNB7ibtVbZmfjsi9oNd3NJNVQQH+o9I/rP
wtFsjs+t7SKrsFB2cxZQdDlFzD6EBA+5ytebGEI1lJHcOUEa6P+LTphlwh/o1QuN
IKX2YKHA4ePrBzdgZ+xZuSLn/Qtjg/eZv6i73VXoHk8EdxfOk5xkJ+DnsNmyx0vq
zOITGqvZGFSZ0pbX58S9Hc9siHi+SD3943845jrMMpuxEe7YpXX2GsZzRgt2TQ63cS0
X1OZ9Dix+U0u6xXff0ETJ5dF3hV6GF7hP3Tmj9/UQdBwBzr+D8YWzQ==
-----END RSA PRIVATE KEY-----Natürlich wollen wir den cakey.pem niemandem zeigen. Dieser CA Key ist nun nicht mehr zu gebrauchen.
Das Zertifikat (cacert.pem) sieht so aus:
-----BEGIN CERTIFICATE-----
MIIDrTCCAxagAwIBAgIBADANBgkqhkiG9w0BAQQFADCBnDEbMBkGA1UEChMSVGhl
IFNhbXBsZSBDb21wYW55MRQwEgYDVQQLEwtDQSBEaXZpc2lvbjEcMBoGCSqGSIb3
DQEJARYNY2FAc2FtcGxlLmNvbTETMBEGA1UEBxMKTWV0cm9wb2xpczERMA8GA1UE
CBMITmV3IFlvcmsxCzAJBgNVBAYTAlVTMRQwEgYDVQQDEwtUU0MgUm9vdCBDQTAe
Fw0wMTEyMDgwNDI3MDVaFw0wMjEyMDgwNDI3MDVaMIGcMRswGQYDVQQKExJUaGUg
U2FtcGxlIENvbXBhbnkxFDASBgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcN
AQkBFg1jYUBzYW1wbGUuY29tMRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQI
EwhOZXcgWW9yazELMAkGA1UEBhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBMIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaiAwfKB6ZBtnTRTIo6ddomt0S9ec0
NcuvtJogt0s9dXpHowh98FCDjnLtCi8du6LDTZluhlOtTFARPlV/LVnpsbyMCXMs
G2qpdjJop+XIBdvoCz2HpGXjUmym8WLqt+coWwJqUSwiEba74JG93v7TU+Xcvc00
5MWnxmKZzD/R3QIDAQABo4H8MIH5MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFG/v
yytrBtEquMX2dreysix/MlPMMIHJBgNVHSMEgcEwgb6AFG/vyytrBtEquMX2drey
six/MlPMoYGipIGfMIGcMRswGQYDVQQKExJUaGUgU2FtcGxlIENvbXBhbnkxFDAS
BgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcNAQkBFg1jYUBzYW1wbGUuY29t
MRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQIEwhOZXcgWW9yazELMAkGA1UE
BhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBggEAMA0GCSqGSIb3DQEBBAUAA4GB
ABclymJfsPOUazNQO8aIaxwVbXWS+8AFEkMMRx6O68ICAMubQBvs8Buz3ALXhqYe
FS5G13pW2ZnAlSdTkSTKkE5wGZ1RYSfyiEKXb+uOKhDN9LnajDzaMPkNDU2NDXDz
SqHk9ZiE1boQaMzjNLu+KabTLpmL9uXvFA/i+gdenFHv
-----END CERTIFICATE-----Um einzelne Ausschnitte aus dem Zertifkat anzusehen, kann man das mit folgenden Befehlen tun:
openssl x509 -in cacert.pem -noout -text oder openssl x509 -in cacert.pem -noout -dates oder openssl x509 -in cacert.pem -noout -purposeServer Zertifikat erstellen
Da wir jetzt ein Root Zertifikat haben, können wir beginnen mit dem erstellen des SSL Server Zertifikats für unsere SSL Applikationen, wie z.B https, spop, simap oder stunnel. Der Ablauf ist so, zuerst erstellen wir ein Privaten Schlüssel und ein Zertifikat Request, diese Signieren wir mit dem Root Zertifikat, dadurch erhalten wir ein gültiges Zertifikat.
Unsere "openssl.cnf" benötigt jetzt ein paar weitere Sektionen um Nicht-CA Zertifikate erstellen zu können.
Füge folgendes ans Ende der Datei:
[ v3_req ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hashUm zu verhindern das wir jedesmal das gleiche wiederholen müssen auf der Kommandozeile, füge folgendes in die "[ req ]" Sektion nach "distinguished_name":
distinguished_name = req_distinguished_name
req_extensions = v3_reqJetzt sind wir bereit um unser erster Zertifikats Request zu erstellen. In diesem Beispiel, erstellen wir ein Zertifikat für einen Sicheren Webserver mit der Domain secure.yourdomain.de. Alles sieht ziemlich ähnlich aus wie beim Root CA Zertifikat, abgesehen von 3 Eingaben welche sich ändern im Zertifikats Request.
- Organizational Unit: ein Hinweis für was das Zertifikat ist
- Email Address: die Email Addresse des Webserver Administrators
- Common Name: Hostname/Domainname für welches das Zertifikat giltet. Zwingend notwendig!
Der Common Name muss zwingend gleich sein wie der Server Name oder Domain Name, mit welchem die Clients auf die Sichere Website zugreifen möchten. Wen dieser Name nicht zusammen passt, bekommen alle Clients die sich mit der SSL geschützen Webseite verbinden möchten, eine Warnung! Die Warnung weisst euch darauf hin, ob ihr diesem Server vertraut und trotzdem nutzen möchten! Die Fehlermeldung die beim Client erscheint: "Warning! You asked for mail.sample.com; the responding machine's certificate is for secure.yourdomain.de. Are you sure you want to continue?"
Es ist auch möglich ein sogenanntes Wildcard Zertifikat zu erstellen für alle Subdomains einer Domain. Zum Beispiel "*.yourdomain.de", somit sind alle Subdomains gültig für diese Domain. Dies wird jedoch in der Regel eher in Reverse Proxy Lösungen benötigt.
Zertifikat Request erstellen (CSR - Certificate Signing Request)
openssl req -new -nodes -out req.pem -config ./openssl.cnf
...
Organizational Unit Name (department, division) []:Secure Webserver
Email Address []:webmaster@yourdomain.de
Common Name (hostname, IP, or your name) []:secure.yourdomain.de
...Dies erstellt 2 Dateien:- Ein privater Schlüssel in key.pem
- Ein Zertifikats signier Request in req.pem
Diese Dateien sollten aufbewahrt werden. Wen das zu erstellenden Zertifkat mal abläuft, kann der Request benutzt werden, um erneut ein Zertifikat zu erstellen.
Der Private Schlüssel ist natürlich wichtig für die SSL Verschlüsselung. Wen man die Dateien irgendwo abspeichert, ist es wichtig das man Dateinamen verwendet, durch die man erkennen kann, für was das Zertifikat erstellt wurde; als Beispiel, secure.yourdomain.de.key.pem und secure.yourdomain.de.req.pem.
Der Zertifikats Request sieht so aus:
-----BEGIN CERTIFICATE REQUEST-----
MIICJDCCAY0CAQAwgagxGzAZBgNVBAoTElRoZSBTYW1wbGUgQ29tcGFueTEUMBIG
A1UECxMLTWFpbCBTZXJ2ZXIxJDAiBgkqhkiG9w0BCQEWFXBvc3RtYXN0ZXJAc2Ft
cGxlLmNvbTETMBEGA1UEBxMKTWV0cm9wb2xpczERMA8GA1UECBMITmV3IFlvcmsx
CzAJBgNVBAYTAlVTMRgwFgYDVQQDEw9tYWlsLnNhbXBsZS5jb20wgZ8wDQYJKoZI
hvcNAQEBBQADgY0AMIGJAoGBAPJhc++WxcBaoDbJpzFbDg42NcOz/ELVFMU4FlPa
yUzUO+xXkdFRMPKo54d4Pf1w575Jhlu9lE+kJ8QN2st6JFySbc9QjPwVwl9D2+I3
SSf2kVTu+2Ur5izCPbVAfU0rPZxxK8ELoOkA1uwwjFz6EFuVvnHwlguonWKDtmYW
u7KTAgMBAAGgOzA5BgkqhkiG9w0BCQ4xLDAqMAkGA1UdEwQCMAAwHQYDVR0OBBYE
FLWaQsUVIQzWr58HtDinH1JfeCheMA0GCSqGSIb3DQEBBAUAA4GBAAbe0jrGEQ3i
tyVfy5Lg4/f69rKvDGs+uhZJ9ZRx7Dl92Qq2osE7XrLB1bANmcoEv/ORLZOjWZEY
NjMvuz60O7R8GKBrvb/YhAwWhIIt2LJqPkpAEWS0kY0AkoQcfZ7h6oC35+eJ7okg
Uu3WuE57RgcNt7/ftr0sG1jUyRwMLvhv
-----END CERTIFICATE REQUEST-----Wir können den Inhalt überprüfen um sicher zu sein, dass unser Request Inhaltlich stimmt bevor wir ihn signieren:
openssl req -in req.pem -text -verify -nooutZertifikat signieren
Jetzt müssen wir noch eine Konfigurations Sektion hinzufügen, damit wir eine Zertifizierungsstelle sind. Ansonsten können wir den Zertifikats Request nicht signieren. Diese Sektion beinhaltet die Pfade zu den verschiedenen Dateien, wie z.B die Datenbank, das Root CA Zertifikat, der Private Schlüssel usw. Es beinhaltet zudem ein paar Standard Werte.
Kopiere den folgenden Inhalt vor die "[ req ]" Sektion in der "openssl.cnf":
[ ca ]
default_ca = CA_default
[ CA_default ]
serial = $dir/serial
database = $dir/index.txt
new_certs_dir = $dir/newcerts
certificate = $dir/cacert.pem
private_key = $dir/private/cakey.pem
default_days = 365
default_md = md5
preserve = no
email_in_dn = no
nameopt = default_ca
certopt = default_ca
policy = policy_match
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optionalUm den Request zu signieren, führe den folgenden Befehl aus und beantworte die Ausgaben. Achtung: Das abgefragte Passwort ist das Root CA Passwort, welches wir weiter oben eingegeben haben:
openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pemUsing configuration from ./openssl.cnf
Enter PEM pass phrase:demo
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
organizationName
RINTABLE:'The Sample Company'
organizationalUnitName:PRINTABLE:'Secure Webserver'
emailAddress :IA5STRING:'webmaster@yourdomain.de'
localityName
RINTABLE:'Basel'
stateOrProvinceName
RINTABLE:'Basel-Stadt'
countryName
RINTABLE:'CH'
commonName
RINTABLE:'secure.yourdomain.de'
Certificate is to be certified until Dec 8 04:37:38 2002 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base UpdatedDies upatet die CA Datenbank und erstellt 2 Dateien:
- Ein Zertifikat in cert.pem
- Eine Kopie des Zertifikates in newcerts/
.pem
Wir können das Zertifikat wieder anzeigen um den Inhalt zu überprüfen:
openssl x509 -in cert.pem -noout -text -purpose | moreWie man erkennen kann, enthält das Zertifikat beides, die encodierte Version und die für menschen lesbare Version in der gleichen Datei. Wir können den menschen lesbaren Teil wie folgt heraus löschen.
mv cert.pem tmp.pem
openssl x509 -in tmp.pem -out cert.pemZertifikat und Key Installieren
Dies hängt von der Applikation ab, für die man das Zertifikat erstellt hat. Einige Applikationen möchten den Schlüssel und das Zertifikat in der gleichen Datei, während andere Applikationen lieber separate Dateien benutzt für den Schlüssel und das Zertifikat. Um den Schlüssel mit dem Zertifikat zu vereinen, kann man diesen Befehl nutzen:
cat key.pem cert.pem >key-cert.pemNach diesem Schritt haben wir 3 installierbare Komponenten:
- Ein Privater Schlüssel in key.pem
- Ein Zertifikat in cert.pem
- Ein kombinierter Privater Schlüssel und ein Zertifikat in key-cert.pem
Diese Dateien müssen je nach Applikation in andere Verzeichnisse kopiert werden und üblicherweise in der Konfiguration angegeben werden. Ich werde hier nicht weiter auf die einzelnen Applikationen eingehen.
Root CA Zertifikat verteilen
Wir verteilen das Root CA Zertifikat um zu verhindern, dass die Clients eine Warnung erhalten, dass dieses Zertifikat nicht vertrauenswürdig sei. Dies kann man entweder an die Benutzer der sicheren Website geschickt werden via Email, damit sie das Root CA installieren können. Dadurch verschwindet die Warnmeldung.
Zertifikat erneuern
Es gibt zwei Möglichkeiten, warum ihr Zertifikat erneuert werden muss:
- Das signierte Zertifikat ist abgelaufen.
- Das Root Zertifikat mit dem das Zertifikat signiert wurde ist abgelaufen.
Zertifikat wiederrufen
Das Zertifikat muss zuerst wiederrufen werden, ansonsten kann man nicht ein Zertifikat mit dem gleichen "Common Name" erneut ausstellen. Das Zertifikat findet ihr im "newcerts" Verzeichnis; Der Dateiname kann man herausfinden in dem man in der "index.txt" nach dem "Common Name (CN)" sucht. Der Dateiname ist der Index plus die Dateiendung ".pem", als Beispiel "02.pem".
Um das Zertifikat zurückzuziehen benutzt den folgenden Befehl:
openssl ca -revoke newcerts/02.pem -config ./openssl.cnfAusgabe:Using configuration from ./openssl.cnf
Enter PEM pass phrase: demo
Revoking Certificate 02.
Data Base UpdatedNun ist das Zertifikat zurückgezogen und wir können beginnen mit dem neusignieren des Original Request (CSR), denn wir weiter oben erstellt haben. Ihr könnt auch einfach ein neuen Request erstellen und diesen wie oben beschrieben signieren.
Kommerziell signiertes Zertifikat erstellen
Der Ablauf ist im Prinzip der gleiche wie oben beschrieben, ausser das wir nicht selber das Kommerzielle Zertifikat signieren. Wir benötigen dazu auch eine Zertifikats Anfrage (CSR), diesen Zertifikats Anfrage müssen wir der Zertifizierungsstelle übermitteln (VeriSign, RapidSSL, cacert.org usw.) Nach dem übermitteln des Zertifikat Requests, erhält man das signierte Zertifikat wieder und kann es wie gewohnt installieren. Bei gewissen SSL Zertifizierungsstelle kann man den CSR in ein Textfeld auf ihrer Website kopieren und erhält direkt das signierte Zertifikat. Ist einfach eine Kostenfrage, wobei anzumerken ist, das CACert.org kostenlos Zertifikate signiert. Leider ist CACert.org noch nicht in allen Mainstream Browsern verfügbar und muss wie das selbst signierte Root CA Zertifikat importiert werden.
Die Kostenpflichtigen Zertifizierungsstellen sind in den Mainstream Browsern vorhanden, dadurch sind die signierten Zertifkate direkt als Vertrauenswürdig eingestuft ohne das der Client noch was importieren muss. Der Nachteil ist, es kostet Geld und dies unter umständen nicht gerade wenig!
CA Zertifikat als Download anbieten
Eine Möglichkeit um sein Root Zertifikat zur Verfügung zu stellen, ist man bietet es zum Download an. Wen man dies machen möchte, sollte man beachten das man auch eine Zertifikats Annulierungsliste (Certificat Revocation List - CRL) zum Download anbietet sollte
.Wer Apache2 nutzt muss das Zertifikat als Datei mit der Dateiendung .crt anbieten oder die "mime.types" entsprechend anpassen, letzeres würde ich jedoch nicht empfehlen.
Wie ich weiter oben bereits erwähnt habe kann man das Zertifikat als Downloadlink anbieten. Läd ein Client das Zertifikat herunter, offeriert der Browser dem Benutzer die Installation des Zertifikates für ihn zu übernehmen.
cp cacert.pem /srv/htdocs/yourDomain/secure/downloads/MeinRootCA.crt
chown www.www /srv/htdocs/yourDomain/secure/downloads/MeinRootCA.crtJetzt kann man die Datei direkt mit seinem Browser installieren.http://secure.yourdomain.de/MeinRootCA.crtZertifikats Annulierungsliste (Certificat Revocation List - CRL) erstellen
Die Annulierungsliste kann man wie folgt generieren:
openssl ca -gencrl -crldays 31 -config ./openssl.cnf -out rootca.crlDie Zertifikate kann man nun für jede beliebige SSL-Fähigen Applikation nutzen, solange der Hostname oder Domainname überreinstimmt! Das wäre eigentlich alles, hoffe dies erspart einigen den Ärger mit dem Erstellen der gültigen Zertifikate.
Englische Original Howto kann man hier lesen: zum Howto
Researched and written by Marcus Redivo - translated in german by Dr. Epileptik
Permission to use this document for any purpose is hereby granted, providing that the copyright information and this disclaimer is retained. Author accepts no responsibility for any consequences arising from the use of this information.
Das könnte dich auch interessieren:
7 Comments for this entry
2 Trackbacks / Pingbacks for this entry
- HowtoForge
März 17th, 2009 on 18:48Howto selbstsigniertes SSL Zertifikat erstellen...
Wer kennt es nicht, man möchte gerne seinen Mailserver oder Webserver absichern mit SSL, weiss aber nicht wie er die SSL Zertifikate erstellen soll. Durch das benutzen von SSL wird die Kommunikation zwischen Client und Server verschlüsselt. Dadurch w...
- Debian: Zertifikate erstellen | Von Und Zu
April 14th, 2009 on 09:09[...] hack2lern, welcher m.E. die Webseite Creating and Using a self signed SSL Certificates in debian übersetzt hat. Share this post Hide Bookmarks Tags » Debian, openssl, zertifikate « Trackback: Trackback-URL | Feed zum Beitrag: RSS 2.0 Thema: Debian [...]



September 27th, 2009 on 10:37
Ich habe folgendes Problem bein signieren des Certifakats:
debian-server:/home/ichalsbenutze/CA# openssl ca -out cert.pem -config ./openssl.cnf -infiles req.pem Using configuration from ./openssl.cnf
RINTABLE:'Meinefirma'
RINTABLE:'Meinestadt'
RINTABLE:'Baden-Wuerttemberg'
RINTABLE:'de'
RINTABLE:'meine.dyndns.org'
Using configuration from ./openssl.cnf
Enter pass phrase for ./private/cakey.pem:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
organizationName
organizationalUnitName:PRINTABLE:'Websites'
localityName
stateOrProvinceName
countryName
commonName
Certificate is to be certified until Sep 25 10:12:20 2019 GMT (3650 days)
Sign the certificate? [y/n]:y
Using: No such file or directory
10703:error:02001002:system library:fopen:No such file or directory:bss_file.c:352:fopen('Using','r')
10703:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:354:
September 27th, 2009 on 11:05
Hy,
Es scheint als würde das System beim signieren des Serverzertifikats eine Datei nicht öffnen können. Überprüf mal ob im Verzeichnis /home/ichalsbenutze/CA/ die beiden Dateien "openssl.cnf" und "req.pem" liegen und auch vom Benutzer der den Befehl ausführt gelesen werden können.
gruss
September 27th, 2009 on 20:43
Hallo,
danke für die schnelle Antwort.
Es sind beide Dateien vorhanden und ich konnte bis zu diesen Punkt das Certifikat auch ansehen.
Der Benutzer dem die Dateien gehören ist root und von diesem Account aus ahbe ich auch die Befehle abgesetzt. Allerdings habe ich gesehen, dassdas Verzeichnis newcerts leer ist hat dies was zu bedeuten?
gruss
September 28th, 2009 on 07:59
Fang nochmal von vorne an und befolge genau das Howto, dann solltest du auch gültige Zertifkate haben die mit deinem Root CA signiert sind. In newcerts werden die Zertifkate mit Nummern abgelegt, erste Zertifikat das du erstellt hast, z.B 01.pem usw. Diese werden automatisch angelegt, sobald du ein Zertifkat signieren konntest.
Hoffe du schafst es.
September 29th, 2009 on 16:43
Ok ich versuchs nochmal.
Weiss aber nicht ob ich heute noch dazukomme.
DANKE
September 29th, 2009 on 16:45
Hallo muss ich wieder mit einer ganz leeren openssl.cnf anfangen?
September 29th, 2009 on 21:37
Hy,
Die openssl.cnf kannst du behalten, wenn du jedoch sicher sein willst, dass dort keine Fehler drin sind, würde ich sie neu erstellen. Wäre am besten.