Active Directory 证书服务 (AD CS) 是一个 Windows Server 角色,负责颁发和管理在安全通信和身份验证协议中使用的公钥基础结构 (PKI) 证书。
数字证书可用于对电子文档和消息进行加密和数字签名,以及对网络上的计算机、用户或设备帐户进行身份验证。 例如,数字证书用于提供:
AD CS 提供以下重要功能:
优点
可以使用 AD CS,通过将个人、计算机或服务的标识与相应的私钥进行绑定来增强安全性。 AD CS 为你提供了一种对证书的分发和使用进行管理的经济、高效和安全的方法。 除了绑定标识和私钥外,AD CS 还包含可用于管理证书注册和吊销的功能。
可以使用 Active Directory 中的现有终结点标识信息来注册证书,这意味着可以将信息自动插入到证书中。 AD CS 还可用于配置 Active Directory 组策略,以指定允许哪些用户和计算机使用哪些类型的证书。 组策略配置可实现基于角色或基于属性的访问控制。
AD CS 支持的应用领域包括安全/多用途 Internet 邮件扩展 (S/MIME)、安全的无线网络、虚拟专用网络 (VPN)、Internet 协议安全 (IPsec)、加密文件系统 (EFS)、智能卡登录、安全套接字层/传输层安全性 (SSL/TLS) 以及数字签名。
如果要部署 NPS(网络策略服务器)也需要安装证书服务器才能正常使用。
## powershell 管理员执行 Install-WindowsFeature AD-Certificate -IncludeManagementTools # 安装证书服务 Add-WindowsFeature Adcs-Cert-Authority -IncludeManagementTools # 安装证书颁发机构功能 Install-WindowsFeature ADCS-Web-Enrollment -IncludeManagementTools # 安装证书Web服务功能 |
## powershell 管理员执行 Install-AdcsCertificationAuthority -CAType EnterpriseRootCA -HashAlgorithmName SHA256 -ValidityPeriod Years -ValidityPeriodUnits 99 |
## 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绑定证书 |
访问 https://localhost/certsrv/Default.asp 进行申请
## 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 |
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! |
文件格式 | 扩展名 | 包含内容 | 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 |
扩展名:.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----- |
扩展名:.der / .cer
编码:二进制
内容:仅证书,不包含私钥
应用:主要用于 Java 平台(如 Tomcat keystore/JKS 导入),或有的 Windows/IIS。
用法补充:DER 格式常作为证书数量较多或须用二进制格式时使用。
全称:PKCS#12
扩展名:.pfx / .p12
内容:证书(公钥)+ 私钥 + 可选CA根证书,全部打包在一个文件中,并用密码保护
编码:二进制
典型应用:IIS、Windows Server、Azure、IIS Express、某些支持SSL的Windows应用。
注意事项:导入 PFX 时须输入密码(PFX/P12 导出时必须指定密码)。
全称:PKCS#7
扩展名:.p7b / .p7c
内容:只含公钥证书签名链,不包含私钥
编码:ASCII(Base64)或二进制
应用场景:CA 连带证书链传递,IIS、Java 等平台的证书链导入
推荐格式:.pfx (PKCS#12,含私钥)
支持格式:导入向导也支持 .cer / .crt,但必须提前在 Windows 证书管理器导入私钥
部署说明:
如何转换为PFX格式:
# 合并已有证书文件和私钥生成pfx openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile chain.crt |
推荐格式:PEM格式(明文Base64)
server.crt :服务器公钥证书
server.key :服务器私钥
可选 fullchain.crt:已拼接的主证书+CA证书链
部署说明:
示例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 |
## 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 |