애플리케이션 코드에서 Azure App Service에 추가하는 퍼블릭 또는 프라이빗 인증서에 액세스할 수 있습니다. 앱 코드는 클라이언트 역할을 하고 인증서 인증이 필요한 외부 서비스에 액세스할 수 있습니다. 암호화 작업을 수행해야 할 수도 있습니다. 이 문서에서는 애플리케이션 코드에서 퍼블릭 또는 프라이빗 인증서를 사용하는 방법을 보여 줍니다.
코드에서 인증서를 사용하는 이 방법은 App Service에서 TLS(전송 계층 보안) 기능을 사용하므로 앱이 기본 계층 이상에 있어야 합니다. 앱이 무료 또는 공유 계층에 있는 경우 앱 리포지토리에 인증서 파일을 포함할 수 있습니다.
App Service에서 TLS/SSL(Secure Sockets Layer) 인증서를 관리할 수 있게 하면 인증서와 애플리케이션 코드를 별도로 유지하고 중요한 데이터를 보호할 수 있습니다.
필수 조건
이 문서를 따르려면 다음을 참조하세요.
지문 찾기
Azure Portal의 왼쪽 창에서 App Services><앱 이름을> 선택합니다.
앱의 왼쪽 창에서 인증서를 선택합니다. 그런 다음 자체 인증서(.pfx) 또는 공개 키 인증서(.cer)를 선택합니다.
사용하려는 인증서를 찾아 그 지문을 복사하세요.
인증서에 액세스할 수 있도록 설정
앱 코드에서 인증서에 액세스하려면 앱 설정에 해당 지문을 WEBSITE_LOAD_CERTIFICATES
추가합니다.
Azure Cloud Shell에서 다음 명령을 실행합니다.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>
모든 인증서에 액세스할 수 있도록 하려면 값을 *
.로 설정합니다.
WEBSITE_LOAD_CERTIFICATES
가 *
에 설정되면 이전에 추가된 모든 인증서는 애플리케이션 코드에서 액세스할 수 있습니다. 나중에 앱에 인증서를 추가하는 경우 앱을 다시 시작하여 앱에 액세스할 수 있는 새 인증서를 만듭니다. 자세한 내용은 인증서 업데이트 또는 갱신을 참조하세요.
Windows 앱에서 인증서 로드
WEBSITE_LOAD_CERTIFICATES
앱 설정을 사용하면 현재 사용자\내 Windows 인증서 저장소의 Windows 호스팅 앱에서 지정된 인증서에 액세스할 수 있습니다.
C# 코드에서는 인증서 지문을 사용하여 인증서에 액세스합니다. 다음 코드는 지문 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<X509Certificate2>().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, available in .NET 4.6 and later
}
Java 코드에서는 Windows-MY
필드를 사용하여 저장소에서 인증서에 액세스합니다. 자세한 내용은 공개 키 인증서를 참조하세요. 다음 코드는 프라이빗 키 인증서를 로드하는 방법을 보여줍니다.
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 인증서 저장소를 지원하지 않거나 지원되지 않는 언어는 파일에서 인증서 로드를 참조하세요.
파일에서 인증서 로드
수동으로 업로드하는 인증서 파일을 로드해야 하는 경우 Git 대신 FTPS(파일 전송 프로토콜 보안)를 사용하여 인증서를 업로드하는 것이 좋습니다. 개인 인증서와 같은 중요한 데이터를 소스 제어에서 벗어나지 않도록 합니다.
windows의 ASP.NET 및 ASP.NET Core는 파일에서 인증서를 로드하는 경우에도 인증서 저장소에 액세스해야 합니다. Windows .NET 앱에서 인증서 파일을 로드하려면 Cloud Shell에서 다음 명령을 사용하여 현재 사용자 프로필을 로드합니다.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1
코드에서 인증서를 사용하는 이 방법은 App Service의 TLS 기능을 사용하므로 앱이 기본 계층 이상에 있어야 합니다.
다음 C# 예제에서는 앱의 상대 경로에서 공용 인증서를 로드합니다.
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의 파일에서 TLS/SSL 인증서를 로드하는 방법을 보려면 해당 언어 또는 웹 플랫폼에 대한 설명서를 참조하세요.
Linux/Windows 컨테이너에서 인증서 로드
WEBSITE_LOAD_CERTIFICATES
앱 설정을 사용하면 Windows 또는 Linux 사용자 지정 컨테이너(기본 제공 Linux 컨테이너 포함)에서 지정된 인증서에 파일로 액세스할 수 있습니다. 파일은 다음 디렉터리 아래에 있습니다.
컨테이너 플랫폼 | 공용 인증서 | 프라이빗 인증서 |
---|---|---|
Windows 컨테이너 | C:\appservice\certificates\public |
C:\appservice\certificates\private |
Linux 컨테이너 | /var/ssl/certs |
/var/ssl/private |
인증서 파일 이름은 인증서 지문입니다.
비고
App Service는 Windows 컨테이너에 인증서 경로를 다음 환경 변수로 삽입합니다. WEBSITE_PRIVATE_CERTS_PATH
WEBSITE_INTERMEDIATE_CERTS_PATH
WEBSITE_PUBLIC_CERTS_PATH
WEBSITE_ROOT_CERTS_PATH
나중에 인증서 경로가 변경될 경우 인증서 경로를 하드 코딩하는 대신 환경 변수를 사용하여 인증서 경로를 참조하는 것이 좋습니다.
또한 Windows Server Core 및 Windows Nano Server 컨테이너는 인증서 저장소에 인증서를 자동으로 LocalMachine\My
로드합니다. 인증서를 로드하려면 Windows 앱에서 인증서 로드에 표시된 것과 동일한 패턴을 따릅니다. Windows Nano 기반 컨테이너의 경우 파일 에서 인증서 로드에 표시된 대로 파일 경로를 사용합니다.
다음 C# 코드는 Linux 앱에서 공용 인증서를 로드하는 방법을 보여줍니다.
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
다음 C# 코드는 Linux 앱에서 프라이빗 인증서를 로드하는 방법을 보여줍니다.
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
...
var bytes = File.ReadAllBytes("/var/ssl/private/<thumbprint>.p12");
var cert = new X509Certificate2(bytes);
// Use the loaded certificate
Node.js, PHP, Python 또는 Java의 파일에서 TLS/SSL 인증서를 로드하는 방법을 보려면 해당 언어 또는 웹 플랫폼에 대한 설명서를 참조하세요.
인증서 업데이트 또는 갱신
인증서를 갱신하고 앱에 추가하면 새 지문이 생성되며, 이 지문도 이용할 수 있어야 합니다. 작동 방식은 인증서 유형에 따라 달라집니다.
공용 또는 프라이빗 인증서를 수동으로 업로드하는 경우:
-
WEBSITE_LOAD_CERTIFICATES
에서 지문을 명시적으로 나열하는 경우, 새 지문을 앱 설정에 추가하십시오. -
WEBSITE_LOAD_CERTIFICATES
가*
로 설정된 경우, 새 인증서에 액세스할 수 있도록 앱을 다시 시작하십시오.
App Service 인증서와 같은 Azure Key Vault에서 인증서를 갱신하는 경우 Key Vault의 일일 동기화는 앱이 갱신된 인증서와 동기화될 때 필요한 업데이트를 자동으로 수행합니다.
- 갱신된 인증서의 이전 지문이 포함된 경우
WEBSITE_LOAD_CERTIFICATES
매일 동기화는 이전 지문을 새 지문으로 자동으로 업데이트합니다. -
WEBSITE_LOAD_CERTIFICATES
가*
로 설정되어 있는 경우, 매일 동기화를 통해 새 인증서에 자동으로 액세스할 수 있습니다.