Keycloak¶
Lai izmantotu Keycloak kopā ar NetHSM, lai droši uzglabātu privātos atslēgas NetHSM, vienlaikus ļaujot Keycloak parakstīt piekļuves žetonus un atšifrēt JWE, jums ir jāinstalē un jākonfigurē šis atslēgu nodrošinātājs šādi:
Informācija par mākslīgo intelektu¶
Šis pakalpojuma sniedzējs tika izstrādāts un pārskatīts, izmantojot ievērojamu mākslīgā intelekta palīdzību.
Prepare the NetHSM¶
Sagatavojiet NetHSM šādi. Sīkākas instrukcijas skatiet sadaļā „ ” administrēšana.
Ja NetHSM izmanto pašparakstītu sertifikātu, reģistrējiet tā pirkstu nospiedumu:
echo | openssl s_client -connect $NETHSM_HOST 2>/dev/null \ | openssl x509 -fingerprint -sha256 -noout
Izveidojiet lietotāju „Operator”, kas paredzēts tieši Keycloak lietošanai.
Keycloak paplašinājums atrod atslēgas, taču tās neizveido. Izveidojiet vajadzīgās atslēgas manuāli:
Atslēgas ID jāuzsāk ar prefiksu, ko izmantos domēns. Izvēlieties atbilstošu nosaukumu veidošanas shēmu, piemēram,
kc-<realm>-<purpose>-<year>(piemēram,kc-staff-sig-rs256-2026,kc-partners-sig-es256-2026,kc-customers-enc-oaep-2026). Šis ID kļūst parkid, ko publicē Keycloak. Turpmākā atslēgu rotācija tiek veikta, pievienojot jaunus ID, tāpēc iesakām atslēgas ID sastāvā iekļaut gadu.Mehānismi nosaka, kuriem JOSE algoritmiem šī atslēga var tikt izmantota:
NetHSM key type and mechanism
JOSE algorithms served
RSA+RSA_Signature_PKCS1RS256, RS384, RS512 — neatkarīgi no izmantojamā hash algoritma, tādējādi viena atslēga der visiem trim
RSA+RSA_Signature_PSS_SHA256/_SHA384/_SHA512PS256 / PS384 / PS512 — tikai algoritms, no kura cēlies mehānisma nosaukums
EC_P256/EC_P384/EC_P521+ECDSA_SignatureES256 / ES384 / ES512 — līkne nosaka algoritmu
Curve25519+EdDSA_SignatureEdDSA
RSA+RSA_Decryption_OAEP_SHA1/_SHA256RSA-OAEP / RSA-OAEP-256, ienākošo JWE atšifrēšanai
Uzstādīšana¶
Lejupielādējiet Keycloak NetHSM pakalpojuma sniedzēja „ ” JAR failu, saglabājiet to Keycloak pakalpojuma sniedzēju mapē, piemēram, /opt/keycloak/providers/
Atjaunojiet pakalpojumu sniedzēju reģistru: /opt/keycloak/bin/kc.sh build
Konfigurācija¶
Iestatījumus var norādīt vai nu failā „ ` “ conf/keycloak.conf`, vai kā vides mainīgos. Abas formas atbilst vieniem un tiem pašiem iestatījumiem; vides mainīgie ir prioritāri, tādēļ failā var glabāt atklātas vērtības, bet paroli ievadīt tikai izpildes laikā.
Izmantojot conf/keycloak.conf¶
spi-keys--nethsm--url=https://nethsm.internal:8443/api/v1
spi-keys--nethsm--username=keycloak
spi-keys--nethsm--passphrase=<passphrase>
spi-keys--nethsm--tls-fingerprints=aabbcc...
Using environment variables¶
To parasti izmanto konteineru ieviešanā, jo paroli var norādīt, izmantojot Docker vai Kubernetes slepeno informāciju, nevis ierakstot to failā.
KC_SPI_KEYS__NETHSM__URL=https://nethsm.internal:8443/api/v1
KC_SPI_KEYS__NETHSM__USERNAME=keycloak
KC_SPI_KEYS__NETHSM__PASSPHRASE="<passphrase>"
KC_SPI_KEYS__NETHSM__TLS_FINGERPRINTS=aabbcc...
Piezīme
Vides mainīgā nosaukums tiek iegūts mehāniski no konfigurācijas atslēgas: tai priekšā tiek pievienots KC_, nosaukums tiek pārvērsts lielajos burtiem, un katrs - tiek aizstāts ar _. Dubultie apakšsvītriņi izriet no atslēgas struktūras, spi-<spi-name>--<provider-id>--<option>, kur šim paplašinājumam ir SPI keys, pakalpojuma sniedzējs nethsm un opcijas nosaukums.
See also all available configuration options.
Restart Keycloak¶
Savienojuma profils tiek nolasīts tikai tad, kad tiek inicializēta pakalpojumu sniedzēju fabrika. Pārstartējiet Keycloak.
Confirm the server configuration¶
Pirms jebkuras sfēras konfigurēšanas pārbaudiet palaišanas žurnālu. Tas ļauj nošķirt savienojuma vai autentifikācijas datu problēmu no sfēras konfigurācijas problēmas.
Par panākumiem:
NetHSM key provider ready: 1 instance(s), user 'keycloak',
discovery cache PT5M, on-unavailable fail
Otherwise:
Log message |
Cause |
|---|---|
Nav ziņojuma vai arī parādās atkļūdošanas rinda, kas norāda, ka pakalpojuma sniedzējs ir neaktīvs |
|
|
Nepareiza adrese, bloķēts ar ugunsmūri, sertifikāta PIN koda neatbilstība vai NetHSM ir bloķēts vai nav konfigurēts |
|
Wrong username or passphrase |
Pievienot pakalpojuma sniedzēju sfērai¶
Administratora konsolē atveriet Realm Settings → Keys → Providers, izvēlieties „ “ (Pievienot pakalpojumu sniedzēju) un atlasiet nethsm.
Field |
Nozīme |
|---|---|
Key use |
|
Key ID prefix |
Katra NetHSM atslēga, kuras ID sākas ar šo virkni, tiek publicēta šajā sfērā |
Algorithm |
Algoritms, saskaņā ar kuru šīs atslēgas tiek publicētas |
Priority |
|
Enabled / Active |
Lai atslēga varētu parakstīties, abiem jābūt ieslēgtiem |
Viena komponente publicē vienu algoritmu, atspoguļojot Keycloak iebūvētos atslēgu nodrošinātājus. Tādējādi sfērai, kurai nepieciešami gan RS256, gan ES256, ir divas komponentes. Atslēgas ar prefiksu, kas neatbalsta izvēlēto algoritmu, tiek izlaistas, tādējādi prefikss var droši atbilst jauktam atslēgu kopumam.
Uzmanies
Nevirziet divus komponentus uz vienu un to pašu atslēgu, izmantojot atšķirīgus algoritmus. Abas sistēmas publicētu JWKS ierakstu zem tā paša kid.
Iestatiet prioritāti virs 100¶
Svarīgi
rsa-generated rsa-enc-generated hmac-generated aes-generated 100 . NetHSM komponentam ir jābūt ar augstāku prioritāti, pretējā gadījumā Keycloak turpina parakstīšanos ar ģenerētu programmatūras atslēgu, un konfigurācija šķietami darbojas.
NetHSM parametram „ ` ” 200` ir piemērota noklusējuma vērtība.
Izvēlieties algoritmu sfērai¶
ā iestatiet „Realm Settings“ → „Tokens“ → „Default Signature Algorithm“ uz algoritmu, kas konfigurēts komponentā. Ja realms pieprasa algoritmu, kuru komponents nepublicē, Keycloak izmanto ģenerētu atslēgu, neziņojot par kļūdu.
Pārbaudīt¶
List the published keys:
curl -s https://<keycloak-host>/realms/<realm>/protocol/openid-connect/certs
`` un kid` vērtībām jābūt NetHSM atslēgu identifikatoriem.
Galīgā pārbaude ir izsniegtais žetons. Pieprasiet to un dekodējiet tā galvenes informāciju:
curl -s \
-d "client_id=<client>" \
-d "client_secret=<secret>" \
-d "grant_type=client_credentials" \
https://$NETHSM_HOST/realms/<realm>/protocol/openid-connect/token \
| python3 -c 'import sys, json, base64
header = json.load(sys.stdin)["access_token"].split(".")[0]
print(json.loads(base64.urlsafe_b64decode(header + "==")))'
Ja kid ir NetHSM atslēgas ID, paraksts tika ģenerēts HSM iekšienē. Vienlaikus varat arī pārbaudīt NetHSM žurnālu, kurā būtu jāparādās atbilstošajam izsaukumam.
Further Details¶
You find further details here.