Estoy buscando la manera de firmar un documento usando un certificado digital emitido por la FNMT.
En la página de Microsoft hay una librería llamada Capicom que trae ejemplos de uso:
http://www.microsoft.com/downloads/e...5-ff88ea5896f6
Uno de estos ejemplos es una aplicación completa dónde se usa un certificado para firmar un documento, justo lo que busco!
Selecciono el fichero que quiero firmar, luego selecciono el certificado con el que lo quiero firmar pero al darle al botón 'Firmar' del ejemplo me suelta el error:
Error 800B0003: La forma especificada para el asunto no es la compatible o la conocida por el proveedor de confianza especificado.
El código de ejemplo es el siguiente:
Código:
Imports CAPICOM
Friend Class FrmSignedCode
Inherits System.Windows.Forms.Form
'******************************************************************************
'
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
' EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
' WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
'
' Copyright (C) 1999- 2002. Microsoft Corporation. All rights reserved.
'
'******************************************************************************
'
' SignedCode.vbp
'
' This is a VB sample that illustrates how to use features introduced in
' CAPICOM v2.0 to sign, timestamp, and verify files using a certificate
' from Personal Store.
'
' Note: For simplicity, this sample does not handle exception.
'
'******************************************************************************
'timestamping URL
Const URL As String = "http://timestamp.verisign.com/scripts/timstamp.dll"
Dim st As New CAPICOM.Store
Dim certs As CAPICOM.Certificates
Dim selectedCerts As CAPICOM.Certificates
Dim cert As CAPICOM.Certificate
Dim Signer As New CAPICOM.Signer
Public SignedCode As New CAPICOM.SignedCode
Private Sub cmdSignInfo_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdSignInfo.Click
FrmSignInfo.Show()
End Sub
Private Sub FrmSignedCode_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
'open current user store and obtain certificates
st.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, CAPICOM.Constants.CAPICOM_MY_STORE, CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY)
certs = st.Certificates
End Sub
Private Sub cmdSign_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdSign.Click
On Error GoTo err_handler
'sign
SignedCode.Sign(Signer) 'AQUÍ SUELTA EL ERROR
MsgBox("The fle has been signed succesfully")
Exit Sub
err_handler:
'if the user cancels, don't display error msg
If Err.Number <> CAPICOM.CAPICOM_ERROR_CODE.CAPICOM_E_CANCELLED Then
MsgBox("Error " & Hex(Err.Number) & ": " & Err.Description)
End If
Err.Clear()
Exit Sub
End Sub
Private Sub cmdTimeStamp_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdTimeStamp.Click
On Error GoTo err_handler
'timestamp
SignedCode.Timestamp(URL)
MsgBox("The fle has been timestamped")
Exit Sub
err_handler:
MsgBox(Err.Description)
Exit Sub
End Sub
Private Sub cmdVerify_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdVerify.Click
On Error GoTo err_handler
'verify
SignedCode.Verify()
MsgBox("The file has been verified")
Exit Sub
err_handler:
MsgBox(Hex(Err.Number) & ": " & Err.Description)
Exit Sub
End Sub
Private Sub dir_Renamed_Change(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles dir_Renamed.Change
On Error GoTo err_handler
file.Path = dir_Renamed.Path
Exit Sub
err_handler:
MsgBox(Hex(Err.Number) & ": " & Err.Description)
Exit Sub
End Sub
Private Sub drive_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles drive.SelectedIndexChanged
On Error GoTo err_handler
dir_Renamed.Path = drive.Drive & "\"
Exit Sub
err_handler:
MsgBox(Hex(Err.Number) & ": " & Err.Description)
Exit Sub
End Sub
Private Sub file_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles file.SelectedIndexChanged
'set filename to sign
SignedCode.FileName = file.Path & "\" & file.FileName
End Sub
'UPGRADE_WARNING: El evento txtDescription.TextChanged se puede desencadenar cuando se inicializa el formulario. Haga clic aquí para obtener más información: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="88B12AE1-6DE0-48A0-86F1-60C0686C026A"'
Private Sub txtDescription_TextChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtDescription.TextChanged
'set description fields
SignedCode.Description = txtDescription.Text
End Sub
'UPGRADE_WARNING: El evento txtDescriptionURL.TextChanged se puede desencadenar cuando se inicializa el formulario. Haga clic aquí para obtener más información: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="88B12AE1-6DE0-48A0-86F1-60C0686C026A"'
Private Sub txtDescriptionURL_TextChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txtDescriptionURL.TextChanged
'set description URL fields
SignedCode.DescriptionURL = txtDescriptionURL.Text
End Sub
Private Sub cmdExit_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdExit.Click
'Clean up
'UPGRADE_NOTE: El objeto st no se puede destruir hasta que no se realice la recolección de los elementos no utilizados. Haga clic aquí para obtener más información: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
st = Nothing
'UPGRADE_NOTE: El objeto certs no se puede destruir hasta que no se realice la recolección de los elementos no utilizados. Haga clic aquí para obtener más información: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
certs = Nothing
'UPGRADE_NOTE: El objeto selectedCerts no se puede destruir hasta que no se realice la recolección de los elementos no utilizados. Haga clic aquí para obtener más información: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
selectedCerts = Nothing
'UPGRADE_NOTE: El objeto cert no se puede destruir hasta que no se realice la recolección de los elementos no utilizados. Haga clic aquí para obtener más información: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
cert = Nothing
'UPGRADE_NOTE: El objeto Signer no se puede destruir hasta que no se realice la recolección de los elementos no utilizados. Haga clic aquí para obtener más información: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
Signer = Nothing
'UPGRADE_NOTE: El objeto SignedCode no se puede destruir hasta que no se realice la recolección de los elementos no utilizados. Haga clic aquí para obtener más información: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
SignedCode = Nothing
End
End Sub
End Class
¿Alguna solución?
Gracias.