EternalWindows
証明書管理 / 証明書インポートダイアログ

証明書をエクスポートする目的は多くの場合、 バックアップや他のコンピュータへの移動を考えてのことです。 そのような証明書は再び証明書ストアに格納することがあるかもしれないため、 証明書のインポート方法を知っておくことは重要といえます。 次のようなダイアログは、IEのインターネットオプションや、 証明書を右クリックして表示されるメニューの「証明書のインストール」を選択することで表示されます。

このダイアログでは、証明書をどの証明書ストアにインポートするかを決定できますが、 基本的には自動的に選択されるようにしておくのがよいでしょう。 そのようにしておけば、自己署名入り証明書はRoot証明書ストアへ、 CA証明書はCA証明書ストアへ、秘密鍵を含んだPKCS #12形式の証明書は、 MY証明書ストアにインポートされることになります。 特にPKCS #12形式の証明書は、自分に署名を行った証明書を含むことができるため、 全ての証明書を同じ証明書ストアにインポートしてはいけません。 また、PKCS #12形式の証明書は上記のダイアログの前に、 次のようなダイアログが表示されます。

PKCS #12形式の証明書及び秘密鍵は暗号化されているため、 それを複合化するためのパスワードを入力する必要があります。 これは、エクスポート時に指定したパスワードと同一です。 秘密鍵の保護を強力にするというのは、 秘密鍵の参照時に前節のようなCSPによって作成されたUIが表示されるということです。 秘密鍵のエクスポート可能にした場合 インポートされた証明書を再びPKCS #12形式でエクスポートすることが可能になります。

証明書をインポートするためのダイアログは、CryptUIWizImportで表示することができます。

BOOL WINAPI CryptUIWizImport(
  DWORD dwFlags,
  HWND hwndParent,
  LPCWSTR pwszWizardTitle,
  PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc,
  HCERTSTORE hDestCertStore
);

dwFlagsは、インポートに関する動作を定義する定数を指定します。 hwndParentは、ダイアログの親ウインドウとするウインドウハンドルを指定します。 pwszWizardTitleは、ダイアログのタイトルとする文字列を指定します。 pImportSrcは、インポート対象のファイル情報を格納するCRYPTUI_WIZ_IMPORT_SRC_INFO構造体のアドレスを指定します。 この引数は、dwFlagsにCRYPTUI_WIZ_NO_UIを指定した場合のみ利用します。 hDestCertStoreは、インポート先とする証明書ストアのハンドルを指定します。

dwFlagsに指定できる定数を次に示します。

定数 意味
CRYPTUI_WIZ_NO_UI (0x0001) 一切のUIを表示せずにインポートを行う。
CRYPTUI_WIZ_IGNORE_NO_UI_FLAG_FOR_CSPS (0x0002) CSPによって作成されたUIを表示しない。
CRYPTUI_WIZ_NO_UI_EXCEPT_CSP (0x0003) 基本的には、一切のUIを表示せずにインポートを行うが、 CSPによって作成されたUIは表示する。
CRYPTUI_WIZ_IMPORT_ALLOW_CERT (0x00020000) インポート対象のファイルを証明書に限定する。
CRYPTUI_WIZ_IMPORT_ALLOW_CRL (0x00040000) インポート対象のファイルをCRLに限定する。
CRYPTUI_WIZ_IMPORT_ALLOW_CTL (0x00080000) インポート対象のファイルをCTLに限定する。
CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE (0x00010000) hDestCertStoreに指定した証明書ストアへのインポートを強制する。
CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE (0x00100000) 証明書ストアには位置というものがあり、 この定数はCERT_SYSTEM_STORE_LOCAL_MACHINEで識別される位置を参照することを意味する。 この定数は、PFXファイルをインポートする際に指定することができる。
CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER (0x00200000) 証明書ストアには位置というものがあり、 この定数はCERT_SYSTEM_STORE_CURRENT_USERで識別される位置を参照することを意味する。 この定数は、PFXファイルをインポートする際に指定することができる。
CRYPTUI_WIZ_IMPORT_REMOTE_DEST_STORE (0x00400000) hDestCertStoreがリモートコンピュータの証明書ストアである場合は、この定数を指定する。

今回のプログラムは、CryptUIWizImportを呼び出して証明書のインポートを行います。

#include <windows.h>
#include <cryptuiapi.h>

#pragma comment (lib, "crypt32.lib")
#pragma comment (lib, "cryptui.lib")

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
{
	CryptUIWizImport(0, NULL, NULL, NULL, NULL);

	return 0;
}

CryptUIWizImportの呼び出しは、UI上でインポート対象のファイルや インポート先の証明書を選択できることから、非常に単純です。 CryptUIWizImportの第1引数に0を指定しているため、特にインポートに関しての制約はありません。 第2引数はダイアログの親ウインドウのハンドル、第3引数はダイアログのタイトルですが、 それぞれNULLを指定することができます。 第4引数は、第1引数にCRYPTUI_WIZ_NO_UIを指定した場合に利用するため、 今回の場合はNULLになります。 第5引数は、インポート先の証明書ストアのハンドルを指定することができますが、 証明書ストアはUI上で決定することもできるため、NULLに指定しています。


戻る