使用单个密钥生成MS CA证书,C#

时间:2015-04-08 20:27:46

标签: c# ssl cryptography x509certificate ca

目前我正在开发一个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。

如需更多信息,请发表评论。谢谢你的期待!

1 个答案:

答案 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时)。