可从 PowerShell 库获取本文所述的 Azure Stack Hub 就绪性检查器工具。 使用该工具可以验证生成的公钥基础结构 (PKI) 证书是否适用于前期部署。 留出足够的测试时间来验证证书,并在必要时重新颁发证书。
就绪性检查器工具执行以下证书验证:
- 分析 PFX
 检查 PFX 文件是否有效且密码正确,以及公开的信息是否受密码保护。
- 到期日期
 检查最短有效期是否为 7 天。
- 签名算法
 检查签名算法是否不是 SHA1。
- 私钥
 检查私钥是否存在,并且已连同“本地计算机”属性一起导出。
- 证书链
 检查证书链是否完整,包括自签名证书。
- DNS 名称
 检查 SAN 是否包含每个终结点的相关 DNS 名称,或支持性的通配符是否存在。
- 密钥用法
 检查密钥用法是否包含数字签名和密钥加密,并检查增强型密钥用法是否包含服务器身份验证和客户端身份验证。
- 密钥大小
 检查密钥大小是否为 2048 或更大。
- 链序
 检查其他证书的顺序,验证顺序是否正确。
- 其他证书
 确保除了相关叶证书及其链以外,PFX 中未打包其他证书。
重要
PKI 证书是一个 PFX 文件,其密码应被视为敏感信息。
先决条件
在验证用于 Azure Stack Hub 部署的 PKI 证书之前,系统应符合以下先决条件:
- Azure Stack Hub 就绪性检查器。
- 按照准备说明导出的 SSL 证书。
- DeploymentData.json。
- Windows 10 或 Windows Server 2016。
执行核心服务证书验证
使用以下步骤来验证用于部署和机密轮换的 Azure Stack Hub PKI 证书:
- 在 PowerShell 提示符(5.1 或更高版本)下,运行以下 cmdlet 安装 AzsReadinessChecker: - Install-Module Microsoft.AzureStack.ReadinessChecker -Force -AllowPrerelease
- 创建证书目录结构。 在以下示例中,可将 - <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}- 注意 - 如果使用 AD FS 作为标识系统,则需要 AD FS 和 Graph。 例如: - $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
 
 
- 将证书放入上一步骤中创建的相应目录。 例如:
- 在 PowerShell 窗口中,更改 - RegionName、- FQDN和- IdentitySystem的值使其适合 Azure Stack Hub 环境,然后运行以下 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
- 检查输出,确保所有证书通过所有测试。 例如: - 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 服务的证书,请更改 - -CertificatePath的值。 例如:- # 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 文件。 如果某个证书类型具有多证书要求,则预期每个证书都有一个嵌套的文件夹,这些文件夹的名称区分大小写。 以下代码显示了所有证书类型的示例文件夹/证书结构,以及 - -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 # -CertificatePath C:\Certificates\AppServices | | api.pfx | | | +---DefaultDomain | | wappsvc.pfx | | | +---Identity | | sso.pfx | | | \---Publishing | ftp.pfx | +---DBAdapter # Invoke-AzsCertificateValidation ` | dbadapter.pfx # -CertificatePath C:\Certificates\DBAdapter | | +---Deployment # Invoke-AzsCertificateValidation ` | +---ACSBlob # -CertificatePath C:\Certificates\Deployment | | acsblob.pfx | | | +---ACSQueue | | acsqueue.pfx ./. ./. ./. ./. ./. ./. ./. <- Deployment certificate tree trimmed. | \---Public Portal | portal.pfx | \---EventHubs # Invoke-AzsCertificateValidation ` eventhubs.pfx # -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
解决方法:遵循针对每个证书的每组测试下的详细信息部分中的工具指导。
症状:尽管已将 HTTP CDP 写入 x509 扩展,HTTP CRL 检查仍失败。
原因:目前,AzsReadinessChecker 无法以某些语言检查 HTTP CDP。
解决方法:将 OS 语言设置为 EN-US,然后运行验证。
证书
| Directory | 证书 | 
|---|---|
| ACSBlob | wildcard_blob_<region>_<externalFQDN> | 
| ACSQueue | wildcard_queue_<region>_<externalFQDN> | 
| ACSTable | wildcard_table_<region>_<externalFQDN> | 
| 管理扩展主机 | wildcard_adminhosting_<region>_<externalFQDN> | 
| 管理门户 | adminportal_<region>_<externalFQDN> | 
| ARM Admin | adminmanagement_<region>_<externalFQDN> | 
| ARM Public | management_<region>_<externalFQDN> | 
| KeyVault | wildcard_vault_<region>_<externalFQDN> | 
| KeyVaultInternal | wildcard_adminvault_<region>_<externalFQDN> | 
| 公共扩展主机 | wildcard_hosting_<region>_<externalFQDN> | 
| 公共门户 | portal_<region>_<externalFQDN> | 
后续步骤
AzsReadinessChecker 验证证书后,便可在 Azure Stack Hub 部署中使用这些证书,或者将其用于部署后的机密轮换。
- 对于部署,请将证书安全地传送给部署工程师,以便他们可以按照 Azure Stack Hub PKI 要求文档 - 必备证书中的规定将这些证书复制到部署虚拟机主机上。
- 有关机密轮换,请参阅在 Azure Stack Hub 中轮换机密。 “轮换外部机密”部分中介绍了增值资源提供程序证书的轮换。