Note to self: selbstsignierte Zertifikate mit OpenSSL

Selbstsignierte Zertifikate mit eigener CA über OpenSSL:

Erstellen des CA-Keys:
openssl genrsa -out ca.key 4096 
openssl req -new -x509 -days 1825 -key ca.key -out ca.crt 

Erstellen und signieren eines CSR:
openssl genrsa -out server.key 4096 
openssl req -new -key server.key -out server.csr 
openssl x509 -req -days 1824 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

Android, EAP-TLS, Zertifikate importieren

Android erwartet für die Nutzung von WLAN-Netzwerken welche mit EAP-TLS gesichert sind Zertifikate im PKCS12 Format. Liegen die Zertifikate und Keys nur im PEM Format vor, können diese mit dem folgenden Befehl konvertiert werden.

openssl pkcs12 -export -in cert.pem -certfile cacert.pem -inkey key.pem -out cert.p12

Die entstandene .p12 Datei kopiert man nun auf seinen Androiden und installiert sie mit dem Zertifikatsmanager.
Bei mir schlug der Import jedoch immer wieder fehl, eine Fehlermeldung gab es nicht. Nur im Log tauchte “Import key command failed resp->status = -17” auf, so wirklich weiter half dies aber auch nicht. Erst ein Eintrag im Android-Bugtracker gab mir den entscheidenden Hinweis: Android kam mit der verwendeten Schlüssellänge des Keys nicht klar. Scheinbar liegt das Maximum bei 2048 Bit, mein Key war aber 4096 Bit lang. Erst als ich einen neuen, kürzeren Schlüssel generiert habe, wurde der Key anstandslos akzeptiert. Ich hoffe doch sehr, dass Google hier bald nachbessert, so selten sind Schlüssel mit Längen > 2048 Bit nämlich nicht.

Update: Android 4.4 scheint 4069 Bit Schlüssel zu akzeptieren.