我需要每週下載並安裝約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