在Exchange 2010服务器上,新建证书请求后,在CA服务器上通过certreq生成证书时显示“没有颁发证书 (不完整)”且没有错误提示,查看req文件没有乱码,检查证书模板重新新建模板问题依旧,但可以使用IIS(http://caserver/certsrv)正常申请证书。
解决办法:
使用记事本打开req文件,另存为时修改编码"Unicode"(默认)为"ANSI"。再重新执行命令即可。
certreq -submit -attrib "CertificateTemplate:xxxx" aaa.req bbb.cer
注意:通过certreq生成证书时可以加入CA服务器参数-config加CA服务器名,在新建证书模板时需要修改“使用者名称”配置为“在请求中提供”。否则会报错:“没有颁发证书 (已拒绝) 被策略模块拒绝 DNS 名不可用,无法添加到使用者替换名称。 0x8009480f (-2146875377)”
参考以下资料:
Consider the following scenario. You create certificate certificate by using either Exchange Management Console (EMC) or Exchange Management Shell (EMS) and save it to a file. When you attempt to submit certificate request to a Windows-based Certification Authority (CA) (also known as Microsoft Certificate Services), you may receive error message. If CA server runs on Windows Server 2003 (R2) or Windows Server 2008, you receive the following message:
ASN1 bad tag value met. 0x8009310b (ASN: 267).
If CA server runs on Windows Server 2008 R2, no there are no response from MMC console. If you are using certreq.exe utility, you receive an error:
Contoso Pharmaceuticals Enrollment Policy
{F29AC102-CDCD-4AA8-B1F5-761051FB52C5}
https://cert.contoso.com/ADPolicyProvider_CEP_Kerberos/service.svc/CEP
Certificate not issued (Incomplete)
And certificate request is not issued, failed or pended.
Additional information: for certificate request generation follow the steps described in the Create a New Exchange Certificate TechNet article.
Aside note: certificate request do not contains certificate template information which is required for Enterprise CAs. In order to submit the request to Enteprise CA you should use certreq.exe utility with the following syntax:
certreq –submit –attrib "CertificateTemplate:TemplateCommonName"
this command will add certificate template information as a attribute.
CAUSE
This behavior occurs when certificate request is stored in a file in Unicode encoding. Microsoft Certificate Services do not support Unicode-encoded files request files. Only ANSI encoding is supported.
STATUS
Microsoft has confirmed this behavior as inconsistent. No bug fixes are available. See Workaroundsection for example steps to overcome the issue.
WORKAROUND
If you already have certificate request file, do the following:
Open Notepad program.
In the File menu, click Open.
In the Open File dialog, locate certificate request file.
In the File menu, click Save As… option.
Type a name for new request file. In the Encoding drop-down list, select ANSI.
Click Save to save the request.
Now you can resubmit certificate request to Microsoft Certificate Services
If you are using Exchange Management Shell use the following guidance to save Base64-encoded certificate request to a file with proper encoding:
In the Exchange Management Shell console run New-ExchangeCertificate cmdlet with required parameters, save output to a variable and save output to a file with proper encoding:
$OutputRequest=New-ExchangeCertificate <Specify and fill all required properties>Set-Content-PathPath\ExchRequest.req -Value$OutputRequest-EncodingANSI
The default behavior for PowerShell Set-Content, Add-Content, Out-File and redirection operator">" is to save content in Unicode encoding. If the file already exist, the commands respects existing file encoding. The default encoding can be changed by using –Encoding parameter for cmdlets.
Note: redirection operators do not support encoding change.
APPLIES TO
Windows Server 2003 (x86 and x64) Standard, Enterprise and Datacenter editions, all service packs
Windows Server 2003 (x86 and x64) R2 Standard, Enterprise and Datacenter editions, all service packs
Windows Server 2008 (x86 and x64) Standard, Enterprise and Datacenter editions, all service packs
Windows Server 2008 R2 Standard, Enterprise and Datacenter editions, all service packs
Active Directory Certificate Services
Microsoft Exchange Server 2007
Microsoft Exchange Server 2010