2.5 電子証明書の詳細を表示させる

 電子証明書の詳細を確認するためには、証明書マネージャー[http://www.trustss.co.jp/smnEncrypt112.html]などで確認します。暗号化や、電子署名のアプリケーションでも利用する電子証明書を確認する際には、その詳細を表示させるべきでしょう。
ここでは、選択した電子証明書をグラフィカル ユーザー インターフェースで表示させる方法を説明します。

なお、ここで説明する関数は、WindowsVista、WindowXPまたはWindowsServer2003以外では使用できません。また、Crypt32.dll に加えてCryptui.dllをリンクしてください。

2.5.1 CSPの準備と電子証明書の選択

 あらかじめ、CSPのハンドルを取得し(2.3.1[http://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 証明書の詳細を表示させる

 選択した電子証明書をグラフィカルなユーザーインターフェースで表示させます。
// 電子証明書詳細の表示
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( ) 関数に変えて以下の関数を使います。
//      電子証明書の取り出し
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
を設定します。

Windows98で利用可能なダイアログを利用した証明書選択

 Windows98以上で利用可能な、ダイアログを公開しました。使用許諾契約書[http://www.trustss.co.jp/Other/Agreement.txt]を確認した上でダウンロード[http://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で利用可能なダイアログ」[http://www.trustss.co.jp/smnCert250.html]で確認してください。

2.5.6 ご質問・ご要望

 ご質問やご要望は、こちらからお送りください。(匿名でも可能です。)

(記載の会社名および製品名は、各社の登録商標および商標です。)

PDF-Tools
PDFおよびPDF/Aを作成・編集などができるライブラリ
128ビットの暗号化や電子署名に対応
http:
//www.trustss.co.jp/pdf/
株)トラスト・ソフトウェア・システム
暗号化・電子署名・タイムスタンプ ライブラリ作成します。
お問い合わせください。
電子証明書とアプリ
2.1 電子証明書の作成
2.2 電子証明書の確認
2.3 CryptoAPIでの電子証明書
2.4 電子証明書を使った暗号化
2.5 電子証明書の詳細を表示
2.1 電子証明書の作成
2.1.1 MakeCert
2.1.2 CA証明書の作成
2.1.3 ユーザー証明書の作成
2.1.4 ご質問・ご要望
2.2 電子証明書の確認
2.2.1 インストールされた電子証明書の確認
2.2.2 証明書ダイアログをコマンドで表示
2.2.3 証明書ダイアログ
2.2.4 電子証明書の詳細
2.2.5 ご質問・ご要望
2.3 CryptoAPIでの電子証明書
2.3.1 CSPHandleCSPのハンドル取得
2.3.2 証明書ストアをオープン
2.3.3 電子証明書を取り出す
2.3.4 後始末
2.3.5 全ての証明書を取り出す
2.3.6 サンプル コード
2.3.7 ご質問・ご要望
2.4 電子証明書を使った暗号化
2.4.1 公開鍵について
2.4.2 暗号化での公開鍵と私有鍵
2.4.3 電子署名での公開鍵と私有鍵
2.4.4 電子証明書の準備
2.4.5 暗号化の準備
2.4.6 暗号化
2.4.7 復号の準備
2.4.8 復号
2.4.9 後始末
2.4.10 サンプルコード
2.4.11 ご質問・ご要望
2.5 電子証明書の詳細を表示
2.5.1 CSPの準備と電子証明書の選択
2.5.2 証明書の詳細を表示させる
2.5.3 電子証明書を選択する
2.5.4 後始末
2.5.5 サンプル
2.5.6 ご質問・ご要望
会員用ログイン
ID:
パスワード:
ログインすると、一般公開していないページを閲覧できます。