使用单独的密钥生成 MS CA 证书,C#
MS CA certificate generation with individual keys, C#
目前我正在开发一个 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: The string contains an
invalid X500 name attribute key, oid, value or delimiter. 0x80092023
(-2146885597)
如果我在 Phone 上删除 P 或更改它,一切顺利,并且正在生成证书。
第二个!! :) 生成证书后,主题 DN 包含所有包而不是序列号和 Phone.
我在 MS Windows Server 2008 上使用 MS CA,CA 加密服务提供商:
Microsoft 软件存储提供商,哈希算法:SHA1。
有关更多信息,请发表评论。谢谢期待!
需要知道的几件事:
1) "PhoneNumber" 属性被命名为 "Phone",而不是 "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) 避免在您的 .NET 应用程序中使用 "Microsoft Software Key Storage Provider" 提供程序,因为它是 CNG 提供程序并且 X509Certificate2
不支持 CNG(.NET 可耻)。不过,建议使用 KSP 作为 CA 密钥(当没有 HSM 时)。
目前我正在开发一个 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: The string contains an invalid X500 name attribute key, oid, value or delimiter. 0x80092023 (-2146885597)
如果我在 Phone 上删除 P 或更改它,一切顺利,并且正在生成证书。
第二个!! :) 生成证书后,主题 DN 包含所有包而不是序列号和 Phone.
我在 MS Windows Server 2008 上使用 MS CA,CA 加密服务提供商: Microsoft 软件存储提供商,哈希算法:SHA1。
有关更多信息,请发表评论。谢谢期待!
需要知道的几件事:
1) "PhoneNumber" 属性被命名为 "Phone",而不是 "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) 避免在您的 .NET 应用程序中使用 "Microsoft Software Key Storage Provider" 提供程序,因为它是 CNG 提供程序并且 X509Certificate2
不支持 CNG(.NET 可耻)。不过,建议使用 KSP 作为 CA 密钥(当没有 HSM 时)。