我需要每周下载并安装约50个CRL,并将它们安装在多个Windows服务器上。下载是很容易的部分,有没有一种方法可以编写CRL导入过程的脚本?以编程方式安装证书吊销列表(CRL)
回答
我不知道通过脚本来做到这一点的方法。 你可以写C代码吗?如果我明白你想要做什么,你将使用CryptUiWizImport函数和CRYPTUI_WIZ_IMPORT_SRC_INFO结构。
这是sample of code that installs a Cert;相应的CRL导入类似。
附录:
This post指出的Win32 API(如CryptUiWizImport)不是从PowerShell的直接访问,然后描述了一种可能的解决方法:从PowerShell脚本内,动态地生成和编译C#代码,不会在P/Invoke的东西,然后运行生成的程序集。这将允许您严格从PowerShell脚本执行CryptUiWizImport,但它会是一个非常奇特的脚本。
我将CryptUIWizImport函数作为C#控制台应用程序包装起来,它的工作原理类似于安装证书和CRL的魅力。非常感谢你! – Goyuix 2009-05-27 13:35:41
在Powershell中有一个代表证书存储的Cert:
提供程序。操作它是通过标准的cmdlet完成的,所以你可能能够在某处集成一个撤销列表。我只是不太了解Windows如何处理证书以获得更多帮助。
嗯。是否有任何理由不使用certutil.exe工具?我可以通过运行以下命令导入证书吊销列表到相应的商店:
certutil -addstore CA <FileName>.crl
这是我的最后一个来源(略擦洗公共) - 但应该工作。我不会改变已接受的答案,但我希望这有助于提升问题和答案。
注意:这会将CRL或常规证书导入LOCAL MACHINE受信任根存储。在调用CertOpenStore中将下面的CERT_SYSTEM_STORE_LOCAL_MACHINE
更改为CERT_SYSTEM_STORE_CURRENT_USER
将使其更改为当前用户存储。
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace ConsoleApplication2
{
class Program
{
public struct CRYPTUI_WIZ_IMPORT_SRC_INFO
{
public Int32 dwSize;
public Int32 dwSubjectChoice;
[MarshalAs(UnmanagedType.LPWStr)]public String pwszFileName;
public Int32 dwFlags;
[MarshalAs(UnmanagedType.LPWStr)]public String pwszPassword;
}
[DllImport("CryptUI.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern Boolean CryptUIWizImport(
Int32 dwFlags,
IntPtr hwndParent,
IntPtr pwszWizardTitle,
ref CRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc,
IntPtr hDestCertStore
);
[DllImport("CRYPT32.DLL", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr CertOpenStore(
int storeProvider,
int encodingType,
IntPtr hcryptProv,
int flags,
String pvPara
);
public const Int32 CRYPTUI_WIZ_IMPORT_SUBJECT_FILE = 1;
public const Int32 CRYPT_EXPORTABLE = 0x00000001;
public const Int32 CRYPT_USER_PROTECTED = 0x00000002;
public const Int32 CRYPTUI_WIZ_NO_UI = 0x0001;
private static int CERT_STORE_PROV_SYSTEM = 10;
private static int CERT_SYSTEM_STORE_CURRENT_USER = (1 << 16);
private static int CERT_SYSTEM_STORE_LOCAL_MACHINE = (2 << 16);
static void Main(string[] args)
{
if (args.Length != 1)
{
Console.WriteLine("Usage: certimp.exe list.crl");
Environment.ExitCode = 1;
}
else
{
IntPtr hLocalCertStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM,
0,
IntPtr.Zero,
CERT_SYSTEM_STORE_LOCAL_MACHINE,
"ROOT"
);
CRYPTUI_WIZ_IMPORT_SRC_INFO importSrc = new CRYPTUI_WIZ_IMPORT_SRC_INFO();
importSrc.dwSize = Marshal.SizeOf(importSrc);
importSrc.dwSubjectChoice = CRYPTUI_WIZ_IMPORT_SUBJECT_FILE;
importSrc.pwszFileName = args[0];
importSrc.pwszPassword = null;
importSrc.dwFlags = CRYPT_EXPORTABLE | CRYPT_USER_PROTECTED;
if (!CryptUIWizImport(
CRYPTUI_WIZ_NO_UI,
IntPtr.Zero,
IntPtr.Zero,
ref importSrc,
hLocalCertStore
))
{
Console.WriteLine("CryptUIWizImport error " + Marshal.GetLastWin32Error());
Environment.ExitCode = -1;
}
}
}
}
}
- 1. Azure证书和证书吊销列表(CRL)
- 2. LDAP中的证书吊销列表
- 3. Tomcat6中的证书吊销列表
- 4. 检查X509证书吊销
- 5. 推送证书吊销
- 6. 在.net中转换不同的证书吊销列表格式
- 7. 以编程方式安装自签名证书
- 8. 如何以编程方式使用C#安装证书
- 9. 如何以编程方式安装SSL证书(OpenSSL)
- 10. 以编程方式将证书安装到Mozilla
- 11. c#验证CRL列表中的证书
- 12. 苹果企业分销证书吊销
- 13. 以编程方式在应用程序中安装mdm证书的方式
- 14. 如何生成CRL(证书撤销列表)文件
- 15. 如何在java中生成CRL(证书撤销列表)
- 16. 证书吊销列表和私人认证机构
- 17. 证书颁发机构 - 证书吊销过程
- 18. 的Git - 吊销功能无法检查吊销证书
- 19. APNS:该证书已被吊销
- 20. Android SSL插座证书吊销检查
- 21. 苹果公司吊销的证书
- 22. 的Windows吊销证书(makecert,certmgr)
- 23. 如何续订吊销的证书?
- 24. 恢复已吊销的ios证书
- 25. 如何使用本地CRL文件(C#)在验证过程中检查客户端证书吊销
- 26. 安装SSL证书编程方式使用Microsoft.Web.Administration
- 27. 以编程方式获取ssl证书
- 28. 无法在Internet Explorer上禁用证书吊销(过期证书)
- 29. Excel - 此站点安全证书的吊销信息不可用
- 30. 如何以编程方式在Windows手机上安装根CA证书?
当你说下载是容易的部分?你能分享一下你用来完成这项工作的技巧吗?谢谢 – Raj 2011-06-17 10:43:11
@Raj几乎每个证书颁发机构或签名者都将发布CRL位置作为证书元数据的一部分。打开有问题的证书并查找名为“CRL分发点”的字段。真的,这是一个你应该问的一般问题,不要只是留下评论。 – Goyuix 2011-06-18 16:40:32
是的,我知道分配点作为证书中的字段。目前我使用远程对象检索函数[CryptoAPI]从CDP检索。我也明白,如果你只是复制URL并在浏览器中将它们过去,CRL也会被下载。我之所以问你作为评论,是因为你提到CRL检索是很容易的部分,所以我认为你已经获得了一些实用程序或某些可以为你做到这一点的工具。但显然我的假设是错误的。感谢您的回应。 – Raj 2011-06-20 09:49:43