以下示例使用 IBM Cloud HSM 7.0 ↗ 进行测试,这是一种基于 Gemalto SafeNet Luna a750 的经 FIPS 140-2 Level 3 认证的实现。
请确保您已:
- 初始化您的设备 ↗
- 安装了 SafeNet 客户端软件 ↗
第一步是创建 HSM 分区,可以将其视为 IBM Cloud HSM 设备中的独立逻辑 HSM。
vm$ ssh admin@hsm
[cloudflare-hsm.softlayer.com] lunash:>partition create -partition KeylessSSL
Type 'proceed' to create the partition, or
'quit' to quit now.
> proceed
'partition create' successful.
Command Result : 0 (Success)接下来,需要将分区分配给客户端,在本例中是您的密钥服务器。
[cloudflare-hsm.softlayer.com] lunash:>client assignpartition -client cloudflare-vm.softlayer.com -partition KeylessSSL
'client assignPartition' successful.
Command Result : 0 (Success)分配分区后,从虚拟服务器运行 lunacm 并初始化分区。
vm$ lunacm
LunaCM v7.1.0-379. Copyright (c) 2006-2017 SafeNet.
Available HSMs:
Slot Id -> 0
Label ->
Serial Number -> XXXXXXXXXXXXX
Model -> LunaSA 7.0.0
Firmware Version -> 7.0.1
Configuration -> Luna User Partition With SO (PW) Signing With Cloning Mode
Slot Description -> Net Token Slot
Current Slot Id: 0
lunacm:>partition init -label KeylessSSL -domain cloudflare
Enter password for Partition SO: ********
Re-enter password for Partition SO: ********
You are about to initialize the partition.
All contents of the partition will be destroyed.
Are you sure you wish to continue?
Type 'proceed' to continue, or 'quit' to quit now ->proceed
Command Result : No Error在运行以下命令之前,请与您的信息安全和/或密码学团队确认组织批准的密钥创建程序。
执行此操作时,您需要为新生成的密钥定义 ID 字段。它必须设置为大端十六进制整数值。
vm$ cmu generatekeypair -keyType=RSA -modulusBits=2048 -publicExponent=65537 -sign=1 -verify=1 -labelpublic=myrsakey -labelprivate=myrsakey -keygenmech=1 -id=a000
Please enter password for token in slot 0 : ********
# cmu generatekeypair -keyType=ECDSA -curvetype=3 -sign=1 -verify=1 -labelpublic=myecdsakey -labelprivate=myecdsakey -id=a001
Please enter password for token in slot 0 : ********
# cmu list
Please enter password for token in slot 0 : ********
handle=61 label=myecdsakey
handle=60 label=myecdsakey
handle=48 label=myrsakey
handle=45 label=myrsakey使用上一步中创建的密钥,生成可发送给公开受信任的证书颁发机构 (CA) 进行签名的 CSR。
# cmu requestCertificate -c="US" -o="Example, Inc." -cn="ibm-cloudhsm.example.com" -s="California" -l="San Francisco" -publichandle=45 -privatehandle=48 -outputfile="rsa.csr" -sha256withrsa
Please enter password for token in slot 0 : ********
Using "CKM_SHA256_RSA_PKCS" Mechanism
# cmu requestCertificate -c="US" -o="Example, Inc." -cn="ibm-cloudhsm.example.com" -s="California" -l="San Francisco" -publichandle=60 -privatehandle=61 -outputfile="ecdsa.csr" -sha256withecdsa
Please enter password for token in slot 0 : ********
Using "CKM_ECDSA_SHA256" Mechanism将上一步中创建的 CSR 提供给组织首选的 CA,按要求证明对域名的控制权,然后下载已签名的 SSL 证书。请遵循上传 Keyless SSL 证书中提供的说明。
最后,我们需要修改密钥服务器在启动时将读取的配置文件。将 object=mykey 和 pin-value=username:password 值更改为与您提供的密钥标签和创建的 CU 用户匹配。
打开 /etc/keyless/gokeyless.yaml,在紧接其后的位置:
private_key_stores:
- dir: /etc/keyless/keys添加:
- uri: pkcs11:token=KeylessSSL;object=myrsakeyid=a000??module-path=/usr/safenet/lunaclient/lib/libCryptoki2_64.so&pin-value=password&max-sessions=1
- uri: pkcs11:token=KeylessSSL;object=myecdsakeyid=a001??module-path=/usr/safenet/lunaclient/lib/libCryptoki2_64.so&pin-value=password&max-sessions=1保存配置文件后,重启 gokeyless 并验证其是否成功启动。
sudo systemctl restart gokeyless.service
sudo systemctl status gokeyless.service -l