
# 签发域控证书（通过OpenSSL工具）
#### 操作场景
在AD场景下启基于证书的身份验证时，要求AD域具备有效的域控证书。该证书可由AD域上的AD CS服务提供，若未安装，亦可使用OpenSSL工具自行签发域控证书。
#### 前提条件
- 准备一台本地Windows PC或ECS服务器，ECS服务器创建参考[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)章节。
- 已参考[安装OpenSSL工具]章节在本地Windows PC或购买的ECS服务器上安装OpenSSl工具。
- 生成证书吊销列表文件，参考 [生成证书吊销列表文件]。
- 已参考[获取AD服务器ObjectGUID的值]。
 
#### 约束与限制
- 证书必须具有指向有效证书吊销列表（CRL）的CRL分发点扩展。
- 证书密钥用法部分必须包含"数字签名"和"密钥加密"。
- 证书增强型密钥用户部分必须包含如下：
  - 客户端身份验证（*1.3.6.1.5.5.7.3.2*）
  
  - 服务端身份验证（*1.3.6.1.5.5.7.3.1*）
   
- 证书使用者可选名称部分必须包含域名系统（DNS）名称。 如果使用 SMTP 复制，证书使用者可选名称部分还必须包含目录中域控制器对象的全局唯一标识符（GUID）。 例如：其他名称：*1.3.6.1.4.1.311.25.1 = ac 4b 29 06 aa d6 5d 4f a9 9c 4c bc b0 6a 65 d9 DNS* *Name=server1.northwindtraders.com*
  - 证书模板必须具有Basic Metabolic Panel（BMP），数据值DomainController的扩展。
   
- 域控制器证书必须安装在本地计算机的证书存储中。
 
#### 操作步骤
**使用OpenSSL生成CA证书**
1. 在本地Windows PC或ECS服务器上创建存放生成证书的相关文件，如：*RootCA*。
2. 进入创建的*RootCA* 目录，分别执行如下命令生成CA证书。
   
   - 生成密钥：**openssl genrsa -out ca.key 2048**
   
   
   
   - 生成证书请求文件：**openssl req -new -key ca.key -out ca.csr**
   
   - 生成证书：**openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt**
   
   
   
   
**使用CA证书生成域控证书**
1. 在本地Windows PC或ECS服务器中创建"flower_domain.cnf"文件。
2. 将以下内容拷贝至"flower_domain.cnf"文件中。 
   **以下参数根据实际情况获取配置：**
   - CN：AD服务器的"计算机全名"（依次右键单击"此地脑 \> 属性"，进行查看，如下图所示）。 ![](https://support.huaweicloud.com/workspace_faq/zh-cn_image_0000002518722745.png)
     
     
   
   - DC：AD服务器的域名（依次右键单击"此地脑 \> 属性"，进行查看，如下图所示）。 ![](https://support.huaweicloud.com/workspace_faq/zh-cn_image_0000002486722848.png "点击放大")
     
     
   
   - DNS.1：AD服务器的"计算机全名"（依次右键单击"此地脑 \> 属性"，进行查看，如下图所示）。 ![](https://support.huaweicloud.com/workspace_faq/zh-cn_image_0000002518722747.png)
     
     
   
   - OCTETSTRING：获取AD服务器ObjectGUID的值，参考[获取AD服务器ObjectGUID的值]章节获取。
     ![](https://support.huaweicloud.com/workspace_faq/public_sys-resources/note_3.0-zh-cn.png)
     请确保使用的值中不包含任何空格。
     
   
   - URI.1：证书吊销列表文件，参考[生成证书吊销列表文件]章节获取。
     ```
     [ req ]
     distinguished_name = req_distinguished_name
     default_bits        = 2048
     prompt              = no
     default_md          = sha256
     req_extensions = v3_req
     [ req_distinguished_name ]
     CN  = WIN-HSDLL4RO8LJ.flower.com
     OU = Domain Controllers
     DC = flower
     [ v3_req ]
     basicConstraints = CA:FALSE
     keyUsage = digitalSignature, keyEncipherment
     extendedKeyUsage = clientAuth, serverAuth
     subjectAltName = @alt_names
     1.3.6.1.4.1.311.20.2 = ASN1:BMP:DomainController
     crlDistributionPoints = @crl_section 
     [ template_sample ]
     filed1 = UTF8:some
     [ alt_names ]
     otherName.1 = 1.3.6.1.4.1.311.25.1;FORMAT:HEX,OCTETSTRING:DDB5053B5EDB014080ED528D4B34DB8B 
     DNS.1 = WIN-HSDLL4RO8LJ.flower.com
     [ v3_ca ]
     basicConstraints = CA:TRUE, pathlen:0
     keyUsage = critical, keyCertSign, cRLSign
     [ crl_section ] 
     URI.1 = http://WIN-HSDLL4RO8LJ.flower.com/sc-root-ca.crl
     ```
     
   
   
   
   
3. 在本地Windows PC或ECS服务器中按"win+r"，在弹出的运行对话框中输入"cmd"，按"Enter"，打开命令行窗口。
4. 进入flower_domain_.cnf文件所在目录，执行以下命令。 
   ***示例：cd D:\\Users\\file***（file为flower_domain.cnf文件所在目录）
   
   
5. 将[2]中生成的**ca.key** 和**ca.crt**文件拷贝至"flower_domain_.cnf"文件所在目录。
6. 生成证书私钥，执行以下命令。 
   **openssl genrsa -out flower_domain.key 2048**
   
   
7. 根据私钥和配置文件生成请求文件，执行以下命令。 
   **openssl req -new -key flower_domain.key -config flower_domain.cnf -out flower_domain.csr**
   
   
8. 生成域控证书文件，执行以下命令。
   
   **openssl x509 -req -in flower_domain.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -extfile flower_domain.cnf -extensions v3_req -out flower_domain.crt**
   
   
9. （可选）证书和私钥合并生成域控证书，执行以下命令。 
   **openssl pkcs12 -export -inkey flower_domain.key -in flower_domain.crt -certfile ca.crt -out flower_domain.pfx** **-password pass:*密码***
   ![](https://support.huaweicloud.com/workspace_faq/public_sys-resources/note_3.0-zh-cn.png)
   - 如上命令的密码请根据实际需求自定义。
   
   - 此命令将证书与私钥合并为一个文件，建议保存该文件以备后续使用。
    
   
   
**将生成的域控证书导入至AD服务器**
1. 使用账号密码登录至AD服务器中。
2. 将[8]生成的域控证书（**flower_domain.crt**）拷贝至AD服务器中。
3. 按"win + r"，在弹出的运行对话框中输入"cmd"，按"Enter"，打开命令行窗口。
4. 进入域控证书目录，执行如下命令。 
   ***示例：cd D:\\Users\\file***（file目录为域控证书所在目录）
   
   
5. 在命令行窗口输入命令导入域控证书，执行如下命令。 
   **certutil -enterprise -addstore NTAuth** **flower_domain.crt**
   
   
 
 #### 获取AD服务器ObjectGUID的值
通过OpenSSL签发CA证书前，需预先获取AD服务器的ObjectGUID值以供命令行使用。
1. 通过账号密码登录AD服务器。
2. 按"win + r"，在弹出的运行对话框中输入"dsa.msc"，按"Enter"，弹出"Active Directory 用户和计算机"页面。
3. 打开Active Directory 用户和计算的高级功能，如[图1]所示。
   
   图1高级功能   
   ![](https://support.huaweicloud.com/workspace_faq/zh-cn_image_0000002486722850.png "点击放大")
   
   
   
4. 展开AD服务器的域名，选择"Domain Controllers"域控制器。
5. 在"Domain Controllers"域控制器右键单击选择"属性"，在弹出的属性页面查看"属性编辑器"页签，如[图2]所示。
   
   图2查看属性编辑器   
   ![](https://support.huaweicloud.com/workspace_faq/zh-cn_image_0000002518722749.png "点击放大")
   
   
   
6. 在属性编辑器页签，下拉选择objectGUID属性目录，双击查看objectGUID的值，如[图3]所示。
   
   图3ObjectGUID的值   
   ![](https://support.huaweicloud.com/workspace_faq/zh-cn_image_0000002486722852.png)
   
   
   
 #### 安装OpenSSL工具
- 准备一台本地Windows PC或ECS服务器，ECS服务器创建参考[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)章节。

- OpenSSL官网下载地址：[点此获取](https://www.openssl.org/source/)。
**Windows 安装方法**
OpenSSL 官网没有提供 Windows 版本的安装包，可以选择其他开源平台提供的工具。[点此获取](https://slproweb.com/products/Win32OpenSSL.html)，以该工具为例：
1. 选择32位或者64位合适的版本下载，*示例：Win64OpenSSL_Light-3_5_0.exe*。
2. 在WindowsPC或ECS服务器中，双击安装包，勾选"I accept the agreement"，单击"Next"，如下图所示。 
   ![](https://support.huaweicloud.com/workspace_faq/zh-cn_image_0000002518722751.png "点击放大")
   
   
3. 连续4次单击"Next"，单击"Install"，完成安装。
4. 设置环境变量，例如，工具安装在C:\\Program Files\\OpenSSL-Win64目录，将C:\\Program Files\\OpenSSL-Win64\\bin复制到用户变量或系统变量的Path中，如[图4]所示。
   
   图4配置环境变量   
   ![](https://support.huaweicloud.com/workspace_faq/zh-cn_image_0000002518842735.png "点击放大")
   
   
   
 
 #### 生成证书吊销列表文件
证书吊销列表 (Certificate Revocation List ，简称： CRL) ：证书颁发机构 (CA)维护的数字签名文件，用于识别已吊销的证书。
1. 在弹性云服务器中创建index.txt和crlnumber文件。
2. 在弹性云服务器中创建 *crl_v3.cnf* 文件，将以下内容拷贝至文件中。
   
   以下参数请根据实际情况修改：
   - dir：在[2]章节中创建的CA根证书和私钥的路径，请根据实际情况配置。
   
   - certificate：选择[2]创建根CA证书。
   
   - private_key：选择[2]章节生成的密钥文件。
     ```
     [ ca ]
     default_ca = my_ca
     [ my_ca ]
     dir               = D:/project/V14-CRL
     database          = $dir/index.txt
     new_certs_dir     = $dir/newcerts
     certificate       = $dir/ca.crt
     private_key       = $dir/ca.key
     serial            = $dir/serial
     crlnumber         = $dir/crlnumber
     crl               = $dir/sc-root-ca.crl
     default_crl_days  = 365
     default_md        = sha256
     [ crl_ext ]
     authorityKeyIdentifier=keyid:always,issuer
     ```
     
   
   
   
   
3. 按"win + r"，在弹出的运行框中输入"cmd",按"Enter"，打开命令行窗口。
4. 进入"crl_v3.cnf"文件所在目录，执行如下命令。 
   ***示例：cd D:\\Users\\file***（file为crl_v3.cnf文件所在目录）
   
   
5. 执行命令生成证书吊销列表文件。 
   **openssl ca -gencrl -config crl_v3.cnf -out sc-root-ca.crl**
   *sc-root-ca.crl即为生成的证书吊销列表文件*
   
   
 
