2.5 電子証明書の詳細を表示させる
電子証明書の詳細を確認するためには、証明書マネージャー[https://www.trustss.co.jp/smnEncrypt112.html]などで確認します。暗号化や、電子署名のアプリケーションでも利用する電子証明書を確認する際には、その詳細を表示させるべきでしょう。
ここでは、選択した電子証明書をグラフィカル ユーザー インターフェースで表示させる方法を説明します。
なお、ここで説明する関数は、WindowsVista、WindowXPまたはWindowsServer2003以外では使用できません。また、Crypt32.dll に加えてCryptui.dllをリンクしてください。
ここでは、選択した電子証明書をグラフィカル ユーザー インターフェースで表示させる方法を説明します。
なお、ここで説明する関数は、WindowsVista、WindowXPまたはWindowsServer2003以外では使用できません。また、Crypt32.dll に加えてCryptui.dllをリンクしてください。
2.5.1 CSPの準備と電子証明書の選択
あらかじめ、CSPのハンドルを取得し(2.3.1[https://www.trustss.co.jp/smnEncrypt113.html]参照) 証明書ストアをオープンします(2.3.2参照)。その後に、表示させる電子証明書を選択します(2.3.3参照)。
ここでは、それらのコードを再掲します。
ここでは、それらのコードを再掲します。
HCRYPTPROV hProv;
HCERTSTORE hStore;
// CSPハンドルの取得
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, NULL))
{
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
CRYPT_NEWKEYSET))
{
fprintf(stderr, "CryptAcquireContext error\n");
return 1;
}
}
// 証明書ストアーのオープン
hStore = CertOpenSystemStore(
hProv,
"MY");
if(!hStore)
{
fprintf(stderr, "CertOpenSystemStore error\n");
return 2;
}
// 自分の電子証明書の取り出し
PCCERT_CONTEXT pcCert;
char name[100];
pcCert = NULL;
while(pcCert = CertFindCertificateInStore(
hStore,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
0,
CERT_FIND_SUBJECT_STR,
CERT_SUBJ_STR, // 証明書のサブジェクトを指定
pcCert))
{
CertNameToStr(
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
&pcCert->pCertInfo->Subject,
CERT_SIMPLE_NAME_STR,
name,
100);
printf("Name: %s\n", name);
break;
}
if(!pcCert)
{
fprintf(stderr, "指定された電子証明書が見つかりませんでした。\n");
return 3;
}
詳細は、各項目を参照してください。
2.5.2 証明書の詳細を表示させる
選択した電子証明書をグラフィカルなユーザーインターフェースで表示させます。
関数の第1引数には、表示させる対象を指定します。この指定によって第2引数も変わります。
// 電子証明書詳細の表示
CryptUIDlgViewContext(
CERT_STORE_CERTIFICATE_CONTEXT, // 電子証明書の詳細を表示
pcCert, // 表示する電子証明書
NULL, // 親ウインドウのハンドル
NULL, // 表示されるウインドウのタイトル
0,
NULL);
この関数は、指定した電子証明書やCRL(失効リスト)、CTL(証明書チェーンリスト)の詳細を証明書マネージャーと同じ画面で表示させます。関数の第1引数には、表示させる対象を指定します。この指定によって第2引数も変わります。
| 表示する対象 | 第1引数 | 第2引数の型 |
|---|---|---|
| 電子証明書 失効リスト チェーンリスト |
CERT_STORE_CERTIFICATE_CONTEXT CERT_STORE_CRL_CONTEXT CERT_STORE_CTL_CONTEXT |
PCCERT_CONTEXT PCCRL_CONTEXT PCCTL_CONTEXT |
2.5.3 電子証明書を選択する
電子証明書を選択するためのグラフィカルユーザー インターフェースを説明します。この関数(ユーザー インターフェース)を使えば、直感的に電子証明書を選択できます。
CertFindCertificateInStore( ) 関数に変えて以下の関数を使います。
関数の第1引数には、証明書ストアのハンドル
第2引数には、親ウインドウのハンドル
第3引数には、ダイアログのタイトル、NULLを指定すると、「証明書の選択」と表示
第4引数には、選択画面に表示される文字列、NULLを指定すると、「使用する証明書を選択してください」と表示
第5引数には、表示させない証明書の項目を指定、以下の値をORで結合して指定するとそれらが表示されない
CertFindCertificateInStore( ) 関数に変えて以下の関数を使います。
// 電子証明書の取り出し
PCCERT_CONTEXT pcCert;
pcCert = CryptUIDlgSelectCertificateFromStore(
hStore, // 証明書ストアのハンドル
NULL, // 親ウインドウのハンドル
NULL, // ダイアログタイトルの文字列
NULL, // 選択テキストの文字列
0, // 表示させないカラム
0, // 使用しない
NULL); // 予約
この関数で電子証明書を選択した場合は、そのポインターが戻ります。選択せずにキャンセルした場合は、NULLが戻ります。関数の第1引数には、証明書ストアのハンドル
第2引数には、親ウインドウのハンドル
第3引数には、ダイアログのタイトル、NULLを指定すると、「証明書の選択」と表示
第4引数には、選択画面に表示される文字列、NULLを指定すると、「使用する証明書を選択してください」と表示
第5引数には、表示させない証明書の項目を指定、以下の値をORで結合して指定するとそれらが表示されない
| CRYPTUI_SELECT_ISSUEDTO_COLUMN CRYPTUI_SELECT_ISSUEDBY_COLUMN CRYPTUI_SELECT_INTENDEDUSE_COLUMN CRYPTUI_SELECT_FRENDLYNAME_COLUMN CRYPTUI_SELECT_EXPIRATION_COLUMN CRYPTUI_SELECT_LOCATION_COLUMN |
発行先が表示されない 発行者が表示されない 目的が表示されない フレンドリ名が表示されない 有効期限が表示されない 場所が表示されない |
第6引数は、使用していないので、0(ゼロ)を指定
第7引数は、将来に予約されているので、NULL
を設定します。
第7引数は、将来に予約されているので、NULL
を設定します。
Windows98で利用可能なダイアログを利用した証明書選択
Windows98以上で利用可能な、ダイアログを公開しました。使用許諾契約書[https://www.trustss.co.jp/Other/Agreement.txt]を確認した上でダウンロード[https://www.trustss.co.jp/Other/CertDlg_1_0.zip]してください。ダウンロードしたファイルを解凍して、適当なフォルダーにコピーした後にご利用ください。
上記のコードを以下のように書き換えることで、利用できます。
上記のコードを以下のように書き換えることで、利用できます。
PCCERT_CONTEXT pcCert;
/***** ここからコメントアウトします。
pcCert = CryptUIDlgSelectCertificateFromStore(
hStore,
NULL,
NULL,
NULL,
0,
0,
NULL);
/***** ここまで */
pcCert = DlgSelectCertificate(hStore);
if(!pcCert)
{
CertCloseStore(hStore, 0);
CryptReleaseContext(hProv, 0);
return 1;
}
なお、公開されたDLLは、MFCを利用しています。サンプルでは、実行可能なアプリケーションのサンプルがありますので、これをダウンロードしてからご利用ください。
2.5.4 後始末
後始末をします。
// 後始末 CertFreeCertificateContext(pcCert); CertCloseStore(hStore, 0); CryptReleaseContext(hProv, 0);
2.5.5 サンプル
電子証明書を表示するサンプルと、電子証明書を選択するサンプルです。
このサンプルをコンパイル実行するためには、ヘッダファイル CryptuiAPI.h と ライブラリ Cryptui.dll が必要です。また、前述しましたが、これらのサンプルはWindowsXP、WindowsVistaおよびWindows Server 2003以外では動作しません。
新しいダイアログを使った実行可能なサンプル アプリケーションです。このサンプルは、Windows98以上で動作します。DLLの使用方法は、「Wndows98で利用可能なダイアログ」[https://www.trustss.co.jp/smnCert250.html]で確認してください。
このサンプルをコンパイル実行するためには、ヘッダファイル CryptuiAPI.h と ライブラリ Cryptui.dll が必要です。また、前述しましたが、これらのサンプルはWindowsXP、WindowsVistaおよびWindows Server 2003以外では動作しません。
新しいダイアログを使った実行可能なサンプル アプリケーションです。このサンプルは、Windows98以上で動作します。DLLの使用方法は、「Wndows98で利用可能なダイアログ」[https://www.trustss.co.jp/smnCert250.html]で確認してください。
前のページ[https://www.trustss.co.jp/smnEncrypt114.html] <<< >>> 総合目次[https://www.trustss.co.jp/smnIndex.html]
2.5.6 ご質問・ご要望
ご質問やご要望は、こちらからお送りください。(匿名でも可能です。)
(記載の会社名および製品名は、各社の登録商標および商標です。)