为 Azure Stack Hub 生成证书签名请求

使用 Azure Stack Hub 就绪性检查器工具创建适合于 Azure Stack Hub 部署或现有部署的证书续订的证书签名请求 (CSR)。 在部署证书之前,请务必请求、生成并验证证书,以便有足够的准备时间对证书进行测试。

该工具用于根据本文顶部的“选择 CSR 证书场景”选择器请求以下证书:

  • 新部署的标准证书:使用本文顶部的“选择 CSR 证书场景”选择器选择“新部署”。
  • 现有部署的续订证书:使用本文顶部的“选择 CSR 证书场景”选择器选择“续订”。
  • 平台即服务 (PaaS) 证书:可以选择使用标准证书和续订证书生成。 有关更多详细信息,请参阅 Azure Stack Hub 公钥基础结构 (PKI) 证书要求 - 可选 PaaS 证书

先决条件

在为 Azure Stack Hub 部署生成 PKI 证书的 CSR 之前,系统必须符合以下先决条件:

  • 计算机上必须安装有 Windows 10 或更高版本,或 Windows Server 2016 或更高版本。
  • 使用以下 cmdlet 从 PowerShell 提示符(5.1 或更高版本)安装 Azure Stack Hub 就绪性检查器工具
         Install-Module Microsoft.AzureStack.ReadinessChecker -Force -AllowPrerelease
    
  • 证书需要以下属性:
    • 区域名称
    • 外部完全限定的域名 (FQDN)
    • 主题

为新的部署证书生成 CSR

注意

生成证书签名请求需要特权提升。 在不可能进行特权提升的受限环境中,你可以使用此工具来生成明文模板文件,其中包含 Azure Stack Hub 外部证书所需的所有信息。 然后需要在特权提升的会话上使用这些模板文件来完成公钥/私钥对生成。 有关详细信息,请参阅下文。

若要为新的 Azure Stack Hub PKI 证书准备 CSR,请完成以下步骤:

  1. 在安装了就绪性检查器工具的计算机上打开 PowerShell 会话。

  2. 声明以下变量:

    注意

    <regionName>.<externalFQDN> 构成了 Azure Stack Hub 中所有外部 DNS 名称创建位置的基础。 在以下示例中,门户将是 portal.east.azurestack.contoso.com

    $outputDirectory = "$ENV:USERPROFILE\Documents\AzureStackCSR" # An existing output directory
    $IdentitySystem = "AAD"                     # Use "AAD" for Azure Active Director, "ADFS" for Active Directory Federation Services
    $regionName = 'east'                        # The region name for your Azure Stack Hub deployment
    $externalFQDN = 'azurestack.contoso.com'    # The external FQDN for your Azure Stack Hub deployment
    

现在使用相同的 PowerShell 会话生成 CSR。 这些说明特定于在下面选择的使用者格式:

注意

Azure Stack Hub 服务的第一个 DNS 名称将配置为证书请求中的 CN 字段。

  1. 声明一个使用者,例如:

    $subject = "C=US,ST=Washington,L=Redmond,O=Microsoft,OU=Azure Stack Hub"
    
  1. 通过完成以下操作之一生成 CSR:

    • 对于生产部署环境,第一个脚本将为部署证书生成 CSR:

      New-AzsHubDeploymentCertificateSigningRequest -RegionName $regionName -FQDN $externalFQDN -subject $subject -OutputRequestPath $OutputDirectory -IdentitySystem $IdentitySystem
      
    • 第二个脚本可以在需要的情况下使用 -IncludeContainerRegistry,同时为 Azure 容器注册表生成 CSR,作为部署证书的 CSR:

      New-AzsHubDeploymentCertificateSigningRequest -RegionName $regionName -FQDN $externalFQDN -subject $subject -OutputRequestPath $OutputDirectory -IdentitySystem $IdentitySystem -IncludeContainerRegistry
      
    • 第三个脚本将为已安装的任何可选 PaaS 服务生成 CSR:

      # App Services
      New-AzsHubAppServicesCertificateSigningRequest -RegionName $regionName -FQDN $externalFQDN -subject $subject -OutputRequestPath $OutputDirectory
      
      # DBAdapter (SQL/MySQL)
      New-AzsHubDbAdapterCertificateSigningRequest -RegionName $regionName -FQDN $externalFQDN -subject $subject -OutputRequestPath $OutputDirectory
      
      # EventHubs
      New-AzsHubEventHubsCertificateSigningRequest -RegionName $regionName -FQDN $externalFQDN -subject $subject -OutputRequestPath $OutputDirectory
      
      # Azure Container Registry
      New-AzsHubAzureContainerRegistryCertificateSigningRequest -RegionName $regionName -FQDN $externalFQDN -subject $subject -OutputRequestPath $OutputDirectory 
      
    • 对于低特权环境,若要生成一个声明了必需属性的明文证书模板文件,请添加 -LowPrivilege 参数:

      New-AzsHubDeploymentCertificateSigningRequest -RegionName $regionName -FQDN $externalFQDN -subject $subject -OutputRequestPath $OutputDirectory -IdentitySystem $IdentitySystem -LowPrivilege
      
    • 对于开发和测试环境,要生成具有多个使用者可选名称的单个 CSR,请添加 -RequestType SingleCSR 参数和值。

      重要

      我们建议不要将此方法用于生产环境。

      New-AzsHubDeploymentCertificateSigningRequest -RegionName $regionName -FQDN $externalFQDN -RequestType SingleCSR -subject $subject -OutputRequestPath $OutputDirectory -IdentitySystem $IdentitySystem
      

完成最后的步骤:

  1. 查看输出:

    Starting Certificate Request Process for Deployment
    CSR generating for following SAN(s): *.adminhosting.east.azurestack.contoso.com,*.adminvault.east.azurestack.contoso.com,*.blob.east.azurestack.contoso.com,*.hosting.east.azurestack.contoso.com,*.queue.east.azurestack.contoso.com,*.table.east.azurestack.contoso.com,*.vault.east.azurestack.contoso.com,adminmanagement.east.azurestack.contoso.com,adminportal.east.azurestack.contoso.com,management.east.azurestack.contoso.com,portal.east.azurestack.contoso.com
    Present this CSR to your Certificate Authority for Certificate Generation:  C:\Users\username\Documents\AzureStackCSR\Deployment_east_azurestack_contoso_com_SingleCSR_CertRequest_20200710165538.req
    Certreq.exe output: CertReq: Request Created
    
  2. 如果使用了 -LowPrivilege 参数,则会在 C:\Users\username\Documents\AzureStackCSR 子目录中生成一个 .inf 文件。 例如:

    C:\Users\username\Documents\AzureStackCSR\Deployment_east_azurestack_contoso_com_SingleCSR_CertRequest_20200710165538_ClearTextTemplate.inf

    将文件复制到允许使用提升的系统,然后通过以下语法使用 certreq 对每个请求进行签名:certreq -new <example.inf> <example.req>。 然后,在该提升的系统上完成流程的其他步骤,因为它要求将 CA 签名的新证书与在提升的系统上生成的私钥相匹配。

  • 就绪性检查器将使用系统的区域和外部域名 (FQDN) 来确定从现有证书中提取属性的终结点。 如果以下任一情况适用于你的场景,则必须使用本文顶部的“选择 CSR 证书场景”选择器,并改为选择本文的新部署版本:
    • 你想要在终结点上更改证书的属性,例如使用者、密钥长度和签名算法。
    • 你想要使用仅包含公用名属性的证书使用者。
  • 在开始之前,请确认 Azure Stack Hub 系统已连接 HTTPS。

为续订证书生成 CSR

本部分介绍为续订现有 Azure Stack Hub PKI 证书准备 CSR。

生成 CSR

  1. 在安装了就绪性检查器工具的计算机上打开 PowerShell 会话。

  2. 声明以下变量:

    注意

    就绪性检查器使用 stampEndpoint 及其前面的字符串来查找现有证书。 例如,portal.east.azurestack.contoso.com 用于部署证书,sso.appservices.east.azurestack.contoso.com 用于应用服务证书等。

    $regionName = 'east'                                            # The region name for your Azure Stack Hub deployment
    $externalFQDN = 'azurestack.contoso.com'                        # The external FQDN for your Azure Stack Hub deployment    
    $stampEndpoint = "$regionName.$externalFQDN"
    $outputDirectory = "$ENV:USERPROFILE\Documents\AzureStackCSR"   # Declare the path to an existing output directory
    
  3. 通过完成以下一项或多项操作来生成 CSR:

    • 对于生产环境,第一个脚本将为部署证书生成 CSR:

      New-AzsHubDeploymentCertificateSigningRequest -StampEndpoint $stampEndpoint -OutputRequestPath $OutputDirectory
      
    • 第二个脚本可以在需要的情况下使用 -IncludeContainerRegistry,同时为 Azure 容器注册表生成 CSR,作为部署证书的 CSR:

      New-AzsHubDeploymentCertificateSigningRequest -StampEndpoint $stampEndpoint -OutputRequestPath $OutputDirectory -IncludeContainerRegistry
      
    • 第三个脚本将为已安装的任何可选 PaaS 服务生成 CSR:

      # App Services
      New-AzsHubAppServicesCertificateSigningRequest -StampEndpoint $stampEndpoint -OutputRequestPath $OutputDirectory
      
      # DBAdapter
      New-AzsHubDBAdapterCertificateSigningRequest -StampEndpoint $stampEndpoint -OutputRequestPath $OutputDirectory
      
      # EventHubs
      New-AzsHubEventHubsCertificateSigningRequest -StampEndpoint $stampEndpoint -OutputRequestPath $OutputDirectory
      
      # Azure Container Registry
      New-AzsHubAzureContainerRegistryCertificateSigningRequest -StampEndpoint $stampEndpoint -OutputRequestPath $OutputDirectory 
      
    • 对于开发和测试环境,要生成具有多个使用者可选名称的单个 CSR,请添加 -RequestType SingleCSR 参数和值。

      重要

      我们建议不要将此方法用于生产环境。

      New-AzsHubDeploymentCertificateSigningRequest -StampEndpoint $stampEndpoint -OutputRequestPath $OutputDirectory -RequestType SingleCSR
      
  4. 查看输出:

    Querying StampEndpoint portal.east.azurestack.contoso.com for existing certificate
    Starting Certificate Request Process for Deployment
    CSR generating for following SAN(s): *.adminhosting.east.azurestack.contoso.com,*.adminvault.east.azurestack.contoso.com,*.blob.east.azurestack.contoso.com,*.hosting.east.azurestack.contoso.com,*.queue.east.azurestack.contoso.com,*.table.east.azurestack.contoso.com,*.vault.east.azurestack.contoso.com,adminmanagement.east.azurestack.contoso.com,adminportal.east.azurestack.contoso.com,management.east.azurestack.contoso.com,portal.east.azurestack.contoso.com
    Present this CSR to your certificate authority for certificate generation: C:\Users\username\Documents\AzureStackCSR\Deployment_east_azurestack_contoso_com_SingleCSR_CertRequest_20200710122723.req
    Certreq.exe output: CertReq: Request Created
    

准备好后,将生成的 .req 文件提交给 CA(内部或公共)。 由 $outputDirectory 变量指定的目录包含必须提交给 CA 的 CSR。 此目录还包含一个子目录,其中包含生成证书请求期间使用的 .inf 文件,供你参考。 请确保 CA 使用符合 Azure Stack Hub PKI 要求的生成请求来生成证书。

后续步骤

从证书颁发机构收到证书后,请在同一个系统上遵循准备 Azure Stack Hub PKI 证书中的步骤。