Azure App Service에서 TLS/SSL 바인딩으로 사용자 지정 DNS 이름 보호

이 문서에서는 인증서 바인딩을 만들어 App Service 앱 또는 함수 앱에서 사용자 지정 도메인을 보호하는 방법을 보여 줍니다. 완료되면 사용자 지정 DNS 이름(예: https://www.contoso.com)의 https:// 엔드포인트에서 App Service 앱에 액세스할 수 있습니다.

Web app with custom TLS/SSL certificate

필수 조건

1. 바인딩 추가

Azure portal에서:

  1. 왼쪽 메뉴에서 App Services><app-name>을 선택합니다.

  2. 앱의 왼쪽 탐색 영역에서 사용자 지정 도메인을 선택합니다.

  3. 사용자 지정 도메인 옆에 있는 바인딩 추가를 선택합니다.

    A screenshot showing how to launch the Add TLS/SSL Binding dialog.

  4. 앱에 선택한 사용자 지정 도메인에 대한 인증서가 이미 있는 경우 인증서에서 선택할 수 있습니다. 그렇지 않은 경우 원본의 선택 항목 중 하나를 사용하여 인증서를 추가해야 합니다.

    • App Service 관리형 인증서 만들기 - App Service에서 사용자가 선택한 도메인에 대한 관리형 인증서를 만들 수 있습니다. 이 옵션이 가장 간단한 옵션입니다. 자세한 내용은 무료 관리형 인증서 만들기를 참조하세요.
    • App Service 인증서 가져오기 - App Service 인증서에서 선택한 도메인에 대해 구매한 App Service 인증서를 선택합니다.
    • 인증서 업로드(.pfx) - 프라이빗 인증서 업로드의 워크플로에 따라 로컬 컴퓨터에서 PFX 인증서를 업로드하고 인증서 암호를 지정합니다.
    • Key Vault에서 가져오기 - Key Vault 인증서 선택을 선택하고 대화 상자에서 인증서를 선택합니다.
  5. TLS/SSL 형식에서 SNI SSLIP 기반 SSL 중에서 선택합니다.

    • SNI SSL: 여러 개의 SNI SSL 바인딩을 추가할 수 있습니다. 이 옵션을 사용하면 여러 TLS/SSL 인증서로 같은 IP 주소의 여러 도메인을 보호할 수 있습니다. 최신 브라우저(Internet Explorer, Chrome, Firefox 및 Opera 포함)는 SNI를 지원합니다(자세한 내용은 서버 이름 표시 참조).
      • IP 기반 SSL: IP SSL 바인딩 하나만 추가할 수 있습니다. 이 옵션을 사용하면 전용 공용 IP 주소를 보호하는 데 하나의 TLS/SSL 인증서만 사용할 수 있습니다. 바인딩을 구성한 후에 2. IP 기반 SSL에 대한 레코드 다시 매핑의 단계를 따릅니다.
        IP SSL은 표준 계층 이상에서만 지원됩니다.
  6. 새 인증서를 추가할 때 유효성 검사를 선택하여 새 인증서의 유효성을 검사합니다.

  7. 추가를 선택합니다.

    작업이 완료되면 사용자 지정 도메인의 TLS/SSL 상태가 보안으로 변경됩니다.

    A screenshot showing the custom domain secured by a certificate binding.

참고 항목

사용자 지정 도메인보호 상태는 인증서를 사용하여 보호됨을 의미하지만, App Service는 인증서가 자체 서명되었는지 아니면 만료되었는지 확인하지 않습니다. 예를 들어 브라우저가 오류 또는 경고를 표시할 수도 있습니다.

2. IP 기반 SSL에 대한 레코드 다시 매핑

이 단계는 IP 기반 SSL에만 필요합니다. SNI SSL 바인딩의 경우 사용자 지정 도메인에 대한 HTTPS 테스트로 건너뜁니다.

다음과 같은 두 가지 변경 작업을 수행해야 합니다.

  • 기본적으로 앱에서는 공유 공용 IP 주소를 사용합니다. IP SSL을 사용하여 인증서를 바인딩하면 App Service에서 앱에 대한 새로운 전용 IP 주소를 만듭니다. A 레코드를 앱에 매핑한 경우 이 새로운 전용 IP 주소로 도메인 레지스트리를 업데이트합니다.

    앱의 사용자 지정 도메인 페이지가 새로운 전용 IP 주소로 업데이트됩니다. 이 IP 주소를 복사하고 이 새로운 IP 주소에 A 레코드를 다시 매핑합니다.

  • <app-name>.azurewebsites.net에 대한 SNI SSL 바인딩이 있는 경우 모든 CNAME 매핑을 다시 매핑하여 대신 sni.<app-name>.azurewebsites.net(sni 접두사 추가)을 가리킵니다.

3. HTTPS 테스트

다양한 브라우저에서 https://<your.custom.domain>으로 이동하여 앱을 처리하는지 확인합니다.

Screenshot showing an example of browsing to your custom domain with the contoso.com URL highlighted.

애플리케이션 코드는 "x-appservice-proto" 헤더를 통해 프로토콜을 검사할 수 있습니다. 헤더의 값은 http 또는 https입니다.

참고 항목

앱에서 인증서 유효성 검사 오류가 발생한 경우 자체 서명된 인증서를 사용하고 있을 수도 있습니다.

그렇지 않으면 인증서를 PFX 파일로 내보낼 때 중간 인증서를 생략했을 수도 있습니다.

자주 묻는 질문

인증서 바인딩을 변경할 때 앱의 IP 주소가 변경되지 않도록 하려면 어떻게 해야 하나요?

바인딩이 IP SSL이더라도 바인딩을 삭제하면 인바운드 IP 주소가 변경될 수 있습니다. 이것은 IP SSL 바인딩에 이미 있는 인증서를 갱신할 때 특히 중요합니다. 앱의 IP 주소 변경을 방지하려면 다음 단계를 순서대로 수행합니다.

  1. 새 인증서 업로드
  2. 기존 인증서를 삭제하지 않고 원하는 사용자 지정 도메인에 새 인증서를 바인딩합니다. 이 작업은 기존 인증서를 제거하지 않고 바인딩을 바꿉니다.
  3. 기존 인증서를 삭제합니다.

HTTP에서 HTTPS로의 강제 리디렉션을 사용하지 않도록 설정할 수 있나요?

기본적으로 App Service는 HTTP 요청에서 HTTPS로의 리디렉션을 강제로 적용합니다. 이 동작을 사용하지 않도록 설정하려면 일반 설정 구성을 참조하세요.

앱에 대한 최소 TLS 버전을 변경하려면 어떻게 해야 하나요?

앱에는 PCI DSS와 같이 업계 표준에서 권장되는 TLS 수준인 TLS 1.2가 기본적으로 허용됩니다. 다른 TLS 버전을 적용하려면 일반 설정 구성을 참조하세요.

App Service에서 TLS 종료를 처리하려면 어떻게 해야 하나요?

App Service에서, TLS 종료는 네트워크 부하 분산 장치에서 발생하므로 모든 HTTPS 요청은 암호화되지 않은 HTTP 요청으로 앱에 도달합니다. 앱 논리에서 사용자 요청의 암호화 여부를 확인해야 하는 경우 X-Forwarded-Proto 헤더를 검사합니다.

Linux Node.js 구성 가이드와 같은 언어별 구성 가이드에서는 애플리케이션 코드에서 HTTPS 세션을 검색하는 방법을 보여 줍니다.

스크립트를 사용하여 자동화

Azure CLI

웹앱에 사용자 지정 TLS/SSL 인증서 결합

PowerShell

$fqdn="<Replace with your custom domain name>"
$pfxPath="<Replace with path to your .PFX file>"
$pfxPassword="<Replace with your .PFX password>"
$webappname="mywebapp$(Get-Random)"
$location="West Europe"

# Create a resource group.
New-AzResourceGroup -Name $webappname -Location $location

# Create an App Service plan in Free tier.
New-AzAppServicePlan -Name $webappname -Location $location `
-ResourceGroupName $webappname -Tier Free

# Create a web app.
$webapp = New-AzWebApp -Name $webappname -Location $location -AppServicePlan $webappname `
-ResourceGroupName $webappname

Write-Host "Sign in to your domain provider's website and configure the following records:"
Write-Host "A CNAME record that maps $fqdn to $webappname.azurewebsites.net"
Write-Host "A TXT record that maps asuid.$fqdn to the domain verification ID $($webapp.CustomDomainVerificationId)"
Read-Host "Press [Enter] key when ready ..."

# Before continuing, go to your DNS configuration UI for your custom domain and follow the 
# instructions at https://aka.ms/appservicecustomdns to configure a CNAME record for the 
# hostname "www" and point it your web app's default domain name.

# Upgrade App Service plan to Basic tier (minimum required by custom SSL certificates)
Set-AzAppServicePlan -Name $webappname -ResourceGroupName $webappname `
-Tier Basic

# Add a custom domain name to the web app. 
Set-AzWebApp -Name $webappname -ResourceGroupName $webappname `
-HostNames @($fqdn,"$webappname.azurewebsites.net")

# Upload and bind the SSL certificate to the web app.
New-AzWebAppSSLBinding -WebAppName $webappname -ResourceGroupName $webappname -Name $fqdn `
-CertificateFilePath $pfxPath -CertificatePassword $pfxPassword -SslState SniEnabled

추가 리소스