Wie erstellt man ein für iOS 13 selbstsigniertes Zertifikat
Hallo,
mit Update auf iOS 13 funktioniert mein selbst signiertes Zertifikat nicht mehr. Die Anforderungen sind ja nochmal verschäft worden.
Anforderung iOS13:
Alle TLS-Serverzertifikate müssen in iOS 13 und macOS 10.15 die folgenden neuen Sicherheitsanforderungen erfüllen:
- TLS-Serverzertifikate und ausstellende Zertifizierungsstellen, die RSA-Schlüssel verwenden, müssen Schlüsselgrößen größer oder gleich 2048 Bit verwenden. Zertifikate mit RSA-Schlüsselgrößen kleiner als 2048 Bit werden für TLS nicht mehr als vertrauenswürdig angesehen.
- TLS-Serverzertifikate und ausstellende Zertifizierungsstellen müssen im Signaturalgorithmus einen Hash-Algorithmus aus der SHA-2-Familie verwenden. SHA-1-signierte Zertifikate sind für TLS nicht mehr vertrauenswürdig.
- TLS-Serverzertifikate müssen den DNS-Namen des Servers in der SAN-Erweiterung (Subject Alternative Name) des Zertifikats angeben. DNS-Namen im CommonName eines Zertifikats sind nicht mehr vertrauenswürdig.
Darüber hinaus müssen alle nach dem 1. Juli 2019 ausgestellten TLS-Serverzertifikate (wie im NotBefore-Feld des Zertifikats angegeben) den folgenden Richtlinien entsprechen:
- TLS-Serverzertifikate müssen eine ExtendedKeyUsage (EKU)-Erweiterung enthalten, die die "id-kp-serverAuth OID" enthält.
- TLS-Serverzertifikate müssen eine Gültigkeitsdauer von 825 Tagen oder weniger haben (wie in den Feldern "NotBefore" und "NotAfter" des Zertifikats angegeben).
Verbindungen zu TLS-Servern, die gegen diese neuen Anforderungen verstoßen, schlagen fehl und können Netzwerkausfälle und das Fehlschlagen von Apps verursachen. Außerdem ist es möglich, dass Websites in Safari in iOS 13 und macOS 10.15 nicht geladen werden.
Ich habe versucht mit openssl unter ubuntu 18.04 ein neues Zertifikat zu erstellen und anschliessend am iPhone zu installieren. Unter den Profilen wird mir auch angezeigt, dass es überprüft und signiert ist, allerdings wird beim Seitenaufruf in Safari dennoch eine Warnmeldung ausgegeben. In anderen Browserapps, wird es auch nicht akzeptiert. Ich denke ich muss noch die Anforderungen bezüglich DNS in SAN Erweiterung sowie id-kp-serverAuth OID in die Erzeugung einbauen. Nur wie, ich hab keine Anleitung gefunden.
Nachfolgend meine Schritte zur Erzeugung des Zertifikats:
Die erzeugte ca.crt habe ich dann am iPhone als Root Zertifikat installiert und unter Einstellungen - Allgemein - Info - Zertifikatsvertrauenseinstellungen aktiviert.
Als CommonName habe ich *.fritz.box angegeben.
Hat jemand einen Tipp, was das Problem ist bzw. welche Parameter noch fehlen, damit es den iOS Anforderungen genügt?
mit Update auf iOS 13 funktioniert mein selbst signiertes Zertifikat nicht mehr. Die Anforderungen sind ja nochmal verschäft worden.
Anforderung iOS13:
Alle TLS-Serverzertifikate müssen in iOS 13 und macOS 10.15 die folgenden neuen Sicherheitsanforderungen erfüllen:
- TLS-Serverzertifikate und ausstellende Zertifizierungsstellen, die RSA-Schlüssel verwenden, müssen Schlüsselgrößen größer oder gleich 2048 Bit verwenden. Zertifikate mit RSA-Schlüsselgrößen kleiner als 2048 Bit werden für TLS nicht mehr als vertrauenswürdig angesehen.
- TLS-Serverzertifikate und ausstellende Zertifizierungsstellen müssen im Signaturalgorithmus einen Hash-Algorithmus aus der SHA-2-Familie verwenden. SHA-1-signierte Zertifikate sind für TLS nicht mehr vertrauenswürdig.
- TLS-Serverzertifikate müssen den DNS-Namen des Servers in der SAN-Erweiterung (Subject Alternative Name) des Zertifikats angeben. DNS-Namen im CommonName eines Zertifikats sind nicht mehr vertrauenswürdig.
Darüber hinaus müssen alle nach dem 1. Juli 2019 ausgestellten TLS-Serverzertifikate (wie im NotBefore-Feld des Zertifikats angegeben) den folgenden Richtlinien entsprechen:
- TLS-Serverzertifikate müssen eine ExtendedKeyUsage (EKU)-Erweiterung enthalten, die die "id-kp-serverAuth OID" enthält.
- TLS-Serverzertifikate müssen eine Gültigkeitsdauer von 825 Tagen oder weniger haben (wie in den Feldern "NotBefore" und "NotAfter" des Zertifikats angegeben).
Verbindungen zu TLS-Servern, die gegen diese neuen Anforderungen verstoßen, schlagen fehl und können Netzwerkausfälle und das Fehlschlagen von Apps verursachen. Außerdem ist es möglich, dass Websites in Safari in iOS 13 und macOS 10.15 nicht geladen werden.
Ich habe versucht mit openssl unter ubuntu 18.04 ein neues Zertifikat zu erstellen und anschliessend am iPhone zu installieren. Unter den Profilen wird mir auch angezeigt, dass es überprüft und signiert ist, allerdings wird beim Seitenaufruf in Safari dennoch eine Warnmeldung ausgegeben. In anderen Browserapps, wird es auch nicht akzeptiert. Ich denke ich muss noch die Anforderungen bezüglich DNS in SAN Erweiterung sowie id-kp-serverAuth OID in die Erzeugung einbauen. Nur wie, ich hab keine Anleitung gefunden.
Nachfolgend meine Schritte zur Erzeugung des Zertifikats:
- Privater Schlüssel
sudo openssl genrsa -out server.key 4096
- Schlüssel für CA
sudo openssl genrsa -aes256 -out ca.key 4096
- Zertifikatsanforderungsscript
sudo openssl req -new -key server.key -out server.csr
- Root Zertifkat
sudo openssl req -x509 -new -extensions v3_ca -days 820 -key ca.key -out ca.crt -sha512
- SSL Zertifikat
sudo openssl x509 -req -in server.csr -out server.crt -sha512 -CA ca.crt -CAkey ca.key -CAcreateserial -days 820
Die erzeugte ca.crt habe ich dann am iPhone als Root Zertifikat installiert und unter Einstellungen - Allgemein - Info - Zertifikatsvertrauenseinstellungen aktiviert.
Als CommonName habe ich *.fritz.box angegeben.
Hat jemand einen Tipp, was das Problem ist bzw. welche Parameter noch fehlen, damit es den iOS Anforderungen genügt?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 497715
Url: https://administrator.de/forum/wie-erstellt-man-ein-fuer-ios-13-selbstsigniertes-zertifikat-497715.html
Ausgedruckt am: 23.12.2024 um 06:12 Uhr
7 Kommentare
Neuester Kommentar
Ich würde das eher bei der
https://communities.apple.com/de/welcome
Community erfragen. Da kommst Du glaube schneller zum Ergebnis
https://communities.apple.com/de/welcome
Community erfragen. Da kommst Du glaube schneller zum Ergebnis
Deine SAN Einträge fehlen völlig:
Config-Datei erstellen server.cnf (Details und Domains anpassen):
Dann Request so erstellen:
Dann Zertifikat erstellen mit
Config-Datei erstellen server.cnf (Details und Domains anpassen):
[req]
default_bits = 4096
distinguished_name = req_distinguished_name
default_keyfile = server.key
encrypt_key = no
req_extensions = req_cert_extensions
default_md = sha512
dirstring_type = nombstr
prompt = no
utf8 = yes
[req_distinguished_name]
C=DE
ST=NRW
L=ORT
O=COMPANY
OU=Abteilung
CN=*.mydomain.tld
[req_cert_extensions]
basicConstraints = critical,CA:FALSE
keyUsage = critical, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = DNS:mydomain.tld, DNS:*.mydomain.tld
sudo openssl req -new -in server.key -out server.csr -batch -config server.cnf
sudo openssl x509 -req -in server.csr -out server.pem -CA ca.pem -CAkey ca.key -CAcreateserial -days 365 -sha512 -extfile server.cnf -extensions req_cert_extensions
Jupp beim ersten ist mir das -new entfallen.
In die Config Dateien gehören immer die Optionen und Extensions für das jewilig zu erstellende Zerzifikat. Bei einem Root-Zertifikat sind die natürlich anders als bei einem Serverzertifikat!
Das v3_ca bedeutet das die Extensions aus dem Abschnitt mit diesem Namen aus der angegebenen Config-Datei geladen werden. Der Abschnitt muss so aber nicht heißen, den kannst du beliebig benennen. Ich habe ihn oben bspw. req_cert_extensions genannt.
Lies einfach mal die openssl man pages, da steht das alles drin, man muss es nur lesen.
library:fopen:No such file or directory:../crypto/bio/bss_file.c:72:fopen('ca.pem','r')
Naja hier hast du das richtige CA Zertifikat nicht angegeben, steht ja schon in der Fehlermeldung!In die Config Dateien gehören immer die Optionen und Extensions für das jewilig zu erstellende Zerzifikat. Bei einem Root-Zertifikat sind die natürlich anders als bei einem Serverzertifikat!
Das v3_ca bedeutet das die Extensions aus dem Abschnitt mit diesem Namen aus der angegebenen Config-Datei geladen werden. Der Abschnitt muss so aber nicht heißen, den kannst du beliebig benennen. Ich habe ihn oben bspw. req_cert_extensions genannt.
Lies einfach mal die openssl man pages, da steht das alles drin, man muss es nur lesen.
Bei weitem nicht. Zu einer Root-CA gehört weit mehr als das CRL & Co., außerdem ist die Definition des CN falsch und fehlt auch im zus. zu definierenden SAN. Eine Root-CS muss gut geplant sein, Zugriff auf CRLs geregelt sein, optimalerweise offline ausgeführt, etc. pp. Schließlich fällt einem jeder Fehler später auf die Füße. Deshalb würde ich mich dringend zu Grundlagen von Zertifizierungsstellen einlesen.