目前我正在开发一个Web应用程序,该应用程序将作为认证注册的MS CA接口。应用程序生成csr并将其发送给CA后出现错误。证书应具有以下结构:
Serialnumber = UserId, CN = FirstName SecondName, O = Organization, P = PhoneNumber
这是一个真实的例子:
Serialnumber = 200554041000, CN = John Farel, O = SRL Insign, P = 60182209, C = MD
显示的错误是:
CertEnroll :: CX500DistinguishedName :: Encode:该字符串包含一个 无效的X500名称属性键,oid,值或分隔符。 0x80092023 (-2146885597)
如果我删除P或在电话上更改它一切顺利,并且正在生成证书。
第二个!! :)证书生成后,科目DN包含所有bun而不是Serialnumber和Phone。
我在MS Windows Server 2008,CA Cryptography Service Provider上使用MS CA: Microsoft软件存储提供程序,哈希算法:SHA1。
如需更多信息,请发表评论。谢谢你的期待!
答案 0 :(得分:1)
很少有人知道:
1)" PhoneNumber"属性命名为"电话"而不是" P"或其他任何东西。
编辑:
2)我检查了SDK,不幸的是,似乎无法在主题中包含Phone RDN属性。从头文件中只能添加以下属性:
//+--------------------------------------------------------------------------
// Name properties:
#define wszPROPDISTINGUISHEDNAME TEXT("DistinguishedName")
#define wszPROPRAWNAME TEXT("RawName")
#define wszPROPCOUNTRY TEXT("Country")
#define wszPROPORGANIZATION TEXT("Organization")
#define wszPROPORGUNIT TEXT("OrgUnit")
#define wszPROPCOMMONNAME TEXT("CommonName")
#define wszPROPLOCALITY TEXT("Locality")
#define wszPROPSTATE TEXT("State")
#define wszPROPTITLE TEXT("Title")
#define wszPROPGIVENNAME TEXT("GivenName")
#define wszPROPINITIALS TEXT("Initials")
#define wszPROPSURNAME TEXT("SurName")
#define wszPROPDOMAINCOMPONENT TEXT("DomainComponent")
#define wszPROPEMAIL TEXT("EMail")
#define wszPROPSTREETADDRESS TEXT("StreetAddress")
#define wszPROPUNSTRUCTUREDNAME TEXT("UnstructuredName")
#define wszPROPUNSTRUCTUREDADDRESS TEXT("UnstructuredAddress")
#define wszPROPDEVICESERIALNUMBER TEXT("DeviceSerialNumber")
3)避免" Microsoft软件密钥存储提供商"提供程序在.NET应用程序中的使用,因为它是CNG提供程序而X509Certificate2
不支持CNG(在.NET上的耻辱)。但是,建议将KSP用于CA密钥(当没有HSM时)。