C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: クライアント証明書の取得について


(過去ログ 124 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■74048 / inTopicNo.1)  クライアント証明書の取得について
  
□投稿者/ H2oi (1回)-(2014/11/26(Wed) 09:48:50)

分類:[C#] 

2014/11/26(Wed) 15:42:41 編集(投稿者)
2014/11/26(Wed) 15:42:37 編集(投稿者)

初めまして、H2oiと申します。
現在、コンソールアプリを製造しておりその中でAPI通信を行う部分があるのですが、API側がクライアント証明書を必要としています。ですがクライアント証明書を指定する方法が調べてもわからずここに質問をさせて頂きました。
HttpClientを使用したクライアント証明書を指定する方法を教えてください。

環境:Windows8.1
言語:C#、.NetFrameWork 4.5、WindowsRuntime
引用返信 編集キー/
■74058 / inTopicNo.2)  Re[1]: クライアント証明書の取得について
□投稿者/ Azulean (373回)-(2014/11/26(Wed) 22:41:11)
ツッコミから始めるようで申し訳ないですが。

No74048 (H2oi さん) に返信
> 現在、コンソールアプリを製造しており
(略)
> 言語:C#、.NetFrameWork 4.5、WindowsRuntime

コンソールアプリケーションプロジェクトなのですよね?
そうであれば、Windows Runtime は関係しないはずです。

> その中でAPI通信を行う部分があるのですが、API側がクライアント証明書を必要としています。
> ですがクライアント証明書を指定する方法が調べてもわからずここに質問をさせて頂きました。
> HttpClientを使用したクライアント証明書を指定する方法を教えてください。

どういった API なのかわかりませんが、クエリ文字列やボディ部分に対して署名するようなものであれば、HttpClient クラスは何もしてくれません。
自分で実装するか、既製のライブラリを利用する必要があります。

相手のサービス、あるいは API の技術的特徴を具体的に明らかにできない場合は、これ以上の助言を得るのは難しいと思われます。
引用返信 編集キー/
■74070 / inTopicNo.3)  Re[2]: クライアント証明書の取得について
□投稿者/ H2oi (2回)-(2014/11/27(Thu) 18:37:12)
2014/11/27(Thu) 18:38:13 編集(投稿者)
返信が遅くなってしまい申し訳ありません。
ご返答ありがとうございます。

こちらですが自己解決いたしました。
X509Storeクラスを使い、該当のクライアント証明書を取得、WebRequestHandlerクラスのClientCertificates.Addで指定することで解決しました。
以下、サンプルコードです。

        private static X509Certificate GetClientCert()
        {
            X509Store store = null;
            try
            {
                store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
                X509Certificate2Collection findResult = store.Certificates.Find(X509FindType.FindBySubjectName, "ABCD", false);

                if (findResult.Count == 1)
                {
                    X509Certificate cert = findResult[0];
                    return cert;
                }
            }
            finally
            {
                if (store != null) store.Close();
            }
            return null;
        }


        static void Main(string[] args)
        {
        WebRequestHandler header = new WebRequestHandler();
            header.ClientCertificates.Add(GetClientCert()); 

            HttpClient client = new HttpClient(header);

            〜
        }

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -