За конкретную помощь в вопросе - обещаю денежное вознаграждение.
На фрилансе не нашел, где задать этот вопрос.
Помогите. Вопрос срочен.
Объясню более подробнее.
Основной язык C#. Пишу запрос на квалифицированный сертификат.
Использую следующую dll(библиотеку-сборку) -
Assembly Interop.CERTENROLLLib.dll, v1.0.0.0
Делаю запрос формата PKCS#10
CX509CertificateRequestPkcs10 objPkcs10 = new CX509CertificateRequestPkcs10();
CX509PrivateKey objPrivateKey = new CX509PrivateKey();
CCspInformation objCSP = new CCspInformation();
CCspInformations objCSPs = new CCspInformations();
CX500DistinguishedName objDN = new CX500DistinguishedName();
CX509Enrollment objEnroll = new CX509Enrollment();
CObjectIds objObjectIds = new CObjectIds();
CObjectId objObjectId1 = new CObjectId();
CObjectId objObjectId2 = new CObjectId();
CX509ExtensionKeyUsage objExtensionKeyUsage = new CX509ExtensionKeyUsage();
CX509ExtensionEnhancedKeyUsage objX509ExtensionEnhancedKeyUsage = new CX509ExtensionEnhancedKeyUsage();
string strRequest;
Thread t = new Thread(new ParameterizedThreadStart(FindWindowAndInsertPass));
ThreadParams tp = new ThreadParams();
tp.password = password;
tp.isRequest = true;
t.Start(tp);
try
{
objPrivateKey.ContainerName = containerName;
objPrivateKey.ProviderName = Win32.VPN_DEF_PROV;
objPrivateKey.KeySpec = X509KeySpec.XCN_AT_KEYEXCHANGE;
objPrivateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_ALL_USAGES;
objPrivateKey.Pin = password;
objPrivateKey.Silent = false;
objPrivateKey.Open();
objPkcs10.InitializeFromPrivateKey(X509CertificateEnrollmentContext.ContextUser, objPrivateKey, "");
objExtensionKeyUsage.InitializeEncode(
CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_DIGITAL_SIGNATURE_KEY_USAGE |
CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_NON_REPUDIATION_KEY_USAGE |
CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_KEY_ENCIPHERMENT_KEY_USAGE |
CERTENROLLLib.X509KeyUsageFlags.XCN_CERT_DATA_ENCIPHERMENT_KEY_USAGE
);
objPkcs10.X509Extensions.Add((CX509Extension)objExtensionKeyUsage);
#region CERTIFICATE POLICY
var clientAuthenticationOid1 = new CObjectId();
clientAuthenticationOid1.InitializeFromValue("1.2.643.100.113.1");
var clientAuthenticationOid2 = new CObjectId();
clientAuthenticationOid2.InitializeFromValue("1.2.643.100.113.2");
var policy = new CCertificatePolicy();
policy.Initialize(clientAuthenticationOid1);
var policy2 = new CCertificatePolicy();
policy2.Initialize(clientAuthenticationOid2);
var policies = new CCertificatePolicies();
policies.Add(policy);
policies.Add(policy2);
var ecp = new CX509ExtensionCertificatePolicies();
ecp.InitializeEncode(policies);
objPkcs10.X509Extensions.Add((CX509Extension)ecp);
#endregion
//====== вот здесь должно быть ==== КАК ЕГО ДОБАВИТЬ
// некритичное дополнение issuerSignTool типа IssuerSignToo (Объектный идентификатор типа IssuerSignTool имеет вид 1.2.643.100.112)
// некритичное дополнение subjectSignTool (объектный идентификатор которого имеет вид 1.2.643.100.111.)
objObjectId1.InitializeFromValue("1.3.6.1.5.5.7.3.2");
objObjectIds.Add(objObjectId1);
objObjectId2.InitializeFromValue("1.3.6.1.5.5.7.3.4");
objObjectIds.Add(objObjectId2);
objX509ExtensionEnhancedKeyUsage.InitializeEncode(objObjectIds);
objPkcs10.X509Extensions.Add((CX509Extension)objX509ExtensionEnhancedKeyUsage);
objDN.Encode(File.ReadAllText(reqPath, Encoding.Default), X500NameFlags.XCN_CERT_X500_NAME_STR);
objPkcs10.Subject = objDN;
objEnroll.InitializeFromRequest(objPkcs10);
//strRequest = objEnroll.CreateRequest(EncodingType.XCN_CRYPT_STRING_BASE64REQUESTHEADER);
strRequest = objEnroll.CreateRequest(EncodingType.XCN_CRYPT_STRING_BASE64REQUESTHEADER);
File.WriteAllText(reqPath.Replace(".txt", ".p10"), strRequest);
вот это место в коде надо исправить.
//====== вот здесь должно быть ==== КАК ЕГО ДОБАВИТЬ
// некритичное дополнение issuerSignTool типа IssuerSignToo (Объектный идентификатор типа IssuerSignTool имеет вид 1.2.643.100.112)
// некритичное дополнение subjectSignTool (объектный идентификатор которого имеет вид 1.2.643.100.111.)
ОПЛАТУ ГАРАНТИРУЮ!
Отредактировано пользователем 30 апреля 2013 г. 12:09:39(UTC)
| Причина: дополнение