Azure App Service의 코드에서 TLS/SSL 인증서 사용Use a TLS/SSL certificate in your code in Azure App Service

응용 프로그램 코드에서 App Service에 추가 하는 공용 또는 개인 인증서에 액세스할 수 있습니다.In your application code, you can access the public or private certificates you add to App Service. 앱 코드는 클라이언트 역할을 하며 인증서 인증을 필요로 하는 외부 서비스에 액세스 하거나 암호화 작업을 수행 해야 할 수 있습니다.Your app code may act as a client and access an external service that requires certificate authentication, or it may need to perform cryptographic tasks. 이 방법 가이드에서는 응용 프로그램 코드에서 공용 또는 개인 인증서를 사용 하는 방법을 보여 줍니다.This how-to guide shows how to use public or private certificates in your application code.

코드에서 인증서를 사용 하는이 방법은 앱이 기본 계층 이상 이어야 하는 APP SERVICE의 TLS 기능을 사용 합니다.This approach to using certificates in your code makes use of the TLS functionality in App Service, which requires your app to be in Basic tier or above. 앱이 무료 또는 공유 계층에 있는 경우 앱 리포지토리에 인증서 파일을 포함할수 있습니다.If your app is in Free or Shared tier, you can include the certificate file in your app repository.

TLS/SSL 인증서를 App Service 관리 하도록 허용 하는 경우 인증서와 응용 프로그램 코드를 별도로 유지 관리 하 고 중요 한 데이터를 보호할 수 있습니다.When you let App Service manage your TLS/SSL certificates, you can maintain the certificates and your application code separately and safeguard your sensitive data.

사전 요구 사항Prerequisites

이 방법 가이드를 수행하려면 다음이 필요합니다.To follow this how-to guide:

지문 찾기Find the thumbprint

Azure Portal의 왼쪽 메뉴에서 App Services > <app-name> 를 선택합니다.In the Azure portal, from the left menu, select App Services > <app-name>.

앱의 왼쪽 탐색 영역에서 TLS/SSL 설정을 선택 하 고 개인 키 인증서 (.Pfx) 또는 공개 키 인증서 (.cer) 를 선택 합니다.From the left navigation of your app, select TLS/SSL settings, then select Private Key Certificates (.pfx) or Public Key Certificates (.cer).

사용 하려는 인증서를 찾고 지문을 복사 합니다.Find the certificate you want to use and copy the thumbprint.

인증서 지문 복사

인증서에 액세스할 수 있도록 설정Make the certificate accessible

앱 코드에서 인증서에 액세스 하려면 WEBSITE_LOAD_CERTIFICATES Cloud Shell에서 다음 명령을 실행 하 여 앱 설정에 해당 지문을 추가 합니다.To access a certificate in your app code, add its thumbprint to the WEBSITE_LOAD_CERTIFICATES app setting, by running the following command in the Cloud Shell:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>

모든 인증서에 액세스할 수 있도록 하려면 값을로 설정 * 합니다.To make all your certificates accessible, set the value to *.

Windows 앱에서 인증서 로드Load certificate in Windows apps

WEBSITE_LOAD_CERTIFICATES앱 설정은 windows 인증서 저장소의 windows 호스트 된 앱에서 지정 된 인증서에 액세스할 수 있도록 하며, 위치는 가격 책정 계층에 따라 달라 집니다.The WEBSITE_LOAD_CERTIFICATES app setting makes the specified certificates accessible to your Windows hosted app in the Windows certificate store, and the location depends on the pricing tier:

C # 코드에서는 인증서 지 문으로 인증서에 액세스 합니다.In C# code, you access the certificate by the certificate thumbprint. 다음 코드는 E661583E8FABEF4C0BEF694CBC41C28FB81CD870 지문으로 인증서를 로드합니다.The following code loads a certificate with the thumbprint E661583E8FABEF4C0BEF694CBC41C28FB81CD870.

using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;

string certThumbprint = "E661583E8FABEF4C0BEF694CBC41C28FB81CD870";
bool validOnly = false;

using (X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
  certStore.Open(OpenFlags.ReadOnly);

  X509Certificate2Collection certCollection = certStore.Certificates.Find(
                              X509FindType.FindByThumbprint,
                              // Replace below with your certificate's thumbprint
                              certThumbprint,
                              validOnly);
  // Get the first cert with the thumbprint
  X509Certificate2 cert = certCollection.OfType<X509Certificate>().FirstOrDefault();

  if (cert is null)
      throw new Exception($"Certificate with thumbprint {certThumbprint} was not found");

  // Use certificate
  Console.WriteLine(cert.FriendlyName);
  
  // Consider to call Dispose() on the certificate after it's being used, avaliable in .NET 4.6 and later
}

Java 코드에서는 주체 일반 이름 필드 ( 공개 키 인증서참조)를 사용 하 여 "WINDOWS-MY" 저장소에서 인증서에 액세스 합니다.In Java code, you access the certificate from the "Windows-MY" store using the Subject Common Name field (see Public key certificate). 다음 코드에서는 개인 키 인증서를 로드 하는 방법을 보여 줍니다.The following code shows how to load a private key certificate:

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.PrivateKey;

...
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null); 
Certificate cert = ks.getCertificate("<subject-cn>");
PrivateKey privKey = (PrivateKey) ks.getKey("<subject-cn>", ("<password>").toCharArray());

// Use the certificate and key
...

지원 하지 않거나 Windows 인증서 저장소에 대 한 충분 한 지원을 제공 하지 않는 언어의 경우 파일에서 인증서 로드를 참조 하세요.For languages that don't support or offer insufficient support for the Windows certificate store, see Load certificate from file.

파일에서 인증서 로드Load certificate from file

수동으로 업로드 하는 인증서 파일을 로드 해야 하는 경우 Git대신 FTPS 를 사용 하 여 인증서를 업로드 하는 것이 좋습니다 (예:).If you need to load a certificate file that you upload manually, it's better to upload the certificate using FTPS instead of Git, for example. 원본 제어에서 벗어난 개인 인증서와 같은 중요 한 데이터를 유지 해야 합니다.You should keep sensitive data like a private certificate out of source control.

참고

파일에서 인증서를 로드 하는 경우에도 Windows의 ASP.NET 및 ASP.NET Core는 인증서 저장소에 액세스 해야 합니다.ASP.NET and ASP.NET Core on Windows must access the certificate store even if you load a certificate from a file. Windows .NET 앱에서 인증서 파일을 로드 하려면 Cloud Shell에서 다음 명령을 사용 하 여 현재 사용자 프로필을 로드 합니다.To load a certificate file in a Windows .NET app, load the current user profile with the following command in the Cloud Shell:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1

코드에서 인증서를 사용 하는이 방법은 앱이 기본 계층 이상 이어야 하는 APP SERVICE의 TLS 기능을 사용 합니다.This approach to using certificates in your code makes use of the TLS functionality in App Service, which requires your app to be in Basic tier or above.

다음 c # 예제에서는 앱의 상대 경로에서 공용 인증서를 로드 합니다.The following C# example loads a public certificate from a relative path in your app:

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...
var bytes = File.ReadAllBytes("~/<relative-path-to-cert-file>");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Node.js, PHP, Python, Java 또는 Ruby의 파일에서 TLS/SSL 인증서를 로드 하는 방법을 보려면 해당 언어 또는 웹 플랫폼에 대 한 설명서를 참조 하세요.To see how to load a TLS/SSL certificate from a file in Node.js, PHP, Python, Java, or Ruby, see the documentation for the respective language or web platform.

Linux/Windows 컨테이너에서 인증서 로드Load certificate in Linux/Windows containers

WEBSITE_LOAD_CERTIFICATES앱 설정을 사용 하면 지정 된 인증서를 Windows 또는 linux 컨테이너 앱 (기본 제공 linux 컨테이너 포함)에서 파일로 액세스할 수 있습니다.The WEBSITE_LOAD_CERTIFICATES app settings makes the specified certificates accessible to your Windows or Linux container apps (including built-in Linux containers) as files. 파일은 다음 디렉터리에 있습니다.The files are found under the following directories:

컨테이너 플랫폼Container platform 공용 인증서Public certificates 프라이빗 인증서Private certificates
Windows 컨테이너Windows container C:\appservice\certificates\public C:\appservice\certificates\private
Linux 컨테이너Linux container /var/ssl/certs /var/ssl/private

인증서 파일 이름은 인증서 지문입니다.The certificate file names are the certificate thumbprints.

참고

Windows 컨테이너에 인증서 경로를 삽입 App Service 다음 환경 변수,, WEBSITE_PRIVATE_CERTS_PATH WEBSITE_INTERMEDIATE_CERTS_PATH WEBSITE_PUBLIC_CERTS_PATHWEBSITE_ROOT_CERTS_PATH 입니다.App Service inject the certificate paths into Windows containers as the following environment variables WEBSITE_PRIVATE_CERTS_PATH, WEBSITE_INTERMEDIATE_CERTS_PATH, WEBSITE_PUBLIC_CERTS_PATH, and WEBSITE_ROOT_CERTS_PATH. 나중에 인증서 경로가 변경 되는 경우 인증서 경로를 하드 코딩 하는 대신 환경 변수를 사용 하 여 인증서 경로를 참조 하는 것이 좋습니다.It's better to reference the certificate path with the environment variables instead of hardcoding the certificate path, in case the certificate paths change in the future.

또한 Windows Server Core 컨테이너LocalMachine\My에서 인증서를 인증서 저장소에 자동으로 로드 합니다.In addition, Windows Server Core containers load the certificates into the certificate store automatically, in LocalMachine\My. 인증서를 로드 하려면 Windows 앱에서 인증서를 로드하는 것과 동일한 패턴을 따릅니다.To load the certificates, follow the same pattern as Load certificate in Windows apps. Windows Nano 기반 컨테이너의 경우 위에 제공 된 파일 경로를 사용 하 여 파일에서 직접 인증서를 로드합니다.For Windows Nano based containers, use the file paths provided above to Load the certificate directly from file.

다음 c # 코드는 Linux 앱에서 공용 인증서를 로드 하는 방법을 보여 줍니다.The following C# code shows how to load a public certificate in a Linux app.

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...
var bytes = File.ReadAllBytes("/var/ssl/certs/<thumbprint>.der");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Node.js, PHP, Python, Java 또는 Ruby의 파일에서 TLS/SSL 인증서를 로드 하는 방법을 보려면 해당 언어 또는 웹 플랫폼에 대 한 설명서를 참조 하세요.To see how to load a TLS/SSL certificate from a file in Node.js, PHP, Python, Java, or Ruby, see the documentation for the respective language or web platform.

추가 리소스More resources