sonyandi
Goto Top

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:


  • 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?

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

Visucius
Visucius 23.09.2019 um 15:48:01 Uhr
Goto Top
Ich würde das eher bei der

https://communities.apple.com/de/welcome

Community erfragen. Da kommst Du glaube schneller zum Ergebnis face-wink
140913
140913 23.09.2019, aktualisiert am 24.09.2019 um 07:33:55 Uhr
Goto Top
Deine SAN Einträge fehlen völlig:

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
Dann Request so erstellen:
sudo openssl req -new -in server.key -out server.csr -batch -config server.cnf
Dann Zertifikat erstellen mit
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
sonyandi
sonyandi 24.09.2019 um 00:27:08 Uhr
Goto Top
Hallo psuser,

danke für Deine Hilfestellung.
Wenn ich den Request so wie du angibst absetze, dann erhalte ich den Fehler:
sudo openssl req -in  server.key -out server.csr -batch -config server.cnf
unable to load X509 request
140363063456192:error:0909006C:PEM routines:get_name:no start line:../crypto/pem/pem_lib.c:745:Expecting: CERTIFICATE REQUEST

Ich habe die Zeile dann wie folgt abgeändert, was dann auch ohne Fehler durchläuft:
 sudo openssl req -new -key server.key -out server.csr -batch -config server.cnf

Auch beim zweiten Befehl erhalte ich einen Fehler:
 sudo openssl x509 -req -in server.csr -out server.pem -CA ca.pem -CAkey ca.key -CAcreateserial -days 820 -sha512 -extfile server.cnf -extensions req_cert_extensions
Signature ok
subject= CN = *.fritz.box
Can't open ca.pem for reading, No such file or directory  
140125403972032:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:72:fopen('ca.pem','r')  
140125403972032:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:79:
unable to load certificate

Also habe ich ihn wie folgt angepasst:

sudo openssl x509 -req -in server.csr -out server.crt  -CA  -CAkey ca.key  -CAcreateserial -sha512 -days 820 -extfile server.cnf -extensions req_cert_extensions


Noch eine Verständnisfrage, was passiert mit meinem Befehl für das Root Zertifikat, muss hier auch angepasst werden und die server.cnf angegeben werden? Wenn ja wie?

sudo openssl req -x509 -new -extensions v3_ca -days 820 -key ca.key -out ca.crt -sha512

Was bewirkt -extensions v3_ca ? Welche Werte werden hier abgegriffen? Wenn ich die Doku richtig verstanden habe, dann werden die Werte aus der Datei /etc/ssl/openssl.cnf aus der Sektion v3_ca ausgelesen, die ist bei mir aber leer.
140913
140913 24.09.2019 aktualisiert um 07:45:47 Uhr
Goto Top
Jupp beim ersten ist mir das -new entfallen.
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.
sonyandi
sonyandi 24.09.2019 um 13:38:44 Uhr
Goto Top
Hallo psuser,

so hab mich ein wenig mit der Doku befasst, die erschlägt ja einen, es gibt soviele Optionen. Also bin jetzt wie folgt vorgegangen:

ca.cnf angelegt:
[req]
default_bits= 4096
prompt = no
distinguished_name = req_distinguished_name
x509_extensions = v3_ca

[req_distinguished_name]
CN=*.fritz.box


[v3_ca]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints=critical,CA:true

Dann das root zertifikat erstellt, was ich jetzt am iPhone installieren muss:
sudo openssl req -x509 -new -extensions v3_ca -days 820 -key ca.key -out ca.crt -sha512 -batch -config ca.cnf

Ist meine vorgehensweise korrekt?
140913
140913 24.09.2019 aktualisiert um 13:57:28 Uhr
Goto Top
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.
sonyandi
sonyandi 24.09.2019 um 22:57:58 Uhr
Goto Top
Deshalb würde ich mich dringend zu Grundlagen von Zertifizierungsstellen einlesen.

Hab ich ja gemacht und entsprechend wie oben umgesetzt. Vielmehr verstehe ich davon nicht.
Die Verbindung funktioniert auch mit dem so installierten Zertifikat.

Wie würde den Deine ca.cnf sowie Befehl zur Erstellung der ca.crt aussehen?