使用ICertAdmin2 :: RevokeCertificate方法在c#中撤销证书

问题描述:

如何将certadm.dll导入托管项目并使用RevokeCertificate方法?我试图添加它作为参考,但我错误地认为它不是程序集或COM对象。使用ICertAdmin2 :: RevokeCertificate方法在c#中撤销证书

任何想法?

更新:我已经尝试过REGSVR32 C:\ certadm.dll,我得到以下错误: 调用LoadLibrary( “C:\ certadm.dll”)失败 - 指定的程序无法找到。

+0

您可能想看看您尝试注册的certadm.dll的版本。您可以使用DLL导出查看器(http://www.nirsoft.net/utils/dll_export_viewer.html)来检查必需的COM加载/卸载过程是否存在。 – 2009-08-05 09:58:22

您首先需要使用regsvr32注册COM服务器,然后才能将其添加为Visual Studio中的参考。

例如,

regsvr32 certadm.dll 

什么下一步的吊销证书?埃里克史密斯,请帮忙。

我尝试此链接

http://msdn.microsoft.com/ru-ru/library/windows/desktop/aa383251(v=vs.85).aspx

和有例外对这个代码

using (var hProv = Win32.GetCSPHandle("c://tmp//cert", "111111")) 
{ 
var cert = Win32.GetCertFromKey(hProv); 

var dateNotAfter = cert.NotAfter; 
var dateNotBefore = cert.NotBefore; 

var serialNumber = cert.SerialNumber; 

var strConfig = "localhost/MY"; 

var ccertadmin = new CERTADMINLib.CCertAdmin(); 

ccertadmin.RevokeCertificate(strConfig, serialNumber, CRL_REASON_CA_COMPROMISE, DateTime.Now); 
} 

错误 - 在最后一个字符串 - RPC服务器不可用。虽然服务RPC工作。

我知道这是一个非常古老的问题,但我找不到在c#中使用ICertAdmin2 :: RevokeCertificate的任何示例。我认为这里写实用程序是有用的。

1添加certadmin LIB

enter image description here

2使用此代码

public static void RevokeCert(string connection,string serial) 
{ 
    //connection= "192.168.71.128\\My-CA" 
    //serial = "614870cd000000000014" 

    const int CRL_REASON_UNSPECIFIED = 0; 

    CERTADMINLib.CCertAdmin _admin = null; 
    try 
    { 
     _admin = new CCertAdmin(); 
     _admin.RevokeCertificate(connection, serial, CRL_REASON_UNSPECIFIED, DateTime.Now); 
    } 
    finally 
    { 
     if (_admin != null) 
      Marshal.FinalReleaseComObject(_admin); 
    } 
} 

所以文件说,恢复保持的证书,你需要MAXWORD(AKA 0xFFFFFFFF的)通入RevokeCertificate功能。但在C#中,Int32无法保存该值。

问题:如何在没有PInvoke的情况下从C#恢复证书?

没关系。我忘了使用unchecked {int i =(int)0xffffffff; }块语法。