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:
¿Alguna solución?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
Gracias.