如何使用 Powershell 将证书添加到 Azure RM 网站

How to add a certificate to an Azure RM website with Powershell

How to add an SSL certificate to an azure website using powershell?

关系不大

我正在尝试通过 Powershell 将证书添加到 Azure RM 网站。

我认为没有直接的 Azure Powershell 命令,需要通过 New-AzureRmResource

完成

我看到了下面的文章,它通过创建 Azure 应用程序网关通过 powershell 配置 SSL

https://azure.microsoft.com/en-us/documentation/articles/application-gateway-ssl/

通过 ARM Template 查看 "Microsoft.Web/certificates" 模板需要一个 pfxblob 和一个密码。

似乎获取 pfxblob 的最简单方法是通过 New-AzureRmApplicationGatewaySslCertificate(感谢@vigneshaj 的指点)读取 source,这似乎只是一个本地对话 cmdlet。所以不管它是不是一个应用网关,我们需要的只是它传回的数据。

$pfx = New-AzureRmApplicationGatewaySslCertificate -Name example `
        -CertificateFile E:\PS\example.pfx `
        -Password "bananas" 

获得该数据后,我们只需将其插入 New-AzureRmResource,它就会在 Azure 上创建我们的证书。

这个的小问题是,如果你是一个小气鬼(像我一样)并且你已经从提供 sha256 证书的中国 CA 获得了免费证书,这个过程将被取消使用 sha256 对页面进行签名的证书,因此它会退回到 TLS 1.2,这会产生错误(至少在 Chrome 上)

$ResourceLocation = "West Europe"
$ResourceName = "Newcertificate"
$PropertiesObject = @{
pfxBlob = $pfx.Data
password = $pfx.Password 
}

New-AzureRmResource -Name $ResourceName -Location $ResourceLocation `
                    -PropertyObject $PropertiesObject `
                    -ResourceGroupName examplecomRG `
                    -ResourceType Microsoft.Web/certificates `
                    -ApiVersion 2015-08-01 -Force

接下来的工作是配置您的 Web 应用程序以使用该证书。因为这些属性是 hostNameSslStates 数组的子对象,所以我创建了一个内部散列 table,然后附加了它。我敢肯定有一种更优雅的方式,但这行得通!

$ResourceName = "ConfuseioWebapp"
$InnerPropertiesObject = @{
        name = "www.example.com"
        sslState = 1
        thumbprint = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
      }
$PropertiesObject = @{
    "hostNameSslStates" = [Object[]]$InnerPropertiesObject 
}

New-AzureRmResource -Name $ResourceName `
                    -Location $ResourceLocation `
                    -PropertyObject $PropertiesObject `
                    -ResourceGroupName examplecomRG `
                    -ResourceType Microsoft.Web/sites `
                    -ApiVersion 2015-08-01 -Force

差不多就这些了。

在最新版本的 Azure PowerShell v 1.1.0 中,有许多新命令用于处理 Azure Web 应用程序中的 SSL 证书

您可以使用

上传证书并将其绑定到主机名
New-AzureRmWebAppSSLBinding -ResourceGroupName myresourcegroup -WebAppName mytestapp -CertificateFilePath PathToPfxFile -CertificatePassword PlainTextPwd -Name www.contoso.com

然后删除绑定但不删除证书,在您添加引用该证书的应用程序设置后,应用程序应该能够使用它(这应该使用门户来完成 - PowerShell 命令会这样做很快 - 现在没有预计到达时间)

Remove-AzureRmWebAppSSLBinding -ResourceGroupName myresourcegroup -WebAppName mytestapp -Name www.contoso.com -DeleteCertificate $false