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

时间:2017-08-07 15:51:09

标签: azure certificate azure-keyvault

对于我们的站点VPN,我们想要创建一个根证书。 因此,我们可以为需要登录VPN的所有合作伙伴创建尽可能多的客户端证书。 (Azure虚拟网络)

手动完成此操作非常完美。我们生成一个作为root ca的证书(自签名)。我们可以在PowerShell中这样做:

@Test
public void testJson() {
    String json = "{\n"
        + "    \"name\":\"John\",\n"
        + "    \"age\":30,\n"
        + "    \"cars\": [\n"
        + "        { \"name\":\"Ford\", \"models\":[ \"Fiesta\", \"Focus\", \"Mustang\" ] },\n"
        + "        { \"name\":\"BMW\", \"models\":[ \"320\", \"X3\", \"X5\" ] },\n"
        + "        { \"name\":\"Fiat\", \"models\":[ \"500\", \"Panda\" ] }\n"
        + "    ]\n"
        + " }";

    CarInfo carinfo = deserialise(json);

    // for the above JSON this JsonPath call will return "Ford"
    Assert.assertEquals(JsonPath.read(json, "$.cars[0].name"), carinfo.getCars().get(0).getName());
}

但是,我们更喜欢使用密钥保险库进行证书管理。我们的想法是使用以下命令直接在密钥库中创建证书: Add-AzureKeyVaultCertificate(私钥不可导出)

创建根证书非常有效。但我无法找到如何使用'签署新证书?关键金库中的操作。

你有关于如何做到这一点的样本吗?

2 个答案:

答案 0 :(得分:0)

  

但我想基于此根目录创建客户端证书   带有天蓝色密钥保险库cmdlet的证书。这可能吗?

您的意思是要下载证书吗?如果是,我们可以使用此脚本下载它:

将私人证书下载到您的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

更多信息请参阅此blog

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

  

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

答案 1 :(得分:0)

请参阅"手动创建证书并由CA签署" https://blogs.technet.microsoft.com/kv/2016/09/26/get-started-with-azure-key-vault-certificates/

中的部分