| |||||||||||||||||||||||||||||||||||||||||||||||||
サイト内検索
カスタム検索
|
証明書ストアに格納されている証明書の列挙 (2/2)※この記事は 証明書ストアに格納されている証明書の列挙 (1/2) の続きです。 証明書ストア、証明書に関する説明は前のページをご覧ください。 ここでは証明書ストアに格納されている証明書の一覧を表示するプログラムを作成して、 証明書ストアへのアクセス方法をみてみましょう。 Crypto API による証明書ストアの操作証明書ストアから証明書を読み出して、その発行元を出力するプログラムを考えます。 このプログラムのコードの流れは次のようになります。
以上で証明書の一覧を取得可能です。
#include <windows.h>
#include <stdio.h>
#include <WinCrypt.h>
///////////////////////////////////////////////////////////////////////////////
BOOL ShowCertName ( PCCERT_CONTEXT pCC ) {
char szBuff[2048];
ULONG lBytes = CertGetNameString(
pCC,
CERT_NAME_SIMPLE_DISPLAY_TYPE,
CERT_NAME_ISSUER_FLAG,
szOID_COMMON_NAME,
szBuff,
2048);
if( !lBytes ) {
printf( "CertGetNameString Failed.\n" );
return FALSE;
}
printf( "%s\n", szBuff );
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
BOOL EnumCertInfo ( char* pszStore ) {
if( !pszStore ) {
return FALSE;
}
printf( "\n%s\n", pszStore );
printf( "========================================\n" );
//
// システム証明書ストアを開く
//
HCERTSTORE hStore = CertOpenSystemStore (
NULL,
pszStore );
if( hStore == NULL ) {
printf( "CertOpenSystemStore Failed." );
return FALSE;
}
//
// 証明書を列挙する
//
PCCERT_CONTEXT pCertContext = NULL;
while( pCertContext
= CertEnumCertificatesInStore(
hStore,
pCertContext ) ) {
ShowCertName ( pCertContext );
}
CertCloseStore( hStore, 0 );
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
void main() {
char* ppszStore[] = {
"SPC",
"ROOT",
"CA",
"MY" };
for( int i=0; i < sizeof(ppszStore)/sizeof(ppszStore[0]); i++ ) {
EnumCertInfo ( ppszStore[i] );
}
}
このプログラムをビルドする時には、Crypto API を利用するために Crypt32.lib をリンクする必要があります。 証明書スナップインで証明書を見るちなみに、当然ながら Windows にも証明書ストアをみる場所はあります。(でもなぜかゴッドモードからのショートカットは無いようですが・・・) mmc を開き、追加/削除で 証明書を選択します。これだけで、次のような画面が見られるはずです。
通常はあまり直接証明書をチェックする機会は無いと思いますが、例えば組織内部での証明書の配布などを行い、 Windows の証明機関サービスなどで発行した証明書を配布する場合、独自で立てた証明期間の証明をを配布することもあると思います。 このような場合では、正しく証明書が配布されているかチェックする仕組みを作るためには、プログラムから証明書をチェックすることも有用かもしれませんね。 |
||||||||||||||||||||||||||||||||||||||||||||||||
|
© 2008-2010 小山圭介 All Rights Reserved.
|
|||||||||||||||||||||||||||||||||||||||||||||||||