使用SmartCardHSM设置证书颁发机构

2020-05-02 17:48:21

在为内部服务创建内部证书颁发机构时,保护私钥非常重要。当有恶意的人访问签名证书颁发机构的私钥时,该私钥可用于颁发新证书。这将使中间的人能够进行攻击。

我使用了3张智能卡,这些SmartCardHSM都是用设备密钥加密密钥(DKEK)密钥创建的。这使得可以安全地将私钥复制到另一张智能卡。备份密钥和设备密钥加密密钥存储在加密的U盘上。此U盘被复制了3次。

请参阅我以前的博客Poston How to Setup the SmartCard-HSM卡with Device Key Encryption Key。

我们创造了私人气隙系统。我使用Kali Linux LIVE作为这个air gappdd系统的操作系统,Kali Linux LIVE是一个很好的GNU/Linux发行版,通常用于五层测试,但它附带了生成私钥并将私钥复制到备份智能卡(opensc,openssl)所需的工具。

kali@kali:~$PKCS11-tool--module opensc-pkcs11.so--keypairgen--key-type rsa:2048--label ca.inter.stafnet.local--登录使用插槽0和生成的当前令牌(0x0)密钥对:私钥对象;RSA标签:ca.inter.stafnet.local ID:853222fd3b35a4fdf0346d05d9bbc86baa。

使用读卡器:Cherry GmbH SmartTerminal ST-2xxx[供应商接口](*)00 00PKCS#15卡[智能卡-HSM]:版本:0序列号:*制造商ID:www.CardContact.de Flags:<;snip>;私有RSA密钥[ca.inter.stafnet.local]对象标志:[0x03],私有,可修改的用法:[0x2E],解密,签名,signRecover,展开访问标志:[0x1D],敏感,始终敏感,从不提取,本地ModLength:2048 key ref:6(0x06)本机:yes Auth ID:01 ID:853222fd3b35a4fdf0346d05。

root@kali:~#lsblk-o名称、大小、供应商、子系统|grep-i usbsda 3.9G Imation块:scsi:usb:pciroot@kali:~#cryptsetup luksOpen/dev/sda boe输入/dev/sda的密码短语:root@kali:~#mount/dev/mapper/boe/mntroot@kali:~#。

不使文件完全可读始终是个好主意。因此,我们将umask设置为077。

kali@kali:/mnt/hsm$sc-hsm-tool--WRAP-KEY ca.inter.stafnet.local--key-reference 6随卡使用读卡器:Cherry GmbH SmartTerminal ST-2xxx[供应商界面](21121745111568)00 00输入用户个人识别码:

kali@kali:/mnt/hsm$sc-hsm-tool--展开密钥ca.inter.stafnet.local--key-参考6随卡使用读卡器:Cherry GmbH SmartTerminal ST-2xxx[供应商接口](21121745111568)00 00封装密钥包含:KEY BLOB私钥描述(PRKD)证书输入用户PIN:密钥已成功导入。

kali@kali:/mnt/hsm$pkcs15-tool-duse读卡器:Cherry GmbH SmartTerminal ST-2xxx[供应商接口](*)00 00PKCS#15卡[智能卡-HSM]:版本:0序列号:*制造商ID:www.CardContact.de Flags:<;snip>;私有RSA密钥[ca.inter.stafnet.local]对象标志:[0x03],私有,可修改用法:[0x2E],解密,签名,信号恢复,展开访问标志:[0x1D],敏感,始终敏感,从不提取,本地ModLength:2048密钥引用:6(0x06).。

我的CA Authority在GNU/Linux CentOS 8主机上运行。大多数公共CA授权机构将具有“根CA证书”和“中间CA证书”。根CA证书仅用于签署中间证书。中间证书用于签署客户端证书。我将只使用单个证书设置。有些人已经发现这对家庭设置来说有些矫枉过正:-)。

[ca]部分是OpenSSL ca的起点,default_ca设置为[CA_default]。

x509_Extensions设置为usr_cert。这定义了颁发新证书时应用的属性。

##[CA_DEFAULT]dir=/HOME/staf/ca/ca.inter.stafnet.local#其中一切都是keptcerts=$dir/certs#其中发布的证书是keptcrl_dir=$dir/crl#其中发布的crl是keptdatabase=$dir。/index.txt#数据库索引文件。#UNIQUE_SUBJECT=NO#设置为';no';以允许创建具有相同主题的#多个证书。new_certs_dir=$dir/newcerts#新证书的默认位置。Certificate=$dir/cacert.pem.。

x509_Extensions设置为usr_cert。这定义了颁发新证书时应用的属性。如果要使用CRL,请更新属性,如nsCaRevocationUrl。

[usr_cert]#这些扩展是在';ca';签署请求时添加的。#这违反了PKIX准则,但有些CA这样做,有些软件#需要这样做,以避免将最终用户证书解释为CA。basicConstraints=CA:false#下面是一些使用nsCertType的示例。如果它被省略了