方法 : 開発中に使用する一時的な証明書を作成する
Windows Communication Foundation (WCF) を使ってセキュリティ保護されたサービスやクライアントを開発する場合、資格情報として使えるように X.509 証明書を提供する必要が生じることも少なくありません。証明書は通常、単独ではなく、いくつもの証明書が信頼チェーンとしてつながった形で存在しており、その最上位に位置するルート証明機関の証明書は、各コンピュータの [信頼されたルート証明機関] の証明書ストアに格納されています。証明書を調べて順に信頼チェーンをたどっていくと、たとえば所属する会社や事業部門が運営する、ルート証明機関に到達します。開発時にこの過程をエミュレートするためには、セキュリティ要件を満たす 2 種類の証明書を作る必要があります。1 つは自己署名証明書で、[信頼されたルート証明機関] の証明書ストアに配置します。もう 1 つは、先の自己署名証明書を使って署名を施した証明書で、[ローカル コンピュータ] の [個人] ストア、または [現在のユーザー] の [個人] ストアに配置します。ここでは、.NET Framework SDK に付属する Certificate Creation Tool (MakeCert.exe) を使って、これら 2 つの証明書を作成する手順を示します。
メモ : |
---|
証明書作成ツールによって作成された証明書は、テスト目的にのみ使用できます。実際にサービスやクライアントを業務に使用する際には、証明機関から取得した、適切な証明書が必要です。所属する会社が運営している Windows Server 2003 証明書サーバー、または専門の第三者機関から取得してください。 既定では、Certificate Creation Tool (MakeCert.exe) は、"Root Agency" というルート証明機関名の証明書を作成します。"Root Agency" は、[信頼されたルート証明機関] の証明書ストアに含まれていないため、作成された証明書はセキュリティで保護されません。そこで自己署名証明書を作り、[信頼されたルート証明機関] の証明書ストアに置くことにより、実際の運用環境をより忠実にシミュレートする開発環境を構築できます。 |
証明書の作成方法および使用方法詳細については、 、「証明書の使用」を参照してください。証明書を資格情報として使用する方法詳細については、 、「サービスおよびクライアントのセキュリティ保護」を参照してください。Microsoft Authenticode テクノロジの使用方法については、https://go.microsoft.com/fwlink/?LinkId=88919 のチュートリアルを参照してください。
自己署名ルート証明書を作成して秘密キーをエクスポートするには
次のスイッチを指定して MakeCert.exe ツールを使用します。
- -n subjectName。サブジェクト名を指定します。命名規則では、サブジェクト名の前に、"Common Name" を示す "CN = " を付加します。
- -r。証明書が自己署名されるように指定します。
- -sv privateKeyFile。秘密キーを書き出すファイルを指定します。
たとえば次のコマンドを実行すると、サブジェクト名を "CN=TempCA" とした自己署名証明書が作成されます。
makecert -n "CN=TempCA" -r -sv TempCA.pvk TempCA.cer
秘密キーを保護するためのパスワードを入力するように求められます。このパスワードは、このルート証明書によって署名された証明書を作成する際に必要になります。
ルート証明書によって署名された新しい証明書を作成するには
次のスイッチを指定して MakeCert.exe ツールを使用します。
- -sk subjectKey。秘密キーを格納する、サブジェクトのキー コンテナの位置を指定します。キー コンテナが存在しない場合は、作成されます。-sk も -sv も指定しなかった場合、既定で JoeSoft という名前のキー コンテナが作成されます。
- -n subjectName。サブジェクト名を指定します。命名規則では、サブジェクト名の前に、"Common Name" を示す "CN = " を付加します。
- -iv issuerKeyFile。発行元の秘密キー ファイルを指定します。
- -ic issuerCertFile。発行元の証明書の位置を指定します。
たとえば、次のコマンドを実行すると、サブジェクト名が
"CN=SignedByCA"
で、発行元の秘密キーを使用する証明書が作成されます。ルート証明機関TempCA
の証明書を使って署名されます。makecert -sk SignedByCA -iv TempCA.pvk -n "CN=SignedByCA" -ic TempCA.cer SignedByCA.cer -sr currentuser -ss My
信頼されたルート証明機関の証明書ストアに証明書をインストールする
作成された自己署名証明書は、[信頼されたルート証明機関] の証明書ストアにインストールできます。この証明書で署名された証明書は、この時点で信頼できるものと見なされるようになります。したがって、この証明書が不要になった場合は、直ちに証明書ストアから削除してください。この証明書を削除すると、それを使って署名した証明書は認証されなくなります。ルート証明機関の証明書は、必要に応じて一連の証明書を有効化する手段の 1 つにすぎません。たとえばピアツーピア アプリケーションの場合、証明書が提示されれば相手の識別情報を信頼できるので、ルート証明機関は必要ないのが普通です。
自己署名証明書を信頼されたルート証明機関としてインストールするには
証明書スナップインを開きます。詳細な情報については、次のページを参照してください。 「方法 : MMC スナップインを使用して証明書を参照する」を参照してください。
証明書の格納先となる、[ローカル コンピュータ] または [現在のユーザー] のフォルダを開きます。
[信頼されたルート証明機関] フォルダを開きます。
[証明書] フォルダを右クリックして、[すべてのタスク] メニューの [インポート] を実行します。
ウィザード画面が開くので、その指示に従って TempCa.cer を証明書ストアにインポートしてください。
WCF で証明書を使用する
一時的な証明書を設定したら、それを使用して、クライアント資格情報の種類として証明書を指定する WCF ソリューションを開発できます。たとえば、次の XML 構成では、メッセージ セキュリティを設定して、クライアント資格情報の種類として証明書を指定しています。
クライアント資格情報の種類として証明書を指定するには
サービスの構成ファイルで、次の XML を使用して、セキュリティ モードをメッセージに、クライアント資格情報の種類を証明書に設定します。
<bindings> <wsHttpBinding> <binding name="CertificateForClient"> <security> <message clientCredentialType="Certificate" /> </security> </binding> </wsHttpBinding> </bindings>
クライアントの構成ファイルで、次の XML を使用して、その証明書がユーザーのストアにあり、SubjectName フィールドで "CohoWinery" という値を検索すると見つかることを指定します。
<behaviors>
<endpointBehaviors>
<behavior name="CertForClient">
<clientCredentials>
<clientCertificate findValue="CohoWinery" x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
WCF での証明書の使用に関する詳細については、「証明書の使用」を参照してください。
セキュリティ
一時的なルート証明書は、不要になったら [信頼されたルート証明機関] フォルダや [個人] フォルダから確実に削除してください。削除するには、証明書を右クリックし、[削除] をクリックします。