Cosmian KMS是一款开源的密钥管理系统
官网+文档 传送门 / GitHub 传送门 / 各版本/平台安装程序 传送门
直至博主写出这篇文章时,最新版本为5.23.0
因为博主的ESXi服务器和Veeam备份服务器有需要可信加密的需求,vcentre的NKP不够用,硬件KMS是不可能的,毕竟买了硬件也不能永久使用,授权也不便宜。一通查找之后,就是Cosmian KMS了,不要钱,还能自己搭建😁
准备工作
- 安装好Windows Server 2025并且已经激活系统的小主机/虚拟机(博主这里用的是Dell Wyse 5070 Thin),最好带有TPM2.0,对全盘用BitLocker进行加密,操作系统设置强密码,BIOS设置通电自启
- FQDN指向该小主机的IP并做好解析(博主用的FQDN,实际中IP也不是不行)
- 安装好Git Bash并在环境变量里配置好opsnssl的路径,powerhsell里面会用到
- 下载好Cosmian KMS的Windows安装包并安装好并设置好
cosmian_kms.exe的路径到环境变量,这里设安装路径是C:\Cosmian KMS\(其实只要装Server就行了,CLI没什么作用)
以上步骤做好之后就可以开始了
开始配置
生成 KMS Server CA 和 KMS Server 证书
生成 CA 私钥:
openssl genrsa -out kms-server-ca.key 4096
生成 CA 证书:
openssl req -new -x509 -days 3650 `
-key kms-server-ca.key `
-subj "/CN=Cosmian KMS Server CA" `
-out kms-server-ca.crt
生成 KMS Server 私钥:
openssl genrsa -out kms-server.key 2048
生成 CSR:
注意:如果用IP,-subj "/CN=192.168.1.10"
openssl req -new `
-key kms-server.key `
-subj "/CN=kms.lab.local" `
-out kms-server.csr
关键仍然是后面的 SAN,创建 SAN 配置文件
@"
subjectAltName = DNS:kms.lab.local,IP:192.168.1.10
extendedKeyUsage = serverAuth
keyUsage = digitalSignature,keyEncipherment
"@ | Out-File -Encoding ascii kms-server-ext.cnf
签发 KMS Server 证书:
openssl x509 -req -days 3650 `
-in kms-server.csr `
-CA kms-server-ca.crt `
-CAkey kms-server-ca.key `
-CAcreateserial `
-out kms-server.crt `
-extfile kms-server-ext.cnf
打包成 PKCS#12,供 Cosmian KMS 使用:
openssl pkcs12 -export `
-in kms-server.crt `
-inkey kms-server.key `
-certfile kms-server-ca.crt `
-out server.p12 `
-passout pass:ChangeThisServerP12Password
生成 Client CA
这个CA用来签发client certificate,Cosmian KMS 会用它验证客户端是否被允许接入KMS
生成 Client CA 私钥:
openssl genrsa -out clients-ca.key 4096
生成 Client CA 证书:
openssl req -new -x509 -days 3650 `
-key clients-ca.key `
-subj "/CN=Cosmian KMS Clients CA" `
-out clients-ca.crt
创建 client 证书扩展文件:
@"
extendedKeyUsage = clientAuth
keyUsage = digitalSignature,keyEncipherment
"@ | Out-File -Encoding ascii client-ext.cnf
修改kms.toml
打开配置文件:
C:\Cosmian KMS Server\kms.toml
使用以下配置片段,注意路径使用 ‘/’
[db]
database_type = "sqlite"
sqlite_path = "C:/Cosmian KMS Server/cosmian-kms/sqlite-data"
[tls]
tls_p12_file = "C:/Cosmian KMS Server/certs/server.p12"
tls_p12_password = "ChangeThisServerP12Password"
clients_ca_cert_file = "C:/Cosmian KMS Server/certs/clients-ca.crt"
[socket_server]
socket_server_start = true
socket_server_port = 5696
socket_server_hostname = "0.0.0.0"
[http]
port = 9998
hostname = "127.0.0.1"
说明
[db]
database_type 数据库类型
sqlite_path 数据库文件路径
[tls]
tls_p12_file KMS Server 的服务端证书包
tls_p12_password server.p12 的密码
clients_ca_cert_file 用来验证 vCenter client certificate 的 CA
[socket_server]
socket_server_start 启用 KMIP socket server
socket_server_port KMIP 默认端口 5696
socket_server_hostname 监听所有网卡
[http]
port HTTP API 端口 9998
hostname 只监听本机,避免暴露 HTTP API
如果希望从外部可以用 CLI 访问 HTTP API,可以把:
hostname = "127.0.0.1"
改成:
hostname = "0.0.0.0"
但不建议这么做
启动 KMS Server
PowerShell 管理员运行:
cosmian_kms -c "C:\Cosmian KMS Server\kms.toml"
Windows防火墙
在防火墙高级设置里新建规则:5696端口入站规则为允许
vCenter 处配置



在 “使vCenter信任KMS”这里,打开后直接点击信任即可,在“使KMS信任vCenter”这一步,需要将vCenter的CSR上传到KMS后用 client CA 进行签名


把CSR保存为vcenter-client.csr并上传到KMS服务器
KMS 上对 Client CSR 签名
openssl x509 -req -days 3650 `
-in vcenter-client.csr `
-CA clients-ca.crt `
-CAkey clients-ca.key `
-CAcreateserial `
-out vcenter-client.crt `
-extfile client-ext.cnf
签过名的证书上传到vCenter


最终效果:KMS和vCnter之间相互信任

KMS服务设置成服务并开机自启动
这个地方博主踩了不少坑,以下方法已经验证可用
需要用到程序:nssm.exe
新建start-kms.ps1(C盘根目录下)
Set-Location "C:\Cosmian KMS Server"
& "C:\Cosmian KMS Server\cosmian_kms.exe" -c "C:\Cosmian KMS Server\kms.toml"
手动测试
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\start-kms.ps1"
nssm新建服务
.\nssm.exe install "Cosmian KMS"
分别填入:
Path:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Startup directory:
C:\
Arguments:
-NoProfile -ExecutionPolicy Bypass -File "C:\start-kms.ps1"
设置服务自启动
sc.exe config "Cosmian KMS" start= auto
启动
sc.exe start "Cosmian KMS"
检查
sc.exe query "Cosmian KMS"
netstat -ano | findstr ":5696"
需要备份的文件
建议备份整个KMS的安装目录,或者以下目录+文件
C:\Cosmian KMS Server\certs
C:\Cosmian KMS Server\kms.toml
KMS 数据库目录,例如 sqlite-data
注意:以下文件特别重要
server.p12
server.p12 密码
clients-ca.crt
clients-ca.key
vcenter-client.p12
vcenter-client.p12 密码
kms.toml
KMS 数据库