我正在尝试使用 Windows CertSrv Web-Enrollment Client 中的附加属性字段颁发新证书。
我添加了 CSR,选择了模板并将其输入到属性字段中:
SAN:dns=HOSTNAME&dns=HOSTNAME.DOMAIN.COM&ipaddress=IPADRESS
请求成功,但是当我检查签名的证书时,没有添加“备用名称”属性。我遗漏了什么吗?也许是模板的问题?(使用了默认的 Win 2003 级 Web 服务器模板副本和一些自定义设置)。
/编辑我也尝试过使用
certreq -submit -attrib "CertificateTemplate:MYTEMPLATE" <Cert Request.req> -attrib "SAN:dns=HOSTNAME&dns=HOSTNAME2&ipaddress=IPADDRESS"
导致同样的问题:证书已生成,但没有任何 SAN 属性。
/edit2 我还设置了 CA 使用以下方式颁发 SAN 证书
certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
并重新启动 CA 服务。仍然没有 SAN。
请注意:使用 req. 文件和 OpenSSL 生成 CSR,我能够使用包含一些 SAN 的 CA 生成证书。但是,此选项在我当前情况下无效,因为我从应用程序获取 CSR,而无法为该应用程序手动生成 CSR。
/编辑3 我尝试使用默认的 Web 服务器证书,没有任何更改,突然就成功了。现在的问题是:启用 SAN 的模板要求是什么?
答案1
我知道这已经过时了,但我刚刚自己弄清楚了,并认为这可能会对其他人有所帮助。我也无法让 CA 通过网页或格式添加 SAN certreq ... -attrib "SAN:DNS=<FQDN>[&DNS=<FQND2>...]..."
。即使颁发了证书,SAN 属性也被忽略了。
不过,我发现它适用于这种格式:certreq -attrib "CertificateTemplate:WebServer\nSAN:DNS=<Name1>[&DNS=<name2>...][&IPAddress=<IP1>...]" <csr filename> <cer filename>
例如,如果您有一个名为 HP_VC.csr 的证书请求文件,并且希望主题备用名称为 vc1、vc2、vc1.domain.com、vc2.domain.com、192.168.1.1 和 192.168.1.2,则命令为:
certreq -attrib "CertificateTemplate:WebServer\nSAN:DNS=vc1&DNS=vc2&DNS=vc1.domain.com&DNS=vc2.domain.com&IPAddress=192.168.1.1&IPAddress=192.168.1.2" HP_VC.csr HP_VC.cer
HP_VC.cer 中的证书将包含 SAN 属性。
我将其用于 HP Virtual Connect (VC) 模块、Onboard Administrator (OA) 和 iLO。它应该适用于任何需要 SAN 证书的一般情况。
答案2
这里也有一个很好的答案,它为我解决了这个问题:http://terenceluk.blogspot.com/2017/09/adding-san-subject-alternative-name.html
默认情况下,证书服务似乎实际上不接受来自 Web 表单的 SubjectAltName 输入,这可能是出于安全原因。正如有人在本页上评论的那样 - 这取决于您对证书服务 Web 控制台的访问控制的信任程度。