Я ищу решение в VBA, чтобы показать пользователю информацию о сертификате. Я почти у цели, но мне не хватает поля «Алгоритм подписи».
Просмотр интернета привел меня в Чилкат. Используя их руководство и примеры, мне удалось загрузить сертификат и получить почти все поля. Я часами искал интернет, но ничего не нашел в последнем поле: «Алгоритм подписи». Ниже приведен код (возможно, для повторного использования)
'Define variables
Dim cert As New ChilkatCert
Dim success As Long
Dim strProcedure As String
Dim strProp As String
Dim dteValidFrom As CkDateTime
Dim dteValidTo As CkDateTime
'Initialise variables
strProcedure = "ShowCertificate"
' Load a DER (binary) encoded certificate.
' To load from a .pem or .p7b, or any other file format that contains
' just one certificate, call LoadFromFile in exactly the same way.
' The LoadFromFile method automatically detects the format and loads the certificate.
success = cert.LoadFromFile(strCertName)
If (success = 0) Then
MsgBox cert.LastErrorText
Exit Function
End If
'Get the cert properties
strProp = strProp & "Version" & vbTab & vbTab & vbTab & "V" & cert.CertVersion & vbLf
strProp = strProp & "Serialno" & vbTab & vbTab & vbTab & LCase(cert.SerialNumber) & vbLf
'> How to retrieve the following two properties?
strProp = strProp & "Alg. for Sign" & vbTab & vbTab & "" & vbLf
strProp = strProp & "Sign. Alg" & vbTab & vbTab & "" & vbLf
strProp = strProp & "Issuer" & vbTab & vbTab & vbTab & cert.IssuerCN & vbLf
Set dteValidFrom = cert.GetValidFromDt()
strProp = strProp & "Valid From" & vbTab & vbTab & dteValidFrom.GetAsTimestamp(1) & vbLf
Set dteValidTo = cert.GetValidToDt()
strProp = strProp & "Valid To" & vbTab & vbTab & vbTab & dteValidTo.GetAsTimestamp(1) & vbLf
strProp = strProp & "Subject" & vbTab & vbTab & vbTab & cert.SubjectCN & vbLf
' Get the public key:
Dim pubKey As PublicKey
Set pubKey = cert.ExportPublicKey()
If (cert.LastMethodSuccess <> 1) Then
MsgBox cert.LastErrorText
Exit Function
End If
' Examine the key type
' A PublicKey object can contain an RSA, ECC, or DSA public key.
' The KeyType property will contain "rsa", "ecc", or "dsa".
strProp = strProp & "Public key" & vbTab & vbTab & vbTab & UCase(pubKey.KeyType) & " (" & pubKey.KeySize & " Bits)" & vbLf
strProp = strProp & "Subject Key Identifier" & vbTab & LCase(cert.HashOf("SubjectPublicKey", "sha1", "hex")) & vbLf
strProp = strProp & "Subject Alternative Name" & vbTab & cert.Rfc822Name & vbLf
strProp = strProp & "Thumbprint" & vbTab & vbTab & LCase(cert.Sha1Thumbprint)
ShowCertificate = strProp
Там много информации о том, как обрабатывать в C, но не в VBA. И, возможно, есть способ использовать вызовы crypt32 api, но это не в моей лиге. Там также много информации о том, как зашифровать и расшифровать, но я не заинтересован в этом, мне просто нужно показать пользователю информацию.
Буду признателен за любую помощь в получении этого поля, полное решение с использованием Crypt32.