使用Yubikey的PIV保存自建CA签发的证书进行Bitlocker加密

前言

前几天买了一个Yubikey,需要开发用途,它可以作为X509和OpenPGP的智能卡可以说是它比较重要的作用。

同样,由于自己有PKI,因此就不用自签名证书了。慢慢折腾之路就此开始。

使用Step创建中间证书

1
2
3
4
5
step certificate create 'Xice Encrypted Driver CA' \
./certs/EncryptedDriver.crt ./secrets/EncryptedDriver.key \
--profile intermediate-ca \
--ca ./certs/root_ca.crt \
--ca-key ./secrets/root_ca_key

将签发的中间证书转移到工作文件夹下,这将成为硬件加密的CA。文件路径如下

1
2
3
CA
├── EncryptedDriver.crt
└── EncryptedDriver.key

签发BitLocker的证书

生产证书请求文件

密钥将直接在Yubikey(PIV)中生产,无法导出

新建blcert.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
[Version]
Signature="$Windows NT§"
[NewRequest]
Subject = "CN=Xice BitLocker" ; 这里可以根据自己的喜好改变
KeyLength = 2048
ProviderName = "Microsoft Smart Card Key Storage Provider"
KeySpec = "AT_KEYEXCHANGE"
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE"
KeyUsageProperty = "NCRYPT_ALLOW_DECRYPT_FLAG"
RequestType = PKCS10 ; 如果直接使用自签名证书,这里直接写 Cert
SMIME = FALSE
[EnhancedKeyUsageExtension]
OID=1.3.6.1.4.1.311.67.1.1 ; 这里不能动

在CMD中运行命令

1
certreq –new blcert.txt blcert.req

该命令会要求PIV的PIN,将在PIV中生产密钥,并产生证书请求文件。

使用Openssl签发证书

因为req中包含了x509证书拓展,用于个人能力实在是有限,不能从中导出拓展文件所需要的配置文件,因此在查阅了大量的资料之后决定使用Openssl的copy_extensions方法。

copy_extensions方法是有危险的,按道理一个合格的CA需要对自己签发的证书用途负责。

编辑文件/usr/lib/ssl/openssl.cnf,找到copy_extensions取消前面的井号注释,并改为copyall

由于需要使用openssl ca命令,需要创建一系列的数据库文件,由于配置文件的细微差异,可能需要创建的文件并不相同,请根据报错信息自行调整。

1
2
3
4
mkdir ./CA/newcerts
touch ./CA/index.txt
echo 00 > ./CA/serial
touch ./CA/index.txt.attr

签发req文件

1
openssl ca -cert CA/EncryptedDriver.crt -keyfile CA/EncryptedDriver.key -in blcert.req -out blcert3.crt -days 36500

将crt文件转为cer文件

1
openssl x509 -inform pem -in blcert.crt -outform der -out blcert.cer

到这里,就完成了终端加密证书的签发。

安装证书到系统/PIV

1
certreq -accept blcert.cer

启动Bitlocker

找到一个合适的分区

image.png

选择使用智能卡

image.png

建议保存一份恢复密钥

仅加密已用磁盘空间

下一步直到完成

其他

关于微软官方指南中的DRA目前还不知道干什么用,怎么用。有兴趣可以再研究一下。

参考资料

yubikey+BitLocker的先辈文章

Openssl Config文档

微软官方关于PIV+BitLocker的指南

使用certreq+openssl签发HTTPS证书

certreq 使用说明