Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ca [2025/04/12 00:50] jango angelegt |
ca [2025/04/15 09:41] (aktuell) jango [OCSP Service] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | Certificate Authority | + | Certificate Authority |
- | Initialize Root CA | + | =====1-Tier with CRL===== |
+ | |||
+ | Einfache 1-Tier Root CA mit [[CRL]] | ||
+ | ====Initialize Root CA==== | ||
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 89: | Zeile 92: | ||
</ | </ | ||
- | Issue a certificate | + | ====Issue certificate==== |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 131: | Zeile 134: | ||
</ | </ | ||
- | Revoke certificate | + | ====Revoke certificate==== |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 172: | Zeile 175: | ||
</ | </ | ||
- | List certificates | + | ====List certificates==== |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 215: | Zeile 218: | ||
printf "%-10s %-20s %-20s %-40s\n" | printf "%-10s %-20s %-20s %-40s\n" | ||
done < " | done < " | ||
+ | </ | ||
+ | |||
+ | =====1-Tier with OCSP===== | ||
+ | |||
+ | Einfache 1-Tier Root CA mit [[OCSP]] Responder | ||
+ | ====Initialize Root CA==== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | CA_DIR=" | ||
+ | |||
+ | mkdir -p " | ||
+ | chmod 700 " | ||
+ | touch " | ||
+ | echo 1000 > " | ||
+ | echo 1000 > " | ||
+ | |||
+ | cat <<EOF > " | ||
+ | [ ca ] | ||
+ | default_ca = CA_default | ||
+ | |||
+ | [ CA_default ] | ||
+ | dir = $CA_DIR | ||
+ | certs = \$dir/certs | ||
+ | crl_dir | ||
+ | database | ||
+ | new_certs_dir | ||
+ | certificate | ||
+ | serial | ||
+ | crlnumber | ||
+ | crl = \$dir/ | ||
+ | private_key | ||
+ | RANDFILE | ||
+ | |||
+ | x509_extensions | ||
+ | name_opt | ||
+ | cert_opt | ||
+ | default_days | ||
+ | default_crl_days | ||
+ | default_md | ||
+ | preserve | ||
+ | policy | ||
+ | email_in_dn | ||
+ | rand_serial | ||
+ | |||
+ | |||
+ | [ policy_strict ] | ||
+ | countryName | ||
+ | stateOrProvinceName | ||
+ | organizationName | ||
+ | organizationalUnitName | ||
+ | commonName | ||
+ | emailAddress | ||
+ | |||
+ | [ req ] | ||
+ | default_bits | ||
+ | prompt | ||
+ | default_md | ||
+ | distinguished_name | ||
+ | x509_extensions | ||
+ | |||
+ | [ dn ] | ||
+ | C = DE | ||
+ | ST = Bayern | ||
+ | L = München | ||
+ | O = MeineFirma | ||
+ | CN = Meine Root CA | ||
+ | |||
+ | [ v3_ca ] | ||
+ | subjectKeyIdentifier = hash | ||
+ | authorityKeyIdentifier = keyid: | ||
+ | basicConstraints = critical, CA:true | ||
+ | keyUsage = critical, digitalSignature, | ||
+ | authorityInfoAccess = OCSP; | ||
+ | |||
+ | [ crl_ext ] | ||
+ | authorityKeyIdentifier = keyid: | ||
+ | |||
+ | [ v3_ocsp ] | ||
+ | basicConstraints = CA:FALSE | ||
+ | keyUsage = critical, digitalSignature | ||
+ | extendedKeyUsage = critical, OCSPSigning | ||
+ | EOF | ||
+ | |||
+ | |||
+ | # generate root key | ||
+ | openssl genrsa -out ~/ | ||
+ | chmod 400 ~/ | ||
+ | |||
+ | # generate root cert | ||
+ | openssl req -config ~/ | ||
+ | -key ~/ | ||
+ | -new -x509 -days 3650 -sha256 -extensions v3_ca \ | ||
+ | -out ~/ | ||
+ | |||
+ | # create crl | ||
+ | openssl ca -config ~/ | ||
+ | |||
+ | # export pem or der | ||
+ | openssl crl -in ~/ | ||
+ | </ | ||
+ | |||
+ | ====Issue Certificate==== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # Exit on error | ||
+ | set -e | ||
+ | |||
+ | CA_DIR=" | ||
+ | ISSUED_DIR=" | ||
+ | |||
+ | # Prüfe ob Servername übergeben wurde | ||
+ | if [ -z " | ||
+ | echo " Bitte gib den Servernamen als Parameter an!" | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | SERVER=" | ||
+ | SERVER_DIR=" | ||
+ | |||
+ | mkdir -p " | ||
+ | |||
+ | # Privaten Schlüssel erstellen | ||
+ | openssl genrsa -out " | ||
+ | |||
+ | # CSR erstellen | ||
+ | openssl req -new -key " | ||
+ | -out " | ||
+ | -subj "/ | ||
+ | |||
+ | # Zertifikat signieren | ||
+ | openssl ca -config " | ||
+ | -in " | ||
+ | -out " | ||
+ | -days 825 -batch -extensions v3_ca | ||
+ | |||
+ | echo " Zertifikat erfolgreich erstellt:" | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | ====Revoke certificate==== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # Exit on error | ||
+ | set -e | ||
+ | |||
+ | CA_DIR=" | ||
+ | ISSUED_DIR=" | ||
+ | CRL_PUB_DIR="/ | ||
+ | |||
+ | # Prüfe ob Servername übergeben wurde | ||
+ | if [ -z " | ||
+ | echo " Bitte gib den Servernamen als Parameter an!" | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | SERVER=" | ||
+ | CERT_FILE=" | ||
+ | |||
+ | # Prüfe ob Zertifikat existiert | ||
+ | if [ ! -f " | ||
+ | echo " Zertifikat nicht gefunden: $CERT_FILE" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | # Zertifikat widerrufen | ||
+ | openssl ca -config " | ||
+ | |||
+ | # Neue CRL generieren | ||
+ | openssl ca -config " | ||
+ | |||
+ | # CRL veröffentlichen | ||
+ | mkdir -p " | ||
+ | cp " | ||
+ | |||
+ | echo " | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | ====Initialize OCSP==== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | set -e | ||
+ | |||
+ | CA_DIR=" | ||
+ | OCSP_NAME=" | ||
+ | OCSP_DIR=" | ||
+ | mkdir -p " | ||
+ | |||
+ | # Key erstellen | ||
+ | openssl genrsa -out " | ||
+ | |||
+ | # CSR | ||
+ | openssl req -new -key " | ||
+ | -out " | ||
+ | -subj "/ | ||
+ | |||
+ | # Zertifikat signieren | ||
+ | openssl ca -config " | ||
+ | -in " | ||
+ | -out " | ||
+ | -days 825 -extensions v3_ocsp -batch | ||
+ | |||
+ | echo " | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | ====Start OCSP Server==== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | set -e | ||
+ | |||
+ | CA_DIR=" | ||
+ | OCSP_NAME=" | ||
+ | OCSP_DIR=" | ||
+ | |||
+ | openssl ocsp \ | ||
+ | -port 8888 \ | ||
+ | -text \ | ||
+ | -index " | ||
+ | -CA " | ||
+ | -rkey " | ||
+ | -rsigner " | ||
+ | -nmin 1 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====Test OCSP==== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | set -e | ||
+ | |||
+ | URI=http:// | ||
+ | CA_DIR=" | ||
+ | |||
+ | SERVER=$1 | ||
+ | SERVER_CERT=" | ||
+ | |||
+ | openssl ocsp \ | ||
+ | -issuer " | ||
+ | -cert " | ||
+ | -url $URI \ | ||
+ | -resp_text -noverify | ||
+ | </ | ||
+ | |||
+ | ====OCSP Service==== | ||
+ | |||
+ | Script als Service erstellen | ||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [Unit] | ||
+ | Description=OpenSSL OCSP Responder | ||
+ | |||
+ | [Service] | ||
+ | Type=simple | ||
+ | ExecStart=/ | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
</ | </ |