問題タブ [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.

0 投票する
0 に答える
581 参照

c++ - Win SSPI(Schannel) - メモリの割り当てとクリーンアップを担当するのは誰ですか?

Win SSPI(Schannel)インターフェースでTLS接続を確立したい。
私は暗号化と復号化のプロセスの段階にあり、本当に混乱していることに気づきました -メモリ割り当てを管理する責任があるのは誰ですか? :

  1. rempte パーティにデータ パケットを送信する場合は、4 つのバッファーを含むバッファーを使用して EncryptMessage 関数を呼び出して、データを暗号化する必要があります。ヘッダーへのバッファー、データへのバッファーは暗号化する必要があり、トレーラーへのバッファー、タイプ SECBUFFER_EMPTY の 4 番目のバッファー (これが何に使用されるのか理解していないと言わざるを得ませんが、MSDNには追加するように書かれています)。EncryptMessage 関数が呼び出されると、暗号化されたデータはどこにあるのでしょうか? 入力バッファとして送信したデータを上書きしますか? もしそうなら、暗号化されたデータが送信した元のバッファのサイズよりも大きすぎる場合はどうなりますか? EncrypteMessage は追加のメモリを割り当て、それを元のバッファに結合しますか?
  2. データを受信すると、受信した暗号化されたバイトのストリームも取得し、暗号化されたデータを DecryptMessage 関数に送信する必要があります。私の質問は再び - SSPI は復号化されたデータをどこで見つけますか? また、復号化データが元のストリームよりも短い場合、割り当てられた残りのバイトを解放する責任は誰にありますか?
  3. メッセージを復号化すると、関数がタイプ SECBUFFER_EXTRA のバッファを返すことがあります。MSDNには、この余分なバッファの意味が書かれています。繰り返しになりますが、誰がこのメモリの場所を割り当てているのか完全にはわかりません。それは、私が送信した元のストリーム内の任意の場所へのポインタですか?

SSPIに精通している人だけが私に答えることができるかどうかはわかりません.Microsoftの実装をよく知っている人かもしれません.
SSPIが管理する内部プロセスとは何かを説明する回答、または部分的な回答をいただければ幸いです。
ありがとう!

0 投票する
1 に答える
1899 参照

c++ - Platform SDK SSPI(Schannel)サンプルc++を探しています

SchannelでのSSPIの使用を示すMicrosoftのサンプルを見たいです。私がここ
で 見るようにそのようなサンプルがあります、しかし私はそれを見つけることに成功することができません:( 誰かが私がそれを見つけるのを手伝ってくれますか?

前もって感謝します!

0 投票する
1 に答える
1233 参照

openssl - カスタム cert_verify_callback でサーバーから送信された openssl x509 証明書チェーンを取得する

デフォルトの証明書検証手順を、( SSL_CTX_set_cert_verify_callbackを介して) Windows システム ストアを使用する手順でオーバーライドすることを検討しています。アプリケーションは Web クライアントであり、システム ストアに追加された全社的な自己署名証明書を受け入れる必要があります。

(おそらく不完全な)チェーンができたら、私は

  • インメモリ WinCrypt ストアを作成し、
  • サーバー提供のチェーン(最終証明書を除く)をそれに追加します
  • 一時ストアとシステム ストアから WinCrypt を使用して完全なチェーンを構築する
  • WinCrypt を使用してチェーンを検証する (SSL オブジェクトからサーバー名の値を渡す)

ただし、X509_STORE_CTX_get1_chain()は、 X509_verify_cert()の実行後にのみ使用できる信頼できるチェーンを返します。

私が必要としているのは X509_STORE_CTX::untrusted (これにはハンドシェイクからの証明書のみがあります) ですが、明らかに API 経由でエクスポートされていません。

最終証明書を WinCrypt に渡すこともできますが、それは回避したい中間証明書をダウンロードすることを意味します。

私の質問は、私は逆のことをしていますか? openssl にチェーンを構築させて検証を実行させてから、 WinCrypt を使用してやり直す必要がありますか? それはひどいようです。X509_STORE_CTX_get_untrusted() 関数を追加して、libeay32.dll を再構築することはできますが、そうはしません。

0 投票する
1 に答える
61928 参照

windows - OpenSSL キー ファイルを Windows 証明書ストアにインポートする方法

OpenSSL で生成された PEM 形式の X.509 証明書と、それに関連付けられたキー ファイルがあります。この証明書は、プロトタイプ サーバーに接続する際の認証に必要です。これは Linux で問題なく動作します。Windows プラットフォームで SSL/TLS 接続を駆動するために Microsoft SChannel API を使用してきましたが、同じテスト証明書を使用したいと考えています。証明書ファイルを右クリックして証明書ストアにインポートできますが、秘密鍵は一緒にインポートされていないと思います (それらを同じファイルに連結したにもかかわらず)。

SChannel コードを実行しようとすると、(InitializeSecurityContext を介して) セキュリティ コンテキストを初期化すると、'SEC_E_NO_CREDENTIALS' エラーが発生します。これは、秘密鍵が欠落していることを意味していると思われます。

「certmgr.msc」経由でアクセスする、個人 (または「マイ」) 証明書ストアにある証明書の秘密鍵の有無をテストする方法を知っている人はいますか? 証明書の新しいキー ファイルをストアにインポートすることはできますか?

洞察やアドバイスをいただければ幸いです。

0 投票する
1 に答える
4783 参照

c# - .Net/C# から Schannel 関数を呼び出す方法

コンプライアンス上の理由 (256 ビット AES と一時キーを使用したい) により、.Net で暗号スイートを再注文/削除しようとしています。ただし、WCF TCP トランスポート セキュリティを使用して、セキュリティのすべての制御を Windows の TLS 実装と優先暗号に委譲します。システムレベルの暗号を変更したくありません。

BCryptEnumContextFunctionsBCryptAddContextFunctionBCryptRemoveContextFunctionを使用してアプリケーションレベルでそれを行う方法をリストしたこの素晴らしい Microsoft ページを見つけましたが、それはすべて C であり、どこから始めればよいかを知るのに十分な P/Invoke の経験がありません。私はグーグルで検索しましたが、それをやっている人は見つかりませんでした。

MSDN ページの C++ コード スニペットを以下に示します。これらを .Net P/Invoke 呼び出しに変換するには、助けが必要です。

BCryptEnumContextFunctions

BCryptAddContext関数

BCryptRemoveContext関数

これらを .Net に変換して、マネージ コードから呼び出して暗号を調整できるようにする方法を教えてください。ありがとう!

編集:

昨夜遅く、テストプログラムで次のことを試しました(P/Invokeで何をしているのかまだわかりません):

私がこれまでに得た唯一の方法の現在の出力は次のとおりです。

0 投票する
1 に答える
2071 参照

c++ - c++ を使用したセキュア ソケット接続

Windows で SSL/TLS 接続を機能させようとしています。現在、私は Schannel を使用していますが、これが正しい方法かどうかはわかりません。これが私のコードです。InitializeSecurityContextA() 関数で例外がスローされる

0 投票する
0 に答える
140 参照

ssl - TLS ハンドシェイクが成功した後、Schannel セキュリティ パッケージからマスター キーを取得する方法は?

Windows schannel セキュリティ パッケージを使用して EAP-TTLS を実装しています。内部認証方法の 1 つで、TLS ハンドシェイク プロセス中に生成されたマスター キーが必要です。

マスターキーを取得する API はありますか?

私を助けてください。詳細をお知らせください。前もって感謝します。

0 投票する
0 に答える
145 参照

mysql - SQL データを読み取る VB.Net アプリケーション

ローカルの開発者が開発した POS システムを使用していますが、このエラーが繰り返し発生します。プログラムを使用しているときに次のボタンを押して、メニューに次の項目のリストを表示すると、エラーが発生します。これが発生すると、プログラムはクラッシュして終了します。プログラムは、同じコンピューターで実行されている mysql データベースを介して動作します。

私のイベントビューアーがエラーについて報告したものは次のとおりです。

イベント ID: 36876 ソース: Schannel リモート サーバーから受信した証明書が正しく検証されていません。エラー コードは 0x80092013 です。SSL 接続要求が失敗しました。添付データにはサーバー証明書が含まれています。

0 投票する
1 に答える
406 参照

c++ - SCHANNEL TLS サーバー側は CertFindCertificateInStore を実行できません

サーバー側アプリケーションに TLS 暗号化を追加しています。Schannel API を使用して TLS を追加しています。CertFindCertificateInStore に問題があります。探している証明書が見つかりません。検索の基準として、証明書の名前を使用しています。これに何時間も費やしましたが、なぜ機能しないのかわかりません。どんな助けでも大歓迎です。これを使用している関数は以下にあります。ありがとう、

int ServerCreateCredentials() {

0 投票する
1 に答える
402 参照

windows - Schannel 接続の属性を決定 -> 不明な値を返す

Schannel を使用して安全な接続を正常に作成した後、 を渡し、QueryContextAttributes ()を使用してその接続属性を取得していますSECPKG_ATTR_CONNECTION_INFO

返された構造体には、探している情報、つまり使用された鍵交換アルゴリズムを保持するSecPkgContext_ConnectionInfoフィールドが含まれています。aiExch

私はこれを何ヶ月も使用していますが、常に2つの事前定義された値のCALG_RSA_KEYXいずれかCALG_DH_EPHEM.を返しました.0x0000ae06

これらのマクロを使用して、ALG_ID をそのコンポーネントに分割できます。

それによると、次の0x0000ae06ことを意味します。

クラス:ALG_CLASS_KEY_EXCHANGE
タイプ: (7 << 9)-> 未定義
SID: 6-> その意味はアルゴリズムのタイプに依存

誰も同じ問題に遭遇しましたか?何が起こったのか、または何0x0000ae06の略なのか説明できる人はいますか?