Azure Stack Hub PKI 인증서의 유효성 검사

이 문서에 설명된 Azure Stack Hub 준비 검사 도구는 PowerShell 갤러리에서 사용할 수 있습니다. 이 도구를 사용하여 생성된 PKI(공개 키 인프라) 인증서 가 사전 배포에 적합한지 확인합니다. 인증서를 테스트하고 필요한 경우 다시 발급할 충분한 시간을 두고 인증서의 유효성을 검사합니다.

준비 상태 검사기 도구는 다음과 같은 인증서 유효성 검사를 수행합니다.

  • PFX 구문 분석
    유효한 PFX 파일, 올바른 암호 및 공개 정보가 암호로 보호되는지 여부를 확인합니다.
  • 만기일
    7일의 최소 유효성을 확인합니다.
  • 서명 알고리즘
    서명 알고리즘이 SHA1이 아닌지 확인합니다.
  • 프라이빗 키
    프라이빗 키가 있고 로컬 컴퓨터 특성으로 내보내지는지 확인합니다.
  • 인증서 체인
    자체 서명된 인증서에 대한 검사를 포함하여 인증서 체인이 그대로 유지되는지 확인합니다.
  • DNS 이름
    SAN에 각 엔드포인트에 대한 관련 DNS 이름이 포함되어 있는지 또는 지원 와일드카드가 있는지 확인합니다.
  • 키 사용
    키 사용에 디지털 서명 및 키 암호화가 포함되어 있는지 확인하고 향상된 키 사용에 서버 인증 및 클라이언트 인증이 포함되어 있는지 확인합니다.
  • 키 크기
    키 크기가 2048 이상인지 확인합니다.
  • 체인 순서
    주문이 올바른지 확인하는 다른 인증서의 순서를 확인합니다.
  • 기타 인증서
    관련 리프 인증서 및 해당 체인 이외의 다른 인증서가 PFX에 패키지되지 않았는지 확인합니다.

중요

PKI 인증서는 PFX 파일이며 암호는 중요한 정보로 처리되어야 합니다.

필수 구성 요소

Azure Stack Hub 배포에 대한 PKI 인증서의 유효성을 검사하기 전에 시스템에서 다음 사전 요구 사항을 충족해야 합니다.

  • Microsoft Azure Stack Hub 준비 상태 검사기.
  • 준비 지침에 따라 내보낸 SSL 인증서.
  • DeploymentData.json.
  • Windows 10 또는 Windows Server 2016.

핵심 서비스 인증서 유효성 검사 수행

다음 단계를 사용하여 배포 및 비밀 회전을 위한 Azure Stack Hub PKI 인증서의 유효성을 검사합니다.

  1. 다음 cmdlet을 실행하여 PowerShell 프롬프트(5.1 이상)에서 AzsReadinessChecker 를 설치합니다.

        Install-Module Microsoft.AzureStack.ReadinessChecker -Force -AllowPrerelease
    
  2. 인증서 디렉터리 구조를 만듭니다. 아래 예제에서는 원하는 새 디렉터리 경로로 변경할 <C:\Certificates\Deployment> 수 있습니다.

    New-Item C:\Certificates\Deployment -ItemType Directory
    
    $directories = 'ACSBlob', 'ACSQueue', 'ACSTable', 'Admin Extension Host', 'Admin Portal', 'ARM Admin', 'ARM Public', 'KeyVault', 'KeyVaultInternal', 'Public Extension Host', 'Public Portal'
    
    $destination = 'C:\Certificates\Deployment'
    
    $directories | % { New-Item -Path (Join-Path $destination $PSITEM) -ItemType Directory -Force}
    

    참고

    ID 시스템으로 AD FS를 사용하는 경우 AD FS 및 그래프가 필요합니다. 예를 들면 다음과 같습니다.

    $directories = 'ACSBlob', 'ACSQueue', 'ACSTable', 'ADFS', 'Admin Extension Host', 'Admin Portal', 'ARM Admin', 'ARM Public', 'Graph', 'KeyVault', 'KeyVaultInternal', 'Public Extension Host', 'Public Portal'
    
    • 이전 단계에서 만든 적절한 디렉터리에 인증서를 배치합니다. 예를 들면 다음과 같습니다.
      • C:\Certificates\Deployment\ACSBlob\CustomerCertificate.pfx
      • C:\Certificates\Deployment\Admin Portal\CustomerCertificate.pfx
      • C:\Certificates\Deployment\ARM Admin\CustomerCertificate.pfx
  3. PowerShell 창에서 Azure Stack Hub 환경에 적합한 값을 RegionNameFQDNIdentitySystem 변경하고 다음 cmdlet을 실행합니다.

    $pfxPassword = Read-Host -Prompt "Enter PFX Password" -AsSecureString 
    Invoke-AzsHubDeploymentCertificateValidation -CertificatePath C:\Certificates\Deployment -pfxPassword $pfxPassword -RegionName east -FQDN azurestack.contoso.com -IdentitySystem AAD  
    
  4. 출력을 검토하여 모든 인증서가 모든 테스트를 통과하는지 확인합니다. 예를 들면 다음과 같습니다.

    Invoke-AzsHubDeploymentCertificateValidation v1.2005.1286.272 started.
    Testing: KeyVaultInternal\KeyVaultInternal.pfx
    Thumbprint: E86699****************************4617D6
        PFX Encryption: OK
        Expiry Date: OK
        Signature Algorithm: OK
        DNS Names: OK
        Key Usage: OK
        Key Length: OK
        Parse PFX: OK
        Private Key: OK
        Cert Chain: OK
        Chain Order: OK
        Other Certificates: OK
    Testing: ARM Public\ARMPublic.pfx
    Thumbprint: 8DC4D9****************************69DBAA
        PFX Encryption: OK
        Expiry Date: OK
        Signature Algorithm: OK
        DNS Names: OK
        Key Usage: OK
        Key Length: OK
        Parse PFX: OK
        Private Key: OK
        Cert Chain: OK
        Chain Order: OK
        Other Certificates: OK
    Testing: Admin Portal\AdminPortal.pfx
    Thumbprint: 6F9055****************************4AC0EA
        PFX Encryption: OK
        Expiry Date: OK
        Signature Algorithm: OK
        DNS Names: OK
        Key Usage: OK
        Key Length: OK
        Parse PFX: OK
        Private Key: OK
        Cert Chain: OK
        Chain Order: OK
        Other Certificates: OK
    Testing: Public Portal\PublicPortal.pfx
    
    
    Log location (contains PII): C:\Users\[*redacted*]\AppData\Local\Temp\AzsReadinessChecker\AzsReadinessChecker.log
    Report location (contains PII): C:\Users\[*redacted*]\AppData\Local\Temp\AzsReadinessChecker\AzsReadinessCheckerReport.json
    Invoke-AzsHubDeploymentCertificateValidation Completed
    
    

    다른 Azure Stack Hub 서비스에 대한 인증서의 유효성을 검사하려면 -CertificateType 값을 변경합니다. 예를 들면 다음과 같습니다.

    # App Services
    Invoke-AzsHubAppServicesCertificateValidation -CertificatePath C:\Certificates\AppServices -pfxPassword $pfxPassword -RegionName east -FQDN azurestack.contoso.com
    
    # DBAdapter
    Invoke-AzsHubDBAdapterCertificateValidation -CertificatePath C:\Certificates\DBAdapter -pfxPassword $pfxPassword -RegionName east -FQDN azurestack.contoso.com
    
    # EventHubs
    Invoke-AzsHubEventHubsCertificateValidation -CertificatePath C:\Certificates\EventHubs -pfxPassword $pfxPassword -RegionName east -FQDN azurestack.contoso.com
    
    

    각 폴더에는 인증서 유형에 대한 단일 PFX 파일이 포함되어야 합니다. 인증서 유형에 다중 인증서 요구 사항이 있는 경우 각 개별 인증서에 대한 중첩된 폴더가 예상되고 이름을 구분합니다. 다음 코드는 모든 인증서 유형에 대한 예제 폴더/인증서 구조와 적절한 값 -CertificateType-CertificatePath

    C:\>tree c:\SecretStore /A /F
        Folder PATH listing
        Volume serial number is 85AE-DF2E
        C:\SECRETSTORE
        \---AzureStack
            +---CertificateRequests
            \---Certificates
                +---AppServices         # Invoke-AzsCertificateValidation `
                |   +---API             #     -CertificateType AppServices `
                |   |       api.pfx     #     -CertificatePath C:\Certificates\AppServices
                |   |
                |   +---DefaultDomain
                |   |       wappsvc.pfx
                |   |
                |   +---Identity
                |   |       sso.pfx
                |   |
                |   \---Publishing
                |           ftp.pfx
                |
                +---DBAdapter           # Invoke-AzsCertificateValidation `
                |       dbadapter.pfx   #   -CertificateType DBAdapter `
                |                       #   -CertificatePath C:\Certificates\DBAdapter
                |
                +---Deployment          # Invoke-AzsCertificateValidation `
                |   +---ACSBlob         #   -CertificateType Deployment `
                |   |       acsblob.pfx #   -CertificatePath C:\Certificates\Deployment
                |   |
                |   +---ACSQueue
                |   |       acsqueue.pfx
               ./. ./. ./. ./. ./. ./. ./.    <- Deployment certificate tree trimmed.
                |   \---Public Portal
                |           portal.pfx
                |
                \---EventHubs           # Invoke-AzsCertificateValidation `
                        eventhubs.pfx   #   -CertificateType EventHubs `
                                        #   -CertificatePath C:\Certificates\EventHubs
    

알려진 문제

증상: 테스트를 건너뜁니다.

원인: 종속성이 충족되지 않는 경우 AzsReadinessChecker는 특정 테스트를 건너뜁니다.

  • 인증서 체인이 실패하면 다른 인증서를 건너뜁니다.

    Testing: ACSBlob\singlewildcard.pfx
        Read PFX: OK
        Signature Algorithm: OK
        Private Key: OK
        Cert Chain: OK
        DNS Names: Fail
        Key Usage: OK
        Key Size: OK
        Chain Order: OK
        Other Certificates: Skipped
    Details:
    The certificate records '*.east.azurestack.contoso.com' do not contain a record that is valid for '*.blob.east.azurestack.contoso.com'. Please refer to the documentation for how to create the required certificate file.
    The Other Certificates check was skipped because Cert Chain and/or DNS Names failed. Follow the guidance to remediate those issues and recheck. 
    
    Log location (contains PII): C:\Users\username\AppData\Local\Temp\AzsReadinessChecker\AzsReadinessChecker.log
    Report location (contains PII): C:\Users\username\AppData\Local\Temp\AzsReadinessChecker\AzsReadinessCheckerReport.json
    Invoke-AzsCertificateValidation Completed
    

해결 방법: 각 인증서에 대한 각 테스트 집합 아래의 세부 정보 섹션에 있는 도구의 지침을 따릅니다.

증상: x509 확장에 작성된 HTTP CDP가 있음에도 불구하고 HTTP CRL 검사가 실패합니다.

원인: 현재 AzsReadinessChecker는 일부 언어에서 HTTP CDP를 확인할 수 없습니다.

해결 방법: OS 언어가 EN-US로 설정된 유효성 검사를 실행합니다.

인증서

디렉터리 인증서
ACSBlob wildcard_blob_<region>_<externalFQDN>
ACSQueue wildcard_queue_<region>_<externalFQDN>
ACSTable wildcard_table_<region>_<externalFQDN>
Admin Extension Host wildcard_adminhosting_<region>_<externalFQDN>
관리 포털 adminportal_<region>_<externalFQDN>
ARM 관리자 adminmanagement_<region>_<externalFQDN>
ARM 공용 management_<region>_<externalFQDN>
KeyVault wildcard_vault_<region>_<externalFQDN>
KeyVaultInternal wildcard_adminvault_<region>_<externalFQDN>
Public Extension Host wildcard_hosting_<region>_<externalFQDN>
Public Portal portal_<region>_<externalFQDN>

다음 단계

AzsReadinessChecker에서 인증서의 유효성을 검사하면 Azure Stack Hub 배포 또는 배포 후 비밀 회전에 사용할 준비가 되었습니다.