Добрый день!
Как сохранить выбранный сертификат в CAPICOM, не в смысле на диск, а получить идентификатор
с тем, чтобы потом получать его из Store по идентификатору?
Или же все умные программы типа Outlook сохраняют сертификаты на диск?
Вот пример кода:
public void selectCertificateButton_Click( object o, System.EventArgs a)
{
CAPICOM.StoreClass store = new CAPICOM.StoreClass();
store.Open(
CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE,
"My",
CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_EXISTING_ONLY |
CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY
);
try
{
CAPICOM.ICertificates selectedCertificates = ((CAPICOM.ICertificates2)store.Certificates).Select(
@"Выберите сертификат",
@"Выберите сертификат для использования.",
false
);
CAPICOM.ICertificate2 selectedCertificate = (CAPICOM.ICertificate2) selectedCertificates[1];
if(selectedCertificate.HasPrivateKey() == false)
{
System.Windows.Forms.MessageBox.Show(
@"Этот сертификат не имеет ассоциированного с собой закрытого ключа",
@"Ошибка выбора сертификата",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Stop
);
return;
} else if (selectedCertificate.PublicKey().Algorithm.FriendlyName != "RSA")
{
System.Windows.Forms.MessageBox.Show(
@"Ключ, ассоциированный с этим сертификатом не является RSA ключом",
@"Неподходящий сертификат",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Stop
);
return;
}
// КАК ЕГО СОХРАНИТЬ ТО???
}
catch(System.Exception)
{
System.Windows.Forms.MessageBox.Show(
@"Не удалось получить закрытый ключ. Вы выбрали сертификат?",
@"Ошибка выбора сертификата",
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Stop
);
}
}
С уважением,
Иван Рэйлюков
Иными словами, что есть уникальный идентификатор в CAPICOM.ICertificate2 ?
Имя издателя (IssuerName) и серийный номер (SerialNumber) сертификата совместно являются уникальным идентификатором сертификата.