Skip to content
Snippets Groups Projects
README.md 3.76 KiB
Newer Older
# FIT-Connect Tools
Ablage einiger Skripte rund um FIT-Connect.
Speziell im Kontext von
* JWK (JSON Web Key) nach [RFC 7517](https://datatracker.ietf.org/doc/html/rfc7517)
* JWKS (JSON Web Key Sets) nach [RFC 7517, Sektion 5](https://datatracker.ietf.org/doc/html/rfc7517#section-5)
René Zimmermann's avatar
René Zimmermann committed

## Usage
* Python 3.10
* [Poetry](https://python-poetry.org/) für Abhängigkeiten.
Die Installation der Abhängigkeiten läuft dann mit
```shell
$ poetry install --no-root
## Skript: `pkcs12ToJwk.py`
Beantragte Zertifikate aus der DOI-CA liegen zunächst als `*.p12` Keystore (Format: PKCS12) vor.
Um die enthaltenen Zertifikate für das Self-Service-Portal / Zustelldienst nutzbar zu machen, muss ein JWK abgeleitet werden.
Das Passwort für den Keystore wird aus der Umgebungsvariable `PKCS12_CONTAINER_PASS` gelesen.
Sollte diese nicht gesetzt sein, wird das Passwort interaktiv abgefragt.
Example:

```shell
$ poetry run python pkcs12ToJwk.py -i "path/to/p12_file" -o "path/to/output_dir" --environment prod
Pascal Osterwinter's avatar
Pascal Osterwinter committed
Please enter the password for p12 keystore: ****************
Info: KeyUsage: Digital Signature, Non Repudiation, Key Encipherment
🔒 Wrote JWK representation of encryption public key (key_use=wrapKey) to publicKey_encryption.jwk.json
🔒 Wrote JWK representation of signature validation public key (key_use=verify) to publicKey_signature_verification.jwk.json
Please upload these keys when creating a destination in the self service portal.

🔒 Wrote JWK representation of decryption private key (key_use=unwrapKey) to privateKey_decryption.jwk.json
🔒 Wrote JWK representation of signing private key (key_use=sign) to privateKey_signing.jwk.json
These keys can be used to sign and decrypt in your client application.
```

Die nun erzeugten Dateien `publicKey_encryption.jwk.json` (öffentlicher Verschlüsselungschlüssel) und `publicKey_signature_verification.jwk.json` (öffenticher Signaturschlüssel) müssen anschließend im Self-Service-Portal hochgeladen werden.

Die Dateien `privateKey_decryption.jwk.json` (geheimer Entschlüsselungsschlüssel) und `privateKey_signing.jwk.json` (geheimer Signaturschlüssel) können in der an FIT-Connect angebundenen Software zur Entschlüsselung von Einreichungen und zur Signatur von Security-Event-Tokens genutzt werden.

## Skript: `createSelfSignedJwks.py`
In der Testumgebung können zu Testzwecken selbst-signierte Zertifikate genutzt werden.
Das Skript erstellt zu diesem Zweck JWKS, ohne dass ein Zertifikat aus der Verwaltungs-PKI benötigt wird.
## Skript: `getPubAndPrivKeysFromJwk.py`
Erzeugt einen öffentlichen und einen privaten Schlüssel aus einem JWK.
Diese werden als `.pem` abgespeichert.
Example:
```shell
$ poetry run python getPubAndPrivKeysFromJwk.py -i "path/to/jwk" -o "path/to/output_dir"
## Skript: `createSelfSignedX5ChainFromJwk.sh`
Erweitert den ersten JWK in einem JWKS um eine Zertifikatskette (Attribut `x5c`) mit einem selbst-signierten Zertifikat.
Um dieses Skript nutzen zu können müssen `python`, `openssl`, `jq` und `sed` installiert per CLI aufrufbar sein.
Als Eingabe wird ein Pfad zu einem JWKS und ein Pfad für die Ausgabedateien erwartet.
Optional kann auch ein subject für das Zertifikat als drittes argument angegeben werden.
Default: "/C=DE/O=TEST-PKI/CN=TEST-PCA20"
Ausgabedateien:

* Ersten JWK aus dem JWKS
* Privaten Schlüssel des JWKs im Format `.pem`
* Öffentlichen Schlüssel des JWKs im Format `.pem`
* Selbst-signiertes Zertifikat im Format `.pem`
* JWKS mit Zertifikatskette (Attribut `x5c`)
* JWKS mit Zertifikatskette (Attribut `x5c`) im Format Base64

Example:

```shell
$ ./createSelfSignedX5ChainFromJwk.sh "path/to/jwks.json" "path/to/output_dir"

## Development

To do a dependency update:

```shell
$ poetry update
```

To check for outdated dependencies:

```shell
$ poetry run pip list -o
```