2012-03-30 10 views
1

SSLクライアント接続の認証時に、サーバーはクライアントに証明書を提供することを要求します。一般的な企業のWindowsプラットフォームでは、これらの証明書はWindows暗号化ストア(このコマンドで開かれた 'certmgr.msc')の「個人」セクションにあります。認証にWinCrypt証明書を使用するWindows上でSSLソケットを作成しますか?

OpenSSLはこれらの証明書を使用しません。 Windowsは、SSL接続を作成するWinHTTP APIを提供していますが、HTTP要求/応答プロトコルに従わなければなりません。 OpenSSLソケットのように使うことができますか?、ありがとう。

答えて

1

Opensslは複数の暗号エンジンをサポートしています。そのうちの1つはWindows CAPIエンジンです。

私のマシンにはopenssl engineの結果があります。 CAPIは最後のものである:

(dynamic) Dynamic engine loading support 
(4758cca) IBM 4758 CCA hardware engine support 
(aep) Aep hardware engine support 
(atalla) Atalla hardware engine support 
(cswift) CryptoSwift hardware engine support 
(chil) CHIL hardware engine support 
(nuron) Nuron hardware engine support 
(sureware) SureWare hardware engine support 
(ubsec) UBSEC hardware engine support 
(padlock) VIA PadLock (no-RNG, no-ACE) 
(gost) Reference implementation of GOST engine 
(capi) CryptoAPI ENGINE 

OpenSSL engine(3) man pageは、あなたのコード内でエンジンを選択する方法についてのコード例を示します。 OpenSSLを構築するのはちょっと難しいことがあります。ここには、すべてのエンジンが統計的にリンクされた静的ビルドを生成するバッチファイルもあります。デプロイメントに最適な選択肢ではありませんが、CAPIの詳細を処理している間は、単一のファイルを持つことでDLL Hellから解放されます。

@echo off 
setlocal 

call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" 

::Get the current directory name in the variable builddir 
for /f "delims=\" %%a in ("%cd%") do set builddir=%%~nxa 

::Configure build variable 
perl Configure VC-WIN32 enable-static-engine --prefix=. 

::Generate makefile 
call ms\do_nasm.bat 

::Build 
nmake -f ms\nt.mak 
::Test 
nmake -f ms\nt.mak test 
::Install 
nmake -f ms\nt.mak install 

endlocal 
+0

優秀な、これは箱の中で働く、答えのおかげで! –

1

Doh !, WinSockはSSLをネイティブにサポートしているため、おそらくWindows証明書ストアとうまく統合されています。

EDITは:ルークは、以下のコメントで示したよう残念ながら、これはWindowsのモバイルのみ

用で、正しいアプローチはSChannelのAPIを使用することです。この不快なAPIについては、hereで詳しく説明しています。

+1

これは、モバイル版Windowsの場合のみです。あなたがデスクトップやサーバーを目指しているのであれば、ちょっと苦労します。 – Luke

+0

Argh !,それも可能ですか? –

+1

それは大きな痛みです。通常のソケットロジックと多くのバッファ操作と管理の間に、1トンのセキュリティAPI呼び出しを挿入する必要があります。それはばかげて面倒で困難です。可能であれば、ハードワークを担当するサードパーティのソリューションを使用する必要があります。私は "楽しい"(私はマゾフストでなければなりません)のためにそれを自分でやって、[このページ](http://www.coastrd.com/tls-with-schannel)がとても役に立ちました。一番上には、通常必要な機能(ホストへの接続/切断、データの送信/受信など)をカプセル化するという、まともな仕事をするコードへのリンクがあります。 – Luke