1. 简介

Active Directory 证书服务 (AD CS) 是一个 Windows Server 角色,负责颁发和管理在安全通信和身份验证协议中使用的公钥基础结构 (PKI) 证书。

1.1. 颁发和管理证书

数字证书可用于对电子文档和消息进行加密和数字签名,以及对网络上的计算机、用户或设备帐户进行身份验证。 例如,数字证书用于提供:

  • 通过加密提供机密性。
  • 通过数字签名提供完整性。
  • 通过将证书密钥和计算机、用户或计算机网络上的设备帐户关联来进行身份验证。

1.2. 主要功能

AD CS 提供以下重要功能:

  • 证书颁发机构:根和从属证书颁发机构 (CA) 用于向用户、计算机和服务颁发证书,并管理证书的有效性。
  • 证书颁发机构 Web 注册:Web 注册使用户能够通过 Web 浏览器连接到 CA,以便申请证书和检索证书吊销列表 (CRL)。
  • 联机响应程序:联机响应程序服务可解码对特定证书的吊销状态申请,评估这些证书的状态,并发送回包含所申请证书状态信息的签名响应。
  • 网络设备注册服务:通过此服务,路由器和其他不具有域帐户的网络设备可以获取证书。
  • TPM 密钥证明:通过它,证书颁发机构可验证私钥是否受基于硬件的 TPM 保护以及 TPM 是否受 CA 信任。 TPM 密钥证明可防止证书导出到未经授权的设备,还可将用户标识绑定到设备。
  • 证书注册策略 Web 服务:通过此服务,用户和计算机能够获取证书注册策略信息。
  • 证书注册 Web 服务:通过此服务,用户和计算机能够通过 Web 服务执行证书注册。 与证书注册策略 Web 服务一起使用时,可在客户端计算机不是域成员或域成员未连接到域时实现基于策略的证书注册。

优点

可以使用 AD CS,通过将个人、计算机或服务的标识与相应的私钥进行绑定来增强安全性。 AD CS 为你提供了一种对证书的分发和使用进行管理的经济、高效和安全的方法。 除了绑定标识和私钥外,AD CS 还包含可用于管理证书注册和吊销的功能。

可以使用 Active Directory 中的现有终结点标识信息来注册证书,这意味着可以将信息自动插入到证书中。 AD CS 还可用于配置 Active Directory 组策略,以指定允许哪些用户和计算机使用哪些类型的证书。 组策略配置可实现基于角色或基于属性的访问控制。

AD CS 支持的应用领域包括安全/多用途 Internet 邮件扩展 (S/MIME)、安全的无线网络、虚拟专用网络 (VPN)、Internet 协议安全 (IPsec)、加密文件系统 (EFS)、智能卡登录、安全套接字层/传输层安全性 (SSL/TLS) 以及数字签名。

1.3. AD CS 安装前提

  • 登录操作安装的用户必须是域管理员、企业管理员。所以直接使用 administrator 比较好。
  • 配置的服务器必须已经加入进域控

1.4. 其他

如果要部署 NPS(网络策略服务器)也需要安装证书服务器才能正常使用。

2. 安装 AD CS

## powershell 管理员执行

Install-WindowsFeature AD-Certificate -IncludeManagementTools 
# 安装证书服务

Add-WindowsFeature Adcs-Cert-Authority -IncludeManagementTools
# 安装证书颁发机构功能

Install-WindowsFeature ADCS-Web-Enrollment -IncludeManagementTools
# 安装证书Web服务功能

2.1. 初始化CA证书,指定加密算法和过期时间

## powershell 管理员执行

Install-AdcsCertificationAuthority -CAType EnterpriseRootCA -HashAlgorithmName SHA256 -ValidityPeriod Years -ValidityPeriodUnits 99

2.2. 安装并初始化证书 Web 服务

## powershell 管理员执行

Install-AdcsWebEnrollment
# 安装角色

New-WebBinding -Name "Default Web Site" -Protocol "https"
# IIS开启https

Get-ChildItem -Path Cert:\LocalMachine\My
# 获取证书指纹,找到和主机名对应的证书,复制前面的指纹。

(Get-WebBinding -Name "Default Web Site" -Port 443 -Protocol "https").AddSslCertificate("7AE5AB7D969B8A37D6436B2FF926D8B0859D6E54", "my")
# IIS绑定证书

2.3. Web 申请证书

访问 https://localhost/certsrv/Default.asp 进行申请

3. 证书管理

3.1. 使用 Powershell 快速申请 cer 格式 Web 证书

## powershell 管理员执行

$inf = @"
[Version]
Signature="\$Windows NT$"

[NewRequest]
Subject = "CN=wiki.waringid.local"
KeySpec = 1
KeyLength = 2048
HashAlgorithm = sha256
KeyAlgorithm = RSA
Exportable = TRUE
RequestType = PKCS10
SMIME = FALSE
KeyUsage = 0xa0


[RequestAttributes]
CertificateTemplate = WebServer
"@

cd C:\

mkdir C:\temp

Set-Content -Path "C:\temp\mycert.inf" -Value $inf -Encoding ASCII

certreq -new    C:\temp\mycert.inf C:\temp\mycert.req
certreq -submit C:\temp\mycert.req C:\temp\mycert.cer
certreq -accept C:\temp\mycert.cer

3.2. 生成 Nginx 可用证书

1、安装 openssl

## powershell 管理员执行

winget.exe install ShiningLight.OpenSSL.Dev

2、导出 PFX 证书 - 注意域名

## powershell 管理员执行

# 设定常量
$Subject = "*CN=wiki.waringid.local*"                  # 用你的域名/CN特征替换
$PfxPath = "C:\temp\wiki.waringid.local.pfx"           # 用你的域名/CN特征替换
$Password = ConvertTo-SecureString -String "Waringid.me123!" -Force -AsPlainText  # 导出密码

# 找到指定证书
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -like $Subject }

# 导出到PFX
Export-PfxCertificate -Cert $cert -FilePath $PfxPath -Password $Password

3、使用openssl 转换证书格式

## powershell 管理员执行

cd "C:\Program Files\OpenSSL-Win64\bin"
.\openssl.exe pkcs12 -in C:\temp\wiki.waringid.local.pfx -nocerts -nodes -out C:\temp\wiki.waringid.local.key -password pass:Waringid.me123!
.\openssl.exe pkcs12 -in C:\temp\wiki.waringid.local.pfx -clcerts -nokeys -out C:\temp\wiki.waringid.local.crt -password pass:Waringid.me123!

4. 主要 SSL 证书文件格式介绍

文件格式 扩展名 包含内容 PEM/DER编码 场景 服务器举例 (主要支持)
PEM .crt/.pem/.key/.cer 公钥、私钥 PEM (Base64) Nginx/Apache等 Nginx、Apache、Tomcat等
DER .der/.cer 仅证书 DER (二进制) Java/IIS/Win Java Keystore、部分Windows/IIS
PFX/P12 .pfx/.p12 公钥+私钥+CA链 DER(二进制) IIS/Windows IIS、Azure、Windows
P7B/P7C .p7b/.p7c 仅公钥证书链 PEM/DER 证书链传递 IIS、Java

4.1. PEM格式(常见于Linux、Nginx、Apache等)

扩展名:.pem / .crt / .cer / .key

编码:Base64,ASCII文本

内容:头尾分别有-----BEGIN CERTIFICATE-----/-----END CERTIFICATE-----

包含内容:

证书(公钥):-----BEGIN CERTIFICATE-----

私钥:-----BEGIN PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----

常见用法:

Nginx、Apache、Tomcat、HAProxy 等服务器,分别要求证书文件和私钥文件。

示例:

-----BEGIN CERTIFICATE-----
MIIRDzCCAiagAwIBAgIQHxQp...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqh...
-----END PRIVATE KEY-----

4.2. DER格式(常见于Java、Windows)

扩展名:.der / .cer

编码:二进制

内容:仅证书,不包含私钥

应用:主要用于 Java 平台(如 Tomcat keystore/JKS 导入),或有的 Windows/IIS。

用法补充:DER 格式常作为证书数量较多或须用二进制格式时使用。

4.3. PFX/P12 格式(IIS/Windows,部分 Linux 也支持)

全称:PKCS#12

扩展名:.pfx / .p12

内容:证书(公钥)+ 私钥 + 可选CA根证书,全部打包在一个文件中,并用密码保护

编码:二进制

典型应用:IIS、Windows Server、Azure、IIS Express、某些支持SSL的Windows应用。

注意事项:导入 PFX 时须输入密码(PFX/P12 导出时必须指定密码)

4.4. P7B/P7C格式(仅含证书,不含私钥)

全称:PKCS#7

扩展名:.p7b / .p7c

内容:只含公钥证书签名链,不包含私钥

编码:ASCII(Base64)或二进制

应用场景:CA 连带证书链传递,IIS、Java 等平台的证书链导入

4.5. IIS 和 Nginx 的证书格式要求及部署说明

4.5.1. IIS

推荐格式:.pfx (PKCS#12,含私钥)

支持格式:导入向导也支持 .cer / .crt,但必须提前在 Windows 证书管理器导入私钥

部署说明:

  • 在证书向导中引入PFX文件,输入私钥导出密码即可全部配置。
  • 如仅有.cer/.crt则需用“证书管理器—导入”方式。

如何转换为PFX格式:

# 合并已有证书文件和私钥生成pfx
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile chain.crt

4.5.2. Nginx

推荐格式:PEM格式(明文Base64)

server.crt :服务器公钥证书

server.key :服务器私钥

可选 fullchain.crt:已拼接的主证书+CA证书链

部署说明:

  • ssl_certificate (指定公钥或 fullchain)
  • ssl_certificate_key (指定私钥)

示例Nginx配置片段:


ssl_certificate     /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;


# 若有CA证书链,建议如下配置
# 或将链直接拼接写入server.crt

拼接证书链方法(主证书在前,链一路向下拼接)

cat server.crt intermediate.crt root.crt > fullchain.crt

4.6. 不同格式之间的转换方法

## PEM转PFX
openssl pkcs12 -export -out server.pfx \
    -inkey server.key -in server.crt -certfile ca_bundle.crt

## PFX转PEM
openssl pkcs12 -in server.pfx -out server.pem -nodes
# 生成带有证书和私钥的pem,自己分离出来

# PEM转DER
openssl x509 -in server.crt -outform der -out server.der

#DER转PEM
openssl x509 -in server.der -inform der -out server.crt

#P7B转PEM
openssl pkcs7 -print_certs -in server.p7b -out server.crt


  • 无标签
写评论...