透過 PowerShell 設定應用程式閘道的相互驗證
本文說明如何使用 PowerShell,在您的應用程式閘道上設定相互驗證。 相互驗證是指應用程式閘道使用您上傳至應用程式閘道的用戶端憑證,來驗證傳送要求的用戶端。
如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
注意
建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 若要開始使用,請參閱 安裝 Azure PowerShell。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az。
本文需要 Azure PowerShell 模組 1.0.0 版或更新版本。 執行 Get-Module -ListAvailable Az
以尋找版本。 如果您需要升級,請參閱安裝 Azure PowerShell 模組。 如果正在本機執行 PowerShell,也需要執行 Login-AzAccount
,以建立與 Azure 的連線。
開始之前
若要設定應用程式閘道的相互驗證,您需要將用戶端憑證上傳至閘道。 用戶端憑證會用來驗證用戶端要提供給應用程式閘道的憑證。 如果要進行測試,您可以使用自我簽署憑證。 不過,不建議您將其用於生產工作負載,因為這種工作負載較難管理,也並非完全安全。
若要深入了解您可以上傳何種用戶端憑證,請參閱應用程式閘道的相互驗證概觀。
建立資源群組
首先,在您的訂閱中建立新的資源群組。
$resourceGroup = New-AzResourceGroup -Name $rgname -Location $location -Tags @{ testtag = "APPGw tag"}
建立虛擬網路
部署要部署應用程式閘道的虛擬網路。
$gwSubnet = New-AzVirtualNetworkSubnetConfig -Name $gwSubnetName -AddressPrefix 10.0.0.0/24
$vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgname -Location $location -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet
$vnet = Get-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgname
$gwSubnet = Get-AzVirtualNetworkSubnetConfig -Name $gwSubnetName -VirtualNetwork $vnet
建立公用 IP
建立要與應用程式閘道搭配使用的公用 IP。
$publicip = New-AzPublicIpAddress -ResourceGroupName $rgname -name $publicIpName -location $location -AllocationMethod Static -sku Standard
建立應用程式閘道 IP 設定
建立 IP 設定與前端連接埠。
$gipconfig = New-AzApplicationGatewayIPConfiguration -Name $gipconfigname -Subnet $gwSubnet
$fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name $fipconfigName -PublicIPAddress $publicip
$port = New-AzApplicationGatewayFrontendPort -Name $frontendPortName -Port 443
設定前端 SSL
設定應用程式閘道的 SSL 憑證。
$password = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force
$sslCertPath = $basedir + "/ScenarioTests/Data/ApplicationGatewaySslCert1.pfx"
$sslCert = New-AzApplicationGatewaySslCertificate -Name $sslCertName -CertificateFile $sslCertPath -Password $password
設定用戶端驗證
在您的應用程式閘道上設定用戶端驗證。 如需如何擷取受信任用戶端 CA 憑證鏈結以在此處使用的詳細資訊,請參閱如何擷取受信任的用戶端 CA 憑證鏈結。
重要
請確保您以一個檔案上傳整個用戶端 CA 憑證鏈結,而且每個檔案只有一個鏈結。
注意
我們建議使用 TLS 1.2 搭配相互驗證,因為之後會要求使用 TLS 1.2。
$clientCertFilePath = $basedir + "/ScenarioTests/Data/TrustedClientCertificate.cer"
$trustedClient01 = New-AzApplicationGatewayTrustedClientCertificate -Name $trustedClientCert01Name -CertificateFile $clientCertFilePath
$sslPolicy = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName "AppGwSslPolicy20170401S"
$clientAuthConfig = New-AzApplicationGatewayClientAuthConfiguration -VerifyClientCertIssuerDN
$sslProfile01 = New-AzApplicationGatewaySslProfile -Name $sslProfile01Name -SslPolicy $sslPolicy -ClientAuthConfiguration $clientAuthConfig -TrustedClientCertificates $trustedClient01
$listener = New-AzApplicationGatewayHttpListener -Name $listenerName -Protocol Https -SslCertificate $sslCert -FrontendIPConfiguration $fipconfig -FrontendPort $port -SslProfile $sslProfile01
設定後端集區和設定
設定應用程式閘道的後端集區和設定。 可選擇設定後端信任的根憑證以進行端對端 SSL 加密。
$certFilePath = $basedir + "/ScenarioTests/Data/ApplicationGatewayAuthCert.cer"
$trustedRoot = New-AzApplicationGatewayTrustedRootCertificate -Name $trustedRootCertName -CertificateFile $certFilePath
$pool = New-AzApplicationGatewayBackendAddressPool -Name $poolName -BackendIPAddresses www.microsoft.com, www.bing.com
$poolSetting = New-AzApplicationGatewayBackendHttpSettings -Name $poolSettingName -Port 443 -Protocol Https -CookieBasedAffinity Enabled -PickHostNameFromBackendAddress -TrustedRootCertificate $trustedRoot
設定規則
在您的應用程式閘道上設定規則。
$rule = New-AzApplicationGatewayRequestRoutingRule -Name $ruleName -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
為未來的接聽程式設定預設 SSL 原則
設定相互驗證時,您已設定了接聽程式特定的 SSL 原則。 在此步驟中,您可以選擇為您所建立的未來接聽程式設定預設 SSL 原則。
$sslPolicyGlobal = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName "AppGwSslPolicy20170401"
建立應用程式閘道
使用我們在上面建立的所有原則,部署您的應用程式閘道。
$sku = New-AzApplicationGatewaySku -Name Standard_v2 -Tier Standard_v2
$appgw = New-AzApplicationGateway -Name $appgwName -ResourceGroupName $rgname -Zone 1,2 -Location $location -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting -FrontendIpConfigurations $fipconfig -GatewayIpConfigurations $gipconfig -FrontendPorts $port -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -SslPolicy $sslPolicyGlobal -TrustedRootCertificate $trustedRoot -AutoscaleConfiguration $autoscaleConfig -TrustedClientCertificates $trustedClient01 -SslProfiles $sslProfile01 -SslCertificates $sslCert
清除資源
當不再需要資源群組、應用程式閘道及所有相關資源時,請使用 Remove-AzResourceGroup 來將其移除。
Remove-AzResourceGroup -Name $rgname
更新過期的用戶端 CA 憑證
如果您的用戶端 CA 憑證已過期,則可以透過下列步驟更新閘道上的憑證:
- 登入 Azure
Connect-AzAccount Select-AzSubscription -Subscription "<sub name>"
- 取得應用程式閘道設定
$gateway = Get-AzApplicationGateway -Name "<gateway-name>" -ResourceGroupName "<resource-group-name>"
- 從閘道移除受信任的用戶端憑證
Remove-AzApplicationGatewayTrustedClientCertificate -Name "<name-of-client-certificate>" -ApplicationGateway $gateway
- 將新的憑證新增至閘道
Add-AzApplicationGatewayTrustedClientCertificate -ApplicationGateway $gateway -Name "<name-of-new-cert>" -CertificateFile "<path-to-certificate-file>"
- 使用新的憑證更新閘道
Set-AzApplicationGateway -ApplicationGateway $gateway