다음을 통해 공유


사용자 지정 루트 CA를 사용하여 Azure Application Gateway 자체 서명된 인증서 생성

Application Gateway v2 SKU는 신뢰할 수 있는 루트 인증서를 사용하여 백 엔드 서버와의 TLS 연결을 허용합니다. 이 조항은 v1 SKU에서 요구되었던 인증 인증서(개별 리프 인증서)의 사용을 제거합니다. 루트 인증서는 백엔드 인증서 서버에서 가져온 Base-64로 인코딩된 X.509(.CER) 형식의 루트 인증서입니다. 서버 인증서를 발급한 루트 CA(인증 기관)를 식별하고 서버 인증서는 TLS/SSL 통신에 사용됩니다.

Application Gateway는 잘 알려진 CA(예: GoDaddy 또는 DigiCert)로 서명된 경우 기본적으로 웹 사이트의 인증서를 신뢰합니다. 이 경우 루트 인증서를 명시적으로 업로드할 필요가 없습니다. 자세한 내용은 Application Gateway를 사용한 TLS 종료 및 종단 간 TLS 개요를 참조하세요. 그러나 개발/테스트 환경이 있고 확인된 CA 서명 인증서를 구입하지 않으려는 경우 고유한 사용자 지정 루트 CA 및 해당 루트 CA에서 서명한 리프 인증서를 만들 수 있습니다.

비고

자체 생성된 인증서는 기본적으로 신뢰할 수 없으며 유지 관리가 어려울 수 있습니다. 또한 강력하지 않을 수 있는 오래된 해시 및 암호 그룹을 사용할 수 있습니다. 보안 향상을 위해 잘 알려진 인증 기관에서 서명한 인증서를 구매합니다.

다음 옵션을 사용하여 백 엔드 TLS 연결에 대한 프라이빗 인증서를 생성할 수 있습니다.

  1. 원클릭 프라이빗 인증서 생성기 도구를 사용합니다. 이 도구는 사용자가 제공하는 도메인 이름(일반 이름)을 사용하여 이 문서에 설명된 것과 동일한 단계를 수행하여 루트 및 서버 인증서를 생성합니다. 생성된 인증서 파일을 사용하여 루트 인증서(.CER) 파일을 게이트웨이의 백엔드 설정에 즉시 업로드할 수 있으며, 인증서 체인(.PFX) 파일을 백엔드 서버에 업로드할 수 있습니다. PFX 파일의 암호도 다운로드한 ZIP 파일에 제공됩니다.

  2. OpenSSL 명령을 사용하여 필요에 따라 인증서를 사용자 지정하고 생성합니다. 전적으로 직접 수행하려는 경우 이 문서의 지침을 계속 따르세요.

이 아티클에서는 다음 방법을 설명합니다.

  • 사용자 고유의 사용자 지정 인증 기관 만들기
  • 사용자 지정 CA에서 서명한 자체 서명된 인증서 만들기
  • Application Gateway에 자체 서명된 루트 인증서를 업로드하여 백 엔드 서버 인증

필수 조건

  • Windows 또는 Linux를 실행하는 컴퓨터의 OpenSSL

    인증서 관리에 사용할 수 있는 다른 도구가 있을 수 있지만 이 자습서에서는 OpenSSL을 사용합니다. Ubuntu와 같은 많은 Linux 배포와 함께 번들로 제공되는 OpenSSL을 찾을 수 있습니다.

  • 웹 서버

    예를 들어 Apache, IIS 또는 NGINX를 사용하여 인증서를 테스트합니다.

  • 애플리케이션 게이트웨이 v2 SKU

    기존 애플리케이션 게이트웨이가 없는 경우 빠른 시작: Azure Application Gateway를 사용한 직접 웹 트래픽 - Azure Portal을 참조하세요.

루트 CA 인증서 만들기

OpenSSL을 사용하여 루트 CA 인증서를 만듭니다.

루트 키 만들기

  1. OpenSSL이 설치된 컴퓨터에 로그인하고 다음 명령을 실행합니다. 그러면 암호화된 키가 만들어집니다.

    openssl ecparam -out contoso.key -name prime256v1 -genkey
    

루트 인증서 만들기 및 자체 서명

  1. 다음 명령을 사용하여 CSR(인증서 서명 요청)을 생성합니다.

    openssl req -new -sha256 -key contoso.key -out contoso.csr
    
  2. 메시지가 표시되면 루트 키의 암호와 국가/지역, 주, 조직, OU 및 정규화된 도메인 이름(발급자의 도메인)과 같은 사용자 지정 CA에 대한 조직 정보를 입력합니다.

    루트 인증서 만들기

  3. 다음 명령을 사용하여 루트 인증서를 생성합니다.

    openssl x509 -req -sha256 -days 365 -in contoso.csr -signkey contoso.key -out contoso.crt
    

    이전 명령은 루트 인증서를 만듭니다. 이를 사용하여 서버 인증서에 서명합니다.

서버 인증서 만들기

다음으로 OpenSSL을 사용하여 서버 인증서를 만듭니다.

인증서의 키 만들기

다음 명령을 사용하여 서버 인증서에 대한 키를 생성합니다.

openssl ecparam -out fabrikam.key -name prime256v1 -genkey

CSR 만들기(인증서 서명 요청)

CSR은 인증서를 요청할 때 CA에 제공되는 공개 키입니다. CA는 이 특정 요청에 대한 인증서를 발급합니다.

비고

서버 인증서의 CN(일반 이름)은 발급자의 도메인과 달라야 합니다. 예를 들어 이 경우 발급자의 CN은 www.contoso.com 서버 인증서의 CN입니다 www.fabrikam.com.

  1. 다음 명령을 사용하여 CSR을 생성합니다.

    openssl req -new -sha256 -key fabrikam.key -out fabrikam.csr
    
  2. 메시지가 표시되면 루트 키의 암호와 사용자 지정 CA에 대한 조직 정보(국가/지역, 주, 조직, OU 및 정규화된 도메인 이름)를 입력합니다. 이는 웹 사이트의 도메인이며 발급자와 달라야 합니다.

    서버 인증서

CSR 및 키를 사용하여 인증서를 생성하고 CA의 루트 키로 서명합니다.

  1. 다음 명령을 사용하여 인증서를 만듭니다.

    openssl x509 -req -in fabrikam.csr -CA  contoso.crt -CAkey contoso.key -CAcreateserial -out fabrikam.crt -days 365 -sha256
    

새로 만든 인증서 확인

  1. 다음 명령을 사용하여 CRT 파일의 출력을 인쇄하고 해당 콘텐츠를 확인합니다.

    openssl x509 -in fabrikam.crt -text -noout
    

    인증서 확인

  2. 디렉터리의 파일을 확인하고 다음 파일이 있는지 확인합니다.

    • contoso.crt
    • contoso.key
    • fabrikam.crt
    • fabrikam.key

웹 서버의 TLS 설정에서 인증서 구성

웹 서버에서 fabrikam.crt 및 fabrikam.key 파일을 사용하여 TLS를 구성합니다. 웹 서버에서 두 개의 파일을 사용할 수 없는 경우 OpenSSL 명령을 사용하여 단일 .pem 또는 .pfx 파일에 결합할 수 있습니다.

IIS

인증서를 가져와 IIS에서 서버 인증서로 업로드하는 방법에 대한 지침은 방법: Windows Server 2003의 웹 서버에 가져온 인증서 설치를 참조하세요.

TLS 바인딩 지침은 IIS 7에서 SSL을 설정하는 방법을 참조하세요.

아파치

다음 구성은 Apache에서 SSL에 대해 구성된 가상 호스트 의 예입니다.

<VirtualHost www.fabrikam:443>
      DocumentRoot /var/www/fabrikam
      ServerName www.fabrikam.com
      SSLEngine on
      SSLCertificateFile /home/user/fabrikam.crt
      SSLCertificateKeyFile /home/user/fabrikam.key
</VirtualHost>

NGINX

다음 구성은 TLS 구성을 사용하는 NGINX 서버 블록 의 예입니다.

TLS를 사용하는 NGINX

서버에 액세스하여 구성 확인

  1. 컴퓨터의 신뢰할 수 있는 루트 저장소에 루트 인증서를 추가합니다. 웹 사이트에 액세스할 때 전체 인증서 체인이 브라우저에 표시되는지 확인합니다.

    신뢰할 수 있는 루트 인증서

    비고

    DNS가 웹 서버 이름(이 예제 www.fabrikam.com에서는)을 웹 서버의 IP 주소를 가리키도록 구성된 것으로 가정합니다. 그렇지 않은 경우 호스트 파일을 편집하여 이름을 확인할 수 있습니다.

  2. 웹 사이트로 이동하고 브라우저의 주소 상자에서 잠금 아이콘을 클릭하여 사이트 및 인증서 정보를 확인합니다.

OpenSSL을 사용하여 구성 확인

또는 OpenSSL을 사용하여 인증서를 확인할 수 있습니다.

openssl s_client -connect localhost:443 -servername www.fabrikam.com -showcerts

OpenSSL 인증서 확인

Application Gateway의 HTTP 설정에 루트 인증서 업로드

Application Gateway에서 인증서를 업로드하려면 .crt 인증서를 Base-64로 인코딩된 .cer 형식으로 내보내야 합니다. .crt 파일에는 base-64로 인코딩된 형식의 공개 키가 이미 포함되어 있으므로, 파일 확장자를 .crt에서 .cer로 간단히 변경하세요.

Azure 포털

포털에서 신뢰할 수 있는 루트 인증서를 업로드하려면 백 엔드 설정을 선택하고 백 엔드 프로토콜에서 HTTPS를 선택합니다.

포털을 사용하여 인증서를 추가하는 스크린샷

Azure PowerShell

또는 Azure CLI 또는 Azure PowerShell을 사용하여 루트 인증서를 업로드할 수 있습니다. 다음 코드는 Azure PowerShell 샘플입니다.

비고

다음 샘플에서는 애플리케이션 게이트웨이에 신뢰할 수 있는 루트 인증서를 추가하고, 새 HTTP 설정을 만들고, 백 엔드 풀과 수신기가 이미 있다고 가정하여 새 규칙을 추가합니다.

## Add the trusted root certificate to the Application Gateway

$gw=Get-AzApplicationGateway -Name appgwv2 -ResourceGroupName rgOne

Add-AzApplicationGatewayTrustedRootCertificate `
   -ApplicationGateway $gw `
   -Name CustomCARoot `
   -CertificateFile "C:\Users\surmb\Downloads\contoso.cer"

$trustedroot = Get-AzApplicationGatewayTrustedRootCertificate `
   -Name CustomCARoot `
   -ApplicationGateway $gw

## Get the listener, backend pool and probe

$listener = Get-AzApplicationGatewayHttpListener `
   -Name basichttps `
   -ApplicationGateway $gw

$bepool = Get-AzApplicationGatewayBackendAddressPool `
  -Name testbackendpool `
  -ApplicationGateway $gw

Add-AzApplicationGatewayProbeConfig `
  -ApplicationGateway $gw `
  -Name testprobe `
  -Protocol Https `
  -HostName "www.fabrikam.com" `
  -Path "/" `
  -Interval 15 `
  -Timeout 20 `
  -UnhealthyThreshold 3

$probe = Get-AzApplicationGatewayProbeConfig `
  -Name testprobe `
  -ApplicationGateway $gw

## Add the configuration to the HTTP Setting and don't forget to set the "hostname" field
## to the domain name of the server certificate as this will be set as the SNI header and
## will be used to verify the backend server's certificate. Note that TLS handshake will
## fail otherwise and might lead to backend servers being deemed as Unhealthy by the probes

Add-AzApplicationGatewayBackendHttpSettings `
  -ApplicationGateway $gw `
  -Name testbackend `
  -Port 443 `
  -Protocol Https `
  -Probe $probe `
  -TrustedRootCertificate $trustedroot `
  -CookieBasedAffinity Disabled `
  -RequestTimeout 20 `
  -HostName www.fabrikam.com

## Get the configuration and update the Application Gateway

$backendhttp = Get-AzApplicationGatewayBackendHttpSettings `
  -Name testbackend `
  -ApplicationGateway $gw

Add-AzApplicationGatewayRequestRoutingRule `
  -ApplicationGateway $gw `
  -Name testrule `
  -RuleType Basic `
  -BackendHttpSettings $backendhttp `
  -HttpListener $listener `
  -BackendAddressPool $bepool

Set-AzApplicationGateway -ApplicationGateway $gw

애플리케이션 게이트웨이 백 엔드 상태 확인

  1. 애플리케이션 게이트웨이의 백 엔드 상태 보기를 클릭하여 프로브가 정상인지 확인합니다.
  2. HTTPS 프로브의 상태가 정상 상태임을 알 수 있습니다.

HTTPS 탐침

다음 단계

Application Gateway의 SSL\TLS에 대한 자세한 내용은 Application Gateway 를 사용한 TLS 종료 및 종단 간 TLS 개요를 참조하세요.