約50個のCRLを週に1回ダウンロードしてインストールし、複数のWindowsサーバーにインストールする必要があります。ダウンロードは簡単ですが、CRLインポートプロセスをスクリプト化する方法はありますか?プログラムで証明書失効リスト(CRL)をインストールする
答えて
私はスクリプトを使ってそれを行う方法を知らない。 Cコードを書くことはできますか?あなたが何をしたいのか分かっていれば、CryptUiWizImport関数とCRYPTUI_WIZ_IMPORT_SRC_INFO構造体を使用します。
ここにはsample of code that installs a Certがあります。対応するCRLインポートは似ています。
補遺:PowerShellスクリプト内から、動的に行いC#コードを生成し、コンパイル:
This postは(例えばCryptUiWizImportなど)のWin32 APIはPowerShellのから直接アクセスすることはできませんし、その後可能な回避策を記載していることを指摘しますP/Invokeを実行し、結果のアセンブリを実行します。これにより、CryptUiWizImportを厳密にpowershellスクリプトから実行できますが、かなりエキゾチックなスクリプトになります。
私はC#のコンソールアプリケーションとしてCryptUIWizImport関数をラップし、証明書とCRLの両方をインストールするための魅力のように機能します。どうもありがとうございました! – Goyuix
あなたは次の人を助けるために、ソースを投稿することに興味がありますか? – Cheeso
私は本当にソースに興味があるでしょう...私はまったく同じ問題を抱えています。 – Mephisztoe
Powershellには、証明書ストアを表すCert:
プロバイダがあります。それを操作することは標準のコマンドレットを介して行われるため、失効リストをどこかに統合することができます。私は、Windowsが証明書をどのように処理して、これ以上の助けになるかについて十分に知りません。
hm。 certutil.exeユーティリティを使用しない理由はありますか? (少し公共用スクラブ)ここで
certutil -addstore CA <FileName>.crl
certutilは標準インストールの一部ではありません。私は、証明書サービスがインストールされている場合にのみインストールされると信じています(私は間違っているかもしれませんが)。 – Goyuix
は私の最後の源である - しかし、動作するはずです:私は、次のコマンドを実行して、適切なストアに証明書失効リストをインポートすることができます。私は受け入れられた答えを変更しませんが、私はこれが助けてくれることを願っています(質問と回答をupvotingしていますように!)。
注:これは、ローカルマシンの信頼されたルートストアにCRLまたは通常の証明書の両方をインポートします。 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;
}
}
}
}
}
注:X509Store、Open()を作成し、そのStoreHandleプロパティをCryptUIWizImportの最後の引数として渡すこともできます。 – voetsjoeba
注:ドキュメントに記載されている内容にもかかわらず、CRYPTUI_WIZ_NO_UIフラグのいずれも、「現在のCRLを置き換えますか?」と尋ねるポップアップダイアログが表示されません。ターゲットストアにすでに同じまたはより新しい有効時間のCRLが含まれている場合(Win2008 R2でテスト済み) – voetsjoeba
注:Crypt32.dllからCertAddCRLContextToStore Win32関数をP/Invokeすることができます(潜在的にUIを経由するよりも、CRLをWindows証明書ストアに追加する方法)。 – voetsjoeba
- 1. Azureの証明書と証明書失効リスト(CRL)
- 2. CRL(証明書失効リスト)ファイルを生成する方法
- 3. OpenSSLはCRL(証明書失効リスト)を自動的に処理しますか?
- 4. VertexとJavaのCRLによる証明書失効処理
- 5. 証明書失効リストc#
- 6. Tomcat6の証明書失効リスト
- 7. makecertで証明書失効リスト(CRL)を作成し、pvk2pfxで.pfxにバンドルします。
- 8. ローカルCRLファイル(C#)で検証処理中にクライアント証明書失効を確認する方法
- 9. CRLで証明書チェーンを確認する方法
- 10. OpenSSL経由でCRLに対する証明書を確認する:証明書を取得できませんCRL
- 11. Android SSLソケット証明書失効確認
- 12. Javaアプリケーションの証明書の失効
- 13. Java SSL証明書失効確認
- 14. 自己署名証明書をプログラムでインストールする
- 15. X509証明書ユニットテスト - 証明書とそれを持つCRLを作成する必要があります
- 16. WCF:証明書失効リストのチェックで安全なメッセージを使用
- 17. 春のRestTemplateが証明書の失効ステータスを確認する
- 18. 証明書を失った
- 19. SSL証明書が失効したのはなぜですか?
- 20. iOSシミュレータでの証明書のインストールに失敗しました
- 21. p12ファイルからCA証明書をプログラムで取得し、証明書リストを注文しますか?
- 22. Apache - SSL証明書をインストールする
- 23. JBossにSSL証明書をインストールする
- 24. AndroidTVに証明書をインストールする
- 25. 1freehosting.comにSSL証明書をインストールする
- 26. SSL証明書をインストールする
- 27. AndroidでCA証明書(EAP WiFi設定用)をプログラムでインストールする方法
- 28. Android証明書のインストール
- 29. TIBCOのHttps証明書インストール
- 30. OpenShift証明書の失敗
ダウンロードは簡単な部分ですか?これを達成するために使用した技術を共有できますか?ありがとう – Raj
@Rajほとんどすべての認証機関または署名者は、証明書メタデータの一部としてCRLの場所を公開します。問題の証明書を開き、「CRL配布ポイント」というフィールドを探します。本当にこれはあなたがコメントとして残すだけではなく、尋ねるべき一般的な質問です。 – Goyuix
はい、配布ポイントを証明書のフィールドとして認識しています。現在、私はリモートオブジェクト検索関数[CryptoAPI]を使ってCDPから検索します。また、URLをコピーしてブラウザに貼り付けるだけで、CRLもダウンロードされることを理解しています。私がコメントとしてあなたに尋ねたのは、あなたがCRLの取得が簡単な部分であると言われたので、あなたには何かユーティリティや何かがあると仮定しました。しかし明らかに私の仮定は間違っていた。応答していただきありがとうございます。 – Raj