다음을 통해 공유


상위 수준 애플리케이션에서 인증서 관리

CertStore API를 사용하면 고급 애플리케이션이 네트워크 인증에 사용할 인증서를 관리할 수 있습니다. azsphere 디바이스 인증서를 사용하면 명령줄에서 인증서를 관리할 수 있습니다.

인증서는 Azure Sphere 디바이스의 비휘발성 스토리지에 저장됩니다. 인증서 저장소 또는 인증서 저장소는 최대 24KiB의 인증서를 보유할 수 있습니다. 인증서의 최대 크기는 8KiB입니다. 루트 CA 인증서는 일반적으로 클라이언트 인증서보다 큽니다. 인증서 저장소를 사용하는 것 외에도 Microsoft 관리 클라이언트 인증서에 액세스할 수도 있습니다. Microsoft 관리 클라이언트 인증서는 디바이스가 24시간마다 한 번 이상 인터넷에 연결된 경우에만 사용할 수 있습니다.

Microsoft 관리형 클라이언트 인증서 사용

이 두 함수를 사용하여 클라이언트 인증서를 가져오고 사용할 준비가 되었는지 확인합니다.

  • DeviceAuth_GetCertificatePath OS에서 관리하는 클라이언트 인증서에 대한 파일 경로를 반환합니다. 이 파일 경로는 일부 라이브러리에서 TLS 통신에 대한 인증서를 로드하는 데 필요합니다.

  • Application_IsDeviceAuthReady 현재 애플리케이션에 대한 디바이스 인증이 준비되었는지 여부를 확인합니다.

CertStore 요구 사항

CertStore API를 사용하는 애플리케이션은 적절한 헤더 파일을 포함하고 CertStore 기능을 애플리케이션 매니페스트에 추가해야 합니다.

헤더 파일

프로젝트에 CertStore 헤더를 포함합니다.

 #include <applibs\certstore.h>

애플리케이션 매니페스트 설정

인증서 저장소 API를 사용하려면 애플리케이션 매니페스트에 CertStore 애플리케이션 기능을 추가하고 값을 true로 설정해야 합니다. Azure Sphere 애플리케이션 매니페스트 항목에는 애플리케이션 매니페스트에 대한 자세한 내용이 있습니다.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App3",
  "ComponentId" : "bb267cbd-4d2a-4937-8dd8-3603f48cb8f6",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "CertStore" : true,
    "Gpio": [],
    "Uart": [],
    "EnterpriseWifiConfig": true,
    "WifiConfig": true,
    "NetworkConfig": false,
    "SystemTime": true
  }
}

인증서 ID

모든 인증서는 인증서 식별자(ID)와 연결됩니다. 인증서 ID는 디바이스에서 인증서를 고유하게 식별하는 1~16자의 문자열입니다. 유효한 문자는 'a'-'z', 'A'-'Z', '0'-'9', 하이픈(-)입니다. 및 밑줄(_). 식별되는 인증서 유형에 관계없이 모든 인증서 ID는 디바이스 전체에서 고유해야 합니다.

각 인증서의 식별자는 인증서 저장소에 저장되며 CertStore API, WifiConfig API 및 azsphere CLI에서 디바이스 전체로 사용됩니다. 따라서 명령줄에서 인증서를 로드하는 경우 해당 인증서를 쿼리, 이동 또는 삭제하는 모든 애플리케이션은 동일한 ID를 사용해야 합니다. 마찬가지로 앱이 인증서를 로드하는 경우 인증서를 조작하는 azsphere 명령은 동일한 ID를 사용해야 합니다. 모든 유형의 기존 인증서와 동일한 ID로 새 인증서를 설치하면 새 인증서가 기존 인증서를 덮어씁니다.

주의

인증서 ID는 클라이언트 및 루트 CA 인증서 모두에 대해 시스템 전체이므로 azsphere 명령 또는 새 인증서를 추가하는 함수 호출은 이전 명령 또는 함수 호출에 의해 추가된 인증서를 덮어쓸 수 있으므로 네트워크 연결 오류가 발생할 수 있습니다. 명확한 인증서 업데이트 절차를 개발하고 인증서 ID를 신중하게 선택하는 것이 좋습니다.

인증서 저장소에 인증서 추가

인증서 저장소에 인증서를 추가하려면 앱이 다음 함수 중 하나를 호출합니다.

  • CertStore_InstallClientCertificate 공용 인증서와 프라이빗 키로 구성된 클라이언트 인증서를 설치합니다.
  • CertStore_InstallRootCACertificate 공용 인증서로 구성된 루트 CA 인증서를 설치합니다.

앱에서 인증서를 설치하려면 먼저 디바이스에 인증서가 있어야 합니다. 인증서는 Azure Sphere 디바이스에 로드하려면 PKCS1 또는 PKCS8 구문 및 .pem 형식이어야 합니다. EAP-TLS 네트워크에 대한 인증서 획득 및 배포는 인증서를 획득하고 디바이스에 로드하는 방법을 설명합니다. Microsoft는 인증서를 제공하지 않습니다.

인증서를 설치하면 인증서 저장소에 인증서가 추가되고 인증에 사용할 수 있습니다. 인증서 저장소 내에서 인증서는 인덱스로 관리되며 인덱스로 검색할 수 있습니다. 인덱스 값의 범위는 0에서 (CertStore_GetCertificateCount - 1)로 실행됩니다.

앱은 CertStore_GetCertificateIdentifierAt 함수를 호출하여 특정 인덱스에서 인증서의 ID를 가져올 수 있습니다. 그런 다음 호출에서 인증서 ID를 사용하여 인증서에 대한 정보를 가져오고, 인증서를 이동하거나 삭제하고, 인증에 인증서를 사용할 수 있습니다.

인증서 정보 가져오기

CertStore API에는 저장된 인증서에 대한 정보를 반환하는 몇 가지 함수가 포함되어 있습니다.

이전과 이후의 시간은 인증서 수명 및 업데이트를 관리하는 데 유용합니다. 자세한 내용은 인증서 수명 주기 및 갱신 을 참조하세요.

인증서 이름 바꾸기 또는 삭제

인증서의 이름을 바꾸거나 삭제하기 위해 앱은 CertStore_MoveCertificate 또는 CertStore_DeleteCertificate 호출합니다.

CertStore_MoveCertificate 인증서 ID를 변경하여 인증서의 이름을 바꿉니다. 인증서 ID는 디바이스에서 고유해야 하므로 다른 인증서와 동일한 ID를 제공하여 인증서 이름을 변경하면 해당 인증서가 삭제됩니다. 예를 들어 인증서 저장소에 및 가 포함된 MyCert 경우 로 YourCert 이동 MyCert 하면 IDYourCert가 인 단일 인증서가 생성되며, 여기에는 이전 MyCert의 데이터가 포함YourCert됩니다. 오류가 반환되지 않습니다.

CertStore_DeleteCertificate 단일 인증서를 삭제합니다. 인증서를 삭제하면 나머지 인증서가 0부터 다시 인덱싱됩니다. 따라서 인증서 저장소의 모든 인증서를 삭제하려면 인증서 수에 따라 반복하지만 각 반복에서 인덱스 0에서 인증서를 삭제해야 합니다. 더 이상 사용되지 않는 인덱스에서 인증서를 삭제하려고 하면 CertStore_GetCertificateIdentifierAt ERANGE를 반환합니다.

다음 메서드가 올바르게 작동합니다.

for (int i = 0; i < CertStore_GetCertificateCount(); i++) {
    struct CertStore_Identifier id;
    result = CertStore_GetCertificateIdentifierAt(0, &id);
    CertStore_DeleteCertificate(id.identifier);
}

네트워크 인증에 인증서 사용

WifiConfig API는 특정 Wi-Fi 구성에 대해 사용하도록 설정된 인증서를 설정하고 반환하는 함수를 제공합니다. 인증 에 인증서를 사용하는 EAP-TLS 네트워크를 상위 수준 애플리케이션에서 설정하는 방법에 대한 자세한 내용은 앱에서 EAP-TLS 네트워크 설정을 참조하세요.

인증서 샘플

인증서 샘플 애플리케이션은 애플리케이션이 CertStore 함수를 사용하는 방법을 보여 줍니다.