https://localhost/

Wer auf dem lokalen Rechner "mal schnell" auch SSL-Zugriffe ermöglichen möchte, dem stehen Dank aktueller Versionen der verschiedenen Browser einige Hürden im Weg. So akzeptiert Google Chrome kein "self-signed certificate" mehr. Auch der CN im Zertifikat reicht nicht mehr aus: Es wird ein "subject alternative name" erwartet.

Um Anderen meine Suche nach einer sauberen Lösung für dieses Problem zu ersparen, stelle ich folgendes Skript zur Verfügung:

#!/bin/bash

# ca: generate key and certificate
openssl req -new -x509 -keyout localhost-ca.key -out localhost-ca.cer -days 9999 -nodes -subj '/CN=localhost-ca'

# merge key and certificate
cat localhost-ca.key localhost-ca.cer >localhost-ca.pem

# domain: generate key and certificate signing request
openssl req -new -sha256 -nodes -newkey rsa -keyout localhost.key -out localhost.csr -subj "/CN=localhost" -config <(
cat <<-EOF
[ req ]
default_bits = 2048
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
[ req_ext ]
basicConstraints=CA:FALSE
keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
EOF
)

# check csr
openssl req -text -noout -in localhost.csr

# sign
openssl x509 -req -sha256 -CA localhost-ca.pem -days 999 -CAcreateserial -CAserial localhost-ca.srl -in localhost.csr -out localhost.cer -extfile <(
cat <<-EOF
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
EOF
)

# check certificate
openssl x509 -text -noout -in localhost.cer

# merge key and certificate
cat localhost.key localhost.cer >localhost.pem

Google Chrome akzeptiert localhost-ca.cer aus dem Zertifikatsspeicher des Systems. Bei Firefox kommt man nicht umhin das CA-Zertifikat in den proprietären Zertifikatsspeicher zu importieren.