Nœud DNS#

Knot DNS est un serveur DNS autoritaire open source qui peut être utilisé pour le DNSSEC. Pour utiliser KnotDNS avec le NetHSM, veuillez installer et configurer le module PKCS#11 comme décrit ici.

Mode manuel#

En mode manuel, les clés doivent être générées et gérées manuellement.

Seul l’utilisateur Operator est nécessaire dans le fichier de configuration du module PKCS#11. Le mot de passe peut être spécifié à l’aide de pin-value dans PKCS#11 URI dans knot.conf.

Ajoutez les lignes suivantes au fichier de configuration de KnotDNS /etc/knot/knot.conf :

keystore:
  - id: nethsm_keystore
    backend: pkcs11
    config: "pkcs11:token=localnethsm /usr/local/lib/libnethsm_pkcs11.so"

policy:
  - id: manual_policy
    keystore: nethsm_keystore
    manual: on

zone:
  - domain: example.com
    storage: "/var/lib/knot"
    file: "example.com.zone"
    dnssec-signing: on
    dnssec-policy: manual_policy

La valeur token dans l’URI PKCS#11 est la valeur label de p11nethsm.conf. Ajustez le chemin d’accès à libnethsm_pkcs11.so si nécessaire.

Pour générer les clés, exécutez les commandes suivantes :

nitropy nethsm \
  --host "localhost:8443" --no-verify-tls \
  --username "admin" \
  generate-key \
    --type "EC_P256" --mechanism "ECDSA_Signature" --length "256" --key-id "myKSK"
# knot's keymgr expects the binary key id in hex format
# myKSK in ascii-binary is 0x6d794b534b, e.g. echo -n "myKSK" | xxd -ps
keymgr "example.com" import-pkcs11 "6d794b534b" "algorithm=ECDSAP256SHA256" "ksk=yes"

nitropy nethsm \
  --host "localhost:8443" --no-verify-tls \
  --username "admin" \
  generate-key \
    --type "EC_P256" --mechanism "ECDSA_Signature" --length "256" --key-id "myZSK"
# myZSK in ascii-binary is 0x6d795a534b
keymgr "example.com" import-pkcs11 "6d795a534b" "algorithm=ECDSAP256SHA256"

Mode automatique#

En mode automatique, les clés sont générées par Knot DNS et stockées dans le NetHSM.

Un administrateur et un opérateur sont nécessaires dans la configuration du module PKCS#11.

Ajoutez les lignes suivantes au fichier de configuration DNS du nœud /etc/knot/knot.conf :

keystore:
  - id: nethsm_keystore
    backend: pkcs11
    config: "pkcs11:token=localnethsm /usr/local/lib/libnethsm_pkcs11.so"
    #key-label: on

policy:
  - id: auto_policy
    keystore: nethsm_keystore
    ksk-lifetime: 5m
    zsk-lifetime: 2m
    dnskey-ttl: 10s
    zone-max-ttl: 15s
    propagation-delay: 2s

zone:
  - domain: example.com
    storage: "/var/lib/knot"
    file: "example.com.zone"
    dnssec-signing: on
    dnssec-policy: auto_policy

Définir key-label à on ne change rien et le module pkcs11 ignore l’étiquette donnée et renvoie toujours l’identifiant hexadécimal de la clé en tant qu’étiquette. La politique utilise des durées de vie des clés et des TTL très courtes à des fins de test.