Azure AppGW SSL Offload 的快速打开方式

 

 

 

 

       很多童鞋在日常项目中经常会碰到 SSL 终结卸载的需求,随着证书、域名的引入复杂度骤增,整个人都不好了。今天我来带大家玩一下 AppGW SSL Offload 的快速打开方式,希望通过这个小栗子帮助大家快速上手 AppGW SSL Offload,以后客户有关于SSL Offload的场景都可以快速帮客户搭建一个PoC场景。

       开始之前大家需要准备好一个 China Azure 的账户和一个 Global Azure 的账户,为了实现快速,Certification 和 Domain Name 无须在第三方机构购买,我们采用在 Global Azure 上使用 App Service Certificates 服务和 App Service Domains 服务,一站式在 Azure 上搞定。

1. 实验目标:

2. 准备域名

    先创建域名是因为在申请证书时需要依赖域名服务做校验,校验成功证书才可以申请成功。

登陆 Global Azure,查找 App Service Domains 服务,选择添加。(五天之内删除免费,这个时间做个POC足够了)

3. 准备证书

此实验中,我们共计 SSL 卸载两个站点 www.appgwdemo.org 和 demo.appgwdemo.org,这里我们针对这两个域名分别创建证书

登陆 Global Azure,选择 app service certificates 服务,选择添加

www.appgwdemo.org 申请时需注意,www 需要略去,直接填写 appgwdemo.org 即可, SKU 选择 Standard 即可,如果需要通配符证书,选择 W1 SKU。

 demo.appgwdemo.org 申请时需注意,直接填写 demo.appgwdemo.org 即可,

 

4. 激活证书

证书创建后处于 Pending 状态,因为是为某个域名申请证书,自然需要证明申请人是域名的所有者,此步进行证书激活,选择创建好的证书,选择 Certificate Configuration。

选择 Store,创建一个 Key Vault 来保存证书

选择验证,选择 Domain Verification 方法,因为 Domain 已经托管在 Azure 上,Azure 自动在 Domain 下创建一条 txt 的认证记录。

5. 导出证书

证书激活后,证书已经保存在 Key Vault 中,可通过脚本导出 pfx 证书文件,用于 AppGW 使用。在下述 Powershell 脚本中替换 appServiceCertificateName, resourceGroupName, azureLoginEmailId, subscriptionId, 

$appServiceCertificateName = ""
$resourceGroupName = ""
$azureLoginEmailId = ""
$subscriptionId = ""

Login-AzureRmAccount
Set-AzureRmContext -SubscriptionId $subscriptionId

$ascResource = Get-AzureRmResource -ResourceName $appServiceCertificateName -ResourceGroupName $resourceGroupName -ResourceType "Microsoft.CertificateRegistration/certificateOrders" -ApiVersion "2015-08-01"
$keyVaultId = ""
$keyVaultSecretName = ""

$certificateProperties=Get-Member -InputObject $ascResource.Properties.certificates[0] -MemberType NoteProperty
$certificateName = $certificateProperties[0].Name
$keyVaultId = $ascResource.Properties.certificates[0].$certificateName.KeyVaultId
$keyVaultSecretName = $ascResource.Properties.certificates[0].$certificateName.KeyVaultSecretName

$keyVaultIdParts = $keyVaultId.Split("/")
$keyVaultName = $keyVaultIdParts[$keyVaultIdParts.Length - 1]
$keyVaultResourceGroupName = $keyVaultIdParts[$keyVaultIdParts.Length - 5]
Set-AzureRmKeyVaultAccessPolicy -ResourceGroupName $keyVaultResourceGroupName -VaultName $keyVaultName -UserPrincipalName $azureLoginEmailId -PermissionsToSecrets get
$secret = Get-AzureKeyVaultSecret -VaultName $keyVaultName -Name $keyVaultSecretName
$pfxCertObject=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList @([Convert]::FromBase64String($secret.SecretValueText),"", [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$pfxPassword = -join ((65..90) + (97..122) + (48..57) | Get-Random -Count 50 | % {[char]$_})
$currentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
[io.file]::WriteAllBytes(".\appservicecertificate.pfx", $pfxCertObject.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $pfxPassword))
Write-Host "Created an App Service Certificate copy at: $currentDirectory\appservicecertificate.pfx"
Write-Warning "For security reasons, do not store the PFX password. Use it directly from the console as required."
Write-Host "PFX password: $pfxPassword"

通过 Powershell –ExecutionPolicy Bypass .\copyasc.ps1 执行,因为要导出两个证书,可将脚本两次执行时修改相应的文件保留路径 .\appservicecertificate(x).pfx ,执行后保留 PFX password。

6. 创建配置 AppGW 应用网关

创建多站点侦听器

准备后端站点虚拟机,创建两台 Ubuntu 虚拟机,放置在和 AppGW 相同的 VNet 中,安装 Apache2 并配置 ServerName 和 default html 页面

在 /etc/apache2/apache2.conf 中增加 ServerName www.appgwdemo.org, 另外一台增加 ServerName demo.appgwdemo.org

在 /var/www/html/index.html Body 部分中替换 Apache2 Ubuntu default page 为 Apache2 Ubuntu www.appgwdemo.org, 另外一台替换为 为 Apache2 Ubuntu demo.appgwdemo.org

添加后端池

在 AppGW 中创建后端池 appgwdemo1 和 appgwdemo2,分别将前面所创建的两台后端服务器放入到相应的后端池中

创建规则

7. 配置 DNS 记录,将 www.appgwdemo.org 和 demo.appgwdemo.org CNAME 指向 APPGW FQDN

选择前面创建的 appgwdemo 域名服务,选择 DNS zone

选择添加记录

 

 

8. 验证访问 https 访问

 https://www.appgwdemo.org

https://demo.appgwdemo.org

查看证书

 

 

 

        好了,到此为止,一个 multisite 的 SSL Offload 的 demo 就搞定了,一站式在 AZURE 上完成。再也不用担心给客户做 PoC 啦。

posted @ 2018-06-04 16:38  wekang  阅读(1080)  评论(1编辑  收藏  举报