Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
ca [2025/04/12 10:42] jango |
ca [2025/06/01 01:36] (aktuell) jango [Test OCSP] |
||
|---|---|---|---|
| Zeile 3: | Zeile 3: | ||
| =====1-Tier with CRL===== | =====1-Tier with CRL===== | ||
| + | Einfache 1-Tier Root CA mit [[CRL]] | ||
| ====Initialize Root CA==== | ====Initialize Root CA==== | ||
| <code bash> | <code bash> | ||
| Zeile 91: | Zeile 92: | ||
| </ | </ | ||
| - | ====Issue | + | ====Issue certificate==== |
| <code bash> | <code bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| Zeile 133: | Zeile 134: | ||
| </ | </ | ||
| - | ====Revoke | + | ====Revoke certificate==== |
| <code bash> | <code bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| Zeile 217: | 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 = AT | ||
| + | ST = Vienna | ||
| + | L = Vienna | ||
| + | O = Brainworx | ||
| + | CN = 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 | ||
| + | |||
| + | CA_DIR=" | ||
| + | SERVER=$1 | ||
| + | SERVER_CERT=" | ||
| + | |||
| + | URI=$(openssl x509 -in " | ||
| + | |||
| + | 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 | ||
| </ | </ | ||