CryptoAPI の CERT_CHAIN_ENGINE_CONFIG 構造体 の Windows 7 /Windows Server 2008 R2 での拡張

Windows の CryptoAPIに、証明書パスエンジンを作成する CertCreateCertificateChainEngine というAPIがある。

CertCreateCertificateChainEngine Function (Windows)
http://msdn.microsoft.com/en-us/library/aa376032%28VS.85%29.aspx

このAPIの引数になっている CERT_CHAIN_ENGINE_CONFIG 構造体 は Windows 7 と Windows Server 2008 R2 対応の SDK (V7.0)で拡張が行われた。

--

typedef struct _CERT_CHAIN_ENGINE_CONFIG {

DWORD       cbSize;
    HCERTSTORE  hRestrictedRoot;
    HCERTSTORE  hRestrictedTrust;
    HCERTSTORE  hRestrictedOther;
    DWORD       cAdditionalStore;
    HCERTSTORE* rghAdditionalStore;
    DWORD       dwFlags;
    DWORD       dwUrlRetrievalTimeout;      // milliseconds
    DWORD       MaximumCachedCertificates;
    DWORD       CycleDetectionModulus;

#if (NTDDI_VERSION >= NTDDI_WIN7)
    HCERTSTORE  hExclusiveRoot;
    HCERTSTORE  hExclusiveTrustedPeople;
#endif

} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;

CERT_CHAIN_ENGINE_CONFIG Structure (Windows)
http://msdn.microsoft.com/en-us/library/aa377184(v=VS.85).aspx

hExclusiveRoot と hExclusiveTrustedPeople メンバは、
> Windows Server 2008, Windows Vista, Windows Server 2003, Windows XP, and Windows 2000:  This member is not supported.

上記の赤い部分はSDK 7.0 のベータ段階では含まれてなかったので、(無いとは思うけど)ベータ段階である程度の実装/テストを終えているような場合は見直し・注意が必要だ。

下記のように構造体を初期化しているならば、OSのバージョンが違ってもAPIの動作には特に影響はないはずだ。
※通常、APIは cbSize の値をきちんと見ているはずなのでSecureZeroMemoryによる初期化は無くても良いと思う。ちなみにMSのAPIサンプルにも入ってない。だが SecureZeroMemory は速度優先部分でないのであれば入れておいても良いと思う。自分は殆どの場合入れてる。

--

// 検証エンジンの作成
CERT_CHAIN_ENGINE_CONFIG ChainConfig;
::SecureZeroMemory(&ChainConfig, sizeof (CERT_CHAIN_ENGINE_CONFIG));
ChainConfig.cbSize                        = sizeof (CERT_CHAIN_ENGINE_CONFIG);
ChainConfig.hRestrictedRoot               = NULL;
ChainConfig.hRestrictedTrust              = NULL;
ChainConfig.hRestrictedOther              = NULL;
ChainConfig.cAdditionalStore              = 0;
ChainConfig.rghAdditionalStore            = NULL;
ChainConfig.dwFlags                       = dwFlagsCreateConfig;
ChainConfig.dwUrlRetrievalTimeout         = 0;
ChainConfig.MaximumCachedCertificates     = 0;
ChainConfig.CycleDetectionModulus         = 0;

// 「証明書パスエンジン」を作成する
if (::CertCreateCertificateChainEngine(&ChainConfig, phChainEngine))
{

SecureZeroMemory function (Windows)
http://msdn.microsoft.com/ja-jp/library/windows/desktop/aa366877%28v=vs.85%29.aspx

Livedoor タグ: ,,,

広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中