16.10.2003 10:15:08Запрос на отзыв сертификата Ответов: 3
Alexander
Выполняю запрос на отзыв сертификата.
Строка отзыва

SN=5136A5C5000100000153,RR=0,RC=na

подписана на действующем сертификате пользователя. Роль пользователя прописана в политиках для выполнения метода SubmitRequest объекта RevokeRequest. Отправляется запрос на отзыв по установленному каналу связи на действующем сертификате пользователя.
Порядок RDN в действующем сертификате и сертификате, подлежащем отзыву совпадают (всего в сертификатах 2 секции - CN и Е). При вызове метода возникает ошибка

Server: XML Parser failed at linenumber 2, lineposition 62, reason is: Semicolon expected. HRESULT=0x80004005

никакой дополнительной информации нет.
В чем может быть проблема ?
 
Ответы:
16.10.2003 13:44:07uri
А в UNICODE строку запроса на отзыв не забыли конвертнуть?
16.10.2003 14:49:44Alexander
Я использую пример на VB6, поэтому там не требуется явной конвертации, насколько я понимаю.

16.10.2003 14:55:28uri
Пример на VB:

Option Explicit
Public Enum RevokeReasonEnum
CRL_REASON_UNSPECIFIED = 0
CRL_REASON_KEY_COMPROMISE = 1
CRL_REASON_CA_COMPROMISE = 2
CRL_REASON_AFFILIATION_CHANGED = 3
CRL_REASON_SUPERSEDED = 4
CRL_REASON_CESSATION_OF_OPERATION = 5
CRL_REASON_CERTIFICATE_HOLD = 6
UNHOLD_CERT_REASON = -1
End Enum

Function GenerateRevokeRequest( _
ByVal oCertificateToSign As CAPICOM.Certificate, _
ByVal sSerialNumberToRevoke As String,
ByVal RevocationReason As RevokeReasonEnum, _
ByVal sRevocationComments As String, _
Optional ByVal sHoldDuration As String = "")
Dim sUnicodeString As String
sUnicodeString = "SN=" & sSerialNumberToRevoke & _
",RR=" & CStr(RevocationReason) & ",RC=" & sRevocationComments
If Len(sHoldDuration) > 0 Then
sUnicodeString = sUnicodeString & ",HD=" & sHoldDuration
End If
Dim oSignedData As CAPICOM.SignedData: Set oSignedData = New CAPICOM.SignedData
oSignedData.Content = sUnicodeString
Dim oSigner As CAPICOM.Signer: Set oSigner = New CAPICOM.Signer
oSigner.Certificate = oCertificateToSign
oSigner.Options = CAPICOM.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY
GenerateRevokeRequest = oSignedData.Sign(oSigner, False, CAPICOM.CAPICOM_ENCODE_BASE64)
End Function

’ Пример вызова функции GenerateRevokeRequest
’ Сначала надо выбрать сертификат для отзыва
Dim Store As CAPICOM.Store: Set Store = New CAPICOM.Store: Store.Open
Dim Certificates As CAPICOM.Certificates
Set Certificates = Certificates.Select("DocSamples", "Выберите сертификат для отзыва:")
Dim Certificate As CAPICOM.Certificate: Set Certificate = Certificates.Item(1)
’ Затем надо определить серийный номер сертификата, который необходимо отозвать
Dim sSerialNumberToRevoke As String
sSerialNumberToRevoke = oCertificate.SerialNumber
’ Затем надо выбрать сертификат для подписи запроса
Set Certificates = Certificates.Select("DocSamples", "Выберите сертификат для подписи запроса:")
Set Certificate = Certificates.Item(1)

MsgBox GenerateRevokeRequest (Certificate, sSerialNumberToRevoke, CRL_REASON_KEY_COMPROMISE, _
"Секретный ключ от этого сертификата был утерян во время перезда")