3.6 電子証明書の有効性の確認

 電子証明書は、利用するときにその有効性を確認しなければなりません。

3.6.1 電子証明書の準備

 まず、電子証明書を準備します。WindowsXP用の関数を使用していますので、Cryptui.libをリンクしてください。

WindowsXP以前でGUIを利用する場合は、Windows98で利用可能なダイアログ を参照してください。
#include <WinCrypt.h>
#include <CryptuiAPI.h>

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;
pcCert = CryptUIDlgSelectCertificateFromStore(
                                          hStore,
                                          NULL,
                                          NULL,
                                          NULL,
                                          0,
                                          0,
                                          NULL);
if(!pcCert)
{
    CertCloseStore(hStore, 0);
    CryptReleaseContext(hProv, 0);
    return 1;
}

3.6.2 有効期限の検証

 電子証明書の有効期間は確認せずに利用できますが、確認するには以下の方法で行います。
// 利用期間の検証
switch(CertVerifyTimeValidity(
            NULL,                 // 今現在の時刻と比較
            pcCert->pCertInfo))   // 検証される電子証明書情報
{
case -1:
    printf("電子証明書の利用開始日に至っていません。\n");
    break;
case  0:
    printf("電子証明書の利用期間内です。\n");
    break;
case +1:
    printf("電子証明書の利用期間を過ぎています。\n");
    break;
}
関数の第1引数には、時刻を表すFILETIMEを指定します。現在の時刻と比較する場合は、NULLを指定します。
第2引数には、確認する電子証明書の証明書情報を指定します。

なお、特定の時刻(日付)と比較する場合は、以下の方法でFILETIME値を作成します。
COleDateTime    ft(2005, 6, 28, 0, 0, 0); //05年6月28日正時の場合
SYSTEMTIME      ts;
FILETIME        tf;

ft.GetAsSystemTime( ts );
::SystemTimeToFileTime( &ts, &tf );

3.6.3 CA電子証明書を含めた有効期間の確認

 有効期間の確認は、使用する電子証明書ばかりではなく、その電子証明書を発行したCA(中間CAを含む)の電子証明書をも確認します。
 さらに、それぞれ(証明書、中間CA証明書、ルート証明書)が失効されていないことも確認しなければなりません。ネストされた証明書の有効期間確認および、証明書失効の確認方法は、こちらで説明します。

3.6.4 後始末

//      後始末
CertFreeCertificateContext(pcCert);
CertCloseStore(hStore, 0);
CryptReleaseContext(hProv, 0);

3.6.5 サンプル

サンプルは、こちらです。 Window98用のサンプルは、こちらです。
 サンプルコードの商業利用および転載を禁止します。

3.6.6 ご質問・ご要望

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

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

PDF-Tools
PDFおよびPDF/Aを作成・編集などができるライブラリ
128ビットの暗号化や電子署名に対応
http:
//www.trustss.co.jp/pdf/
株)トラスト・ソフトウェア・システム
暗号化・電子署名・タイムスタンプ ライブラリ作成します。
お問い合わせください。
3.6 電子証明書の有効性の確認
3.6.1 電子証明書の準備
3.6.2 有効期限の検証
3.6.3 CA電子証明書を含めた有効期間の確認
3.6.4 後始末
3.6.5 サンプル
3.6.6 ご質問・ご要望
3.5 電子証明書の鍵用途の確認
3.5.1 KeyUsage(鍵用途) の意味
3.5.2 KeyUsage(鍵用途) 情報の取り出し
3.5.3 電子証明書コンテキスト
3.5.4 鍵用途の重要性を確認する
3.5.5 サンプル
3.5.6 ご質問・ご要望
3.4 電子署名
3.4.1 電子署名と検証
3.4.2 電子署名の準備
3.4.3 電子署名
3.4.4 署名検証の準備
3.4.5 署名検証
3.4.6 後始末
3.4.7 サンプルコード
3.4.8 ご質問・ご要望
会員用ログイン
ID:
パスワード:
ログインすると、一般公開していないページを閲覧できます。