問題タブ [schannel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache - PEM ファイルから ASN.1 発行者文字列を取得しますか?
最近、Windows 2003 で問題に遭遇しました (どうやら他のバージョンにも存在するようです)。SSL/TLS サーバーがクライアント証明書認証を要求していて、信頼できる証明書 DN が 16KB を超えている場合、Internet Explorer (または他のアプリ) schannel.dll を使用する) は、SSL ハンドシェイクを完了できません。(簡単に言えば、RFC 2246 秒 6.2.1 に従って、サーバーはメッセージを 2^14 バイトのチャンクに分割しますが、Schannel はそれをサポートするように作成されていません。マイクロソフトのサポートから、これがSchannel の欠陥であり、将来のリリースで修正することを検討しているとのことです。)
そのため、信頼できる証明書を簡単に解析して(サーバーとしてApacheを使用しているため、すべてPEM形式です)、DNのASN.1形式の合計長を取得する方法を見つけようとしています(これが方法ですそれらはハンドシェイク中にネットワーク経由で送信されます)、それにより、制限に近づきすぎていないかどうかを確認します。私はまだこれを行う方法を見つけることができませんでした.私は欲しい。
助言がありますか?
ssl - SChannel での SEC_I_RENEGOTIATE および TLS1_ALERT_NO_RENEGOTIATION の処理
現在、非同期 (IOCP) ベースのサーバーで SChannel を使用しています。ほとんどの機能は正常に動作していますが、再ネゴシエーションに問題があります。具体的には、ピア A がピア B に再ネゴシエーションの要求を送信し、ピア B が TLS1NO RENEGOTIATION
アラートで応答した場合、ピア A はどのように続行しますか? 応答を受け取った時点で無効なコンテキストがあるようで、SEC_I_NO_RENEGOTIATION
これによりストリームを使用し続けることができなくなります...
更新しましたさらにテストを行ったところ、無効なコンテキストではないようですがSEC_E_ENCRYPT_FAILURE
、次の暗号化呼び出しから得られます...
再交渉の要求は実際に拒否できますか? それともNO RENEGOTIATION
アラートは、接続が役に立たないことを意味する単に有益なエラー メッセージですか? もしそうなら、なぜ「エラー」ではなく「警告」とコメントされているのですか?? いいえ; TLS RFC (5246) は、再ネゴシエーション アラートの後で続行できるかどうかを決定するのはピア次第であると明確に述べています...
更新されました...を使用してTLSアラートを送信しても違いはありません...ApplyControlToken()
or if I send it using EncryptMessage()
with SECQOP_WRAP_OOB_DATA
windows - SChannel での SSL セッションの再利用 (Windows)
schannel.dll を使用してリモート サーバーへの SSL 接続を確立するプログラムがあります。しかし、サーバーから頻繁に切断し、共有キーを再度ネゴシエートすることなく再接続したいと考えています。SSL がこれをサポートしていることは知っていますが、SChannel でそれを行う方法がわかりません。
手伝って頂けますか?
役立つリンクを次に示します。
Schannel を使用した安全な接続の作成: http://msdn.microsoft.com/en-us/library/aa374782(VS.85).aspx
SSL セッションの再利用 - サポートされているかどうかを確認する方法: http://royontechnology.blogspot.com/2008/01/how-to-find-out-if-server-supports-ssl.html
winapi - EncryptMessage が SEC_E_INVALID_TOKEN を返す
有効なコンテキストで win32 API から EncryptMessage (SChannel) を使用する場合、正しい順序で 4 つのバッファーを提供しています。ドキュメントによると、No SECBUFFER_DATA type buffer was found. 速度のために pvBuffers のセットを連続したメモリから割り当てる必要があることはわかっていますが、簡単にするために何が何であるかを明確にしました。誰が問題が何であるかを見ることができますか?
ありがとう、ブルース
コードは次のとおりです。
実行可能ファイルに挿入された STRACE を使用しましたが、この行は興味深いようです。
OSが正しい情報を取得しているように見えます。
少し検索したところ、80090308 は通常、サーバーの完全な名前が件名に含まれている必要があるという点で、証明書に問題があることを意味することがわかりました CN=www.foobar.com しかし、これでも問題は解決しませんでした。証明書とCA は OpenSSL で生成されます。
windows - SChannelを使用してソケットを取得できますか?
SChannelまたはその他のMicrosoftAPIを使用して、TCP/IPアプリケーションのTLSをサポートしたいと思います。理想的には、SChannelを使用してアプリ内に一種のTLSトンネルを作成し、SOCKETハンドルを別のライブラリに渡すことができるようにします。これはSChannelが私のためにできることですか、それとも自分でトンネルを実装する必要がありますか?
winapi - TransmitFile + SChannel
Windows 上の効率的なマルチスレッド ファイル サーバー用に、I/O 完了ポートを備えた TransmitFile API を使用しています。
これはすべて正常に動作しますが、SChannelを使用してセキュア ソケットも実装しました。TransmitFile はファイルをソケットに直接ストリーミングするため、EncryptMessage を呼び出す方法がわかりません。ファイルをチャンクで読み取り、暗号化して手動で送信する必要がありますか?
TransmitFile が高パフォーマンスのファイル転送のみを目的として提供されており、安全なソケットがかなり一般的である場合、これは少しばかげているように思えます。そもそもTransmitFileがIIS用に実装されていると信じていることを考えると、IISは何をしているのでしょうか。
(もともと "TransmitFile" と "EncryptMessage" のハイパーリンクを作成していましたが、スパム対策で許可されていたのは 1 つだけでした - 申し訳ありません)
c++ - Microsoft Windows SChannel SSPI 自己テスト?
この質問は、TLS に使用される SChannel モジュールが侵害されていないことを検証するために、使用前に自己テストを実行することを要求する一部の仕様 (FIPS) に関するものです。FIPS はその一例です。オープン ソース ライブラリにはセルフ テストが組み込まれています。SChannel にはこの機能がありますか? これについての言及を見つけることはできませんが、これが除外されるのは奇妙に思えます。
質問が曖昧で曖昧でなくなることを願っています。これは、SChannel API について深い知識を持っている人が合理的に答えることができる質問だと思います。
追加: FIPS レベル 1 とレベル 2 についての私の理解では、アルゴリズムの動作は、最初に認定されたときだけでなく、実行時 (セルフ テスト) にも検証する必要があるということです。さらに、メモリ内のイメージをハッシュなどで検証して、変更されていないことを確認する必要があります。
これらが実行時に実行されない場合、ライブラリにパッチが適用される可能性はありませんか?
c++ - C++でSSPIを使用して安全な接続を実装する-いくつかの用語を明確にする
MicrosoftAPIを使用してクライアントとサーバー間の安全な接続を実装するアプリケーションを作成する必要があります。グーグルは私にたくさんの結果を与えます、そして私は大きな混乱を持っています-私の頭の中で私にいくつかの注文をするために誰かが必要です:
質問:
- SSPIインターフェイスとは何ですか?Schannel.dllライブラリとは何ですか?違いは何ですか?(「SSPI.h」と「Schannel.h」と「security32.h」をインクルードできることがわかります。本当に必要なヘッダーファイルはどれですか?)
安全なソケットを作成する方法を説明する実際の簡単なサンプルを見つけるにはどうすればよいですか?
始める前に知っておくべきガイドラインはありますか?
よろしくお願いします。
c++ - InitializeSecurityContext(Schannel)によるTLSハンドシェイクプロセス
SSPIインターフェイスを使用してTLSハンドシェイクプロセスを実装する必要があります。
私のアプリはクライアント側を実装しています。ここから見たように、一般的なフローは次のとおりです。
- InitializeSecurityContext-最初の呼び出しは、SecBufferDesc構造体へのポインターを返します。
- 出力バッファーを使用してsend(= WinSock API)関数を呼び出します。
- recv関数を呼び出す
- バッファーを使用して、InitializeSecurityContextを再度呼び出します。
これらのバッファに関するMSDNの説明:
「最初の呼び出し後のこの関数の呼び出しでは、2つのバッファーが必要です。最初のバッファーのタイプはSECBUFFER_TOKENで、サーバーから受信したトークンが含まれます。2番目のバッファーのタイプはSECBUFFER_EMPTYです。pvBufferメンバーとcbBufferメンバーの両方をゼロに設定してください。」
私の質問:
- もう少し説明が必要です:バッファの意味は何ですか?2番目のバッファには何が含まれていますか?それらは何のため?
- MSDNには、InitializeSecurityContext関数のTargetDataRep入力パラメーターがSchannelに使用されると書かれていますが、私が見た多くのサンプルでは、SECURITY_NATIVE_DREPに設定されています。SECURITY_NATIVE_DREPフラグとは何ですか?なぜMSDNはそれをゼロに設定すると言うのですか?
私は本当にどんな助けにも感謝します。
ありがとう!。
windows - SSPI Schannel API-クレデンシャルハンドルを再利用できますか?
現在、OpenSSLなどの外部依存関係なしにWindowsでSSL対応プロトコルを使用できるようにするために、SSPISchannelAPIサポートをlibcurlに追加しています。
すでにSSL/TLSの実装が機能していますが、関数AcquireCredentialsHandleによって返される資格情報ハンドルの再利用に関して非常に具体的な質問があります。
新しいハンドルを作成し、既存のハンドルを再利用して、それをInitializeSecurityContextに複数回渡す代わりに、SSL / TLSセッションを再利用することは正しく、可能ですか?
libcurlのSchannelモジュールに関する私の作業はここにあり、再利用を試みる実験的なバージョンはここにあります。
これに関するヒントやフィードバックをいただければ幸いです。では、クレデンシャルハンドルをそのような方法で再利用できますか?そしてそれは正しいですか?
前もって感謝します!