结点 DNS

`Knot DNS<https://www.knot-dns.cz/>`__是一个开源的权威 DNS 服务器,可用于 DNSSEC。要在 NetHSM 中使用 KnotDNS,请按照`的说明安装和配置 PKCS#11 模块<./pkcs11-setup.html>`__

手动模式

在手动模式下,密钥必须手动生成和管理。

在 PKCS#11 模块配置文件中只需要操作员用户。密码可使用``pin-value`` 中的`PKCS#11 URI<https://www.rfc-editor.org/rfc/rfc7512>`___ 在 knot.conf 中指定。

在 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

PKCS#11 URI 中的``token`` 值是来自``p11nethsm.conf`` 的``label``。根据需要调整``libnethsm_pkcs11.so`` 的路径。

要生成密钥,请运行以下命令:

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"

自动模式

在自动模式下,密钥由 Knot DNS 生成并存储在 NetHSM 中。

在 PKCS#11 模块配置中需要一个管理员用户和一个操作员用户。

在 Knot DNS 配置文件``/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

将``key-label`` 设置为``on`` 不会改变任何内容,pkcs11 模块会忽略给定的标签,并始终将十六进制密钥 id 作为标签返回。为测试目的,该策略使用非常短的密钥生命期和 TTL。