使用密钥保管库生成客户端证书

7

针对我们的点到站点VPN,我们希望创建根证书。 这样,我们可以为所有需要登录我们的VPN的合作伙伴创建任意数量的客户端证书。(Azure虚拟网络)

手动执行此操作效果很好。我们生成一个充当根CA的证书(自签名)。我们可以像这样在PowerShell中执行此操作:

$cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature -Subject "CN=Kratos Point To Site VPN Root Certificate Win10" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign

$clientCert = New-SelfSignedCertificate -Type Custom -KeySpec Signature -Subject "CN=Digicreate Point To Site VPN Client Certificate Win10" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")

然而,我们更喜欢使用密钥保管库来管理证书。这个想法是通过使用以下命令直接在密钥保管库中创建证书: Add-AzureKeyVaultCertificate (私钥不可导出)

创建根证书非常完美。但我无法找到如何使用密钥保管库中的“签署”操作签署新证书的方法。

您有任何关于如何完成此操作的示例吗?

2个回答

0

0
但我想使用Azure Key Vault cmdlets基于此根证书创建客户端证书。这可能吗?
您的意思是要下载证书吗?如果是,我们可以使用此脚本进行下载:
将私有证书下载到D:\ cert:
$kvSecret = Get-AzureKeyVaultSecret -VaultName 'jasontest2' -Name 'TestCert01'
$kvSecretBytes = [System.Convert]::FromBase64String($kvSecret.SecretValueText)
$certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
$certCollection.Import($kvSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, 'test')
$pfxPath = 'D:\cert\test.pfx'
[System.IO.File]::WriteAllBytes($pfxPath, $protectedCertificateBytes)

将公共证书下载到 D:\cert 目录:

$cert = Get-AzureKeyVaultCertificate -VaultName 'jasontest2' -Name 'TestCert01'
$filePath ='D:\cert\TestCertificate.cer'
$certBytes = $cert.Certificate.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert)
[System.IO.File]::WriteAllBytes($filePath, $certBytes)

更新: $certificateOperation.CertificateSigningRequest 是证书的 base4 编码证书签名请求。
Import-AzureKeyVaultCertificate -VaultName $vaultName -Name $certificateName -FilePath C:\test\OutputCertificateFile.cer

更多信息请参考博客


更新:
我们应该使用您的CA服务器进行签名操作来签署CertificateSignRequest。

企业证书:
如果您正在使用企业证书解决方案,请生成一个客户端证书,其通用名称值格式为“name@yourdomain.com”,而不是“domain name\username”格式。确保客户端证书基于具有“客户端身份验证”作为使用列表中的第一项而不是智能卡登录等的“用户”证书模板。您可以通过双击客户端证书并查看详细信息>增强型密钥用途来检查证书。


2
我想用自定义根证书签署新创建的证书。我不想将CA的私钥暴露在密钥保险库之外。想法是使用根CA的私钥,在密钥保险库中使用签名操作来签署CertificateSignRequest。但是,我找不到任何关于如何在PowerShell中执行此操作的示例... - Identity
2
你有签署此CSR并更新客户端证书以使其正常工作的示例吗?我们的点对站VPN有一个根CA。要创建客户端证书,我需要使用根CA密钥库中的签名操作来签署CSR。我能够创建我的根CA,但是我找不到正确签署此客户端证书的示例... - Identity
根据您的描述,我认为我们无法创建客户端证书,因为密钥保管库就像存储证书的存储库,我们无法使用密钥保管库中的签名操作对CertificateSignRequest进行签名。 - Jason Ye
1
我也这么认为,但是我找不到如何使用自签名根证书正确签署CSR的示例...(我注意到我的问题不太清楚,所以我在我的初始帖子中尝试更好地解释它...) - Identity
@Identity 或许我们可以将证书复制到其他客户端并安装它们,这样我们就可以使用该证书连接您的 VPN。 - Jason Ye
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接