6

ここで説明されているように http://www.ddj.com/cpp/184401688

これをゼロから書く時間はありません。

尋ねられ、答えられなかった https://stackoverflow.com/questions/434961/implementing-ssl

質問は:

MS SSPI (上記のスレッドで言及されているように) を実装するコンパイル可能な作業ソース コードを探しています。手続き型ではなく、OOP が優先されます。

ここでコード プロジェクトのサンプルを見てきました。

http://www.codeproject.com/KB/IP/sslclasses.aspx

しかし、これは C# OOP です。これを C++ コードに変換するのは簡単ではありません。

OpenSSL

SChannel 呼び出しは、GSS API 標準に従います。もちろん、OpenSSL など、いくつかの代替手段があります。このパッケージはプロトコルの完全かつ完全な実装であり、UNIX に精通している人にとっては間違いなく最良の選択です。このパッケージはもともと UNIX コミュニティを対象としており、コンパイルは Perl ランタイムに依存しているため、UNIX タイプのシステムを扱ったことのない Windows 開発者にはある程度の学習曲線が必要です。

それとは別に、OpenSLL はいくつかの非常に非標準的なことを行います。

ニコライ、多くのコンパイル可能なソース コード (www.coastrd.com) に貢献したので、同じことをしてくれる人を見つけたいと思っていました。

4

4 に答える 4

23

この SSPI SChannel SMTPS の例は、Visual Studio 2008 でそのままコンパイルおよび実行する必要があります。

http://www.coastrd.com/c-schannel-smtp (元のサイトは死んでいるようですが、幸いにも WaybackMachine にアーカイブされています)

SChannel は、SSL/TLS プロトコルをラップする GSS API の Microsoft 実装です。

SChannel を利用する利点:

  • 悲惨な詳細は、SSPI によって開発者から隠されています。
  • 最終的なアプリケーションを実行するために追加のセットアップは必要ありません。
  • SChannel は、オペレーティング システムの不可欠な部分です。
  • Windows ME/2000/XP/... プラットフォームでは、SChannel がデフォルトでインストールおよび構成されます。
  • SChannel 呼び出しは、GSS API 標準に従います。
  • 証明書を作成/インストールする必要はありません
  • サードパーティの dll (1MB 以上) を出荷してインストールする必要はありません

コードは、次のようなセッションを生成する必要があります。

----- SSPI 初期化済み
----- WinSock 初期化済み
----- 資格情報初期化
済み ----- サーバーに接続済み
70 バイトのハンドシェイク データを送信
974 バイトのハンドシェイク データを受信
182 バイトのハンドシェイク データを送信
43 バイトのハンドシェイク データを受信しました
ハンドシェイクが成功しました
----- クライアント ハンドシェイクが実行されました
----- サーバー資格情報が認証されました

サーバーの件名: C=US、S=California、L=Mountain View、O=Google Inc、CN=smtp.gmail.com
サーバー発行者: C=ZA、S=Western Cape、L=Cape Town、O=Thawte Consulting cc 、OU=Certification Services Division、CN=Thawte プレミアム サーバー CA、E=premium-server@thawte.com

----- 証明書チェーンが表示されました
----- サーバー証明書が検証さ
れました ----- サーバー証明書のコンテキストが解放されました

プロトコル: TLS1
暗号: RC4
暗号強度: 128
ハッシュ: MD5
ハッシュ強度: 128
鍵交換: RSA
鍵交換強度: 1024
----- セキュア接続情報
64 バイトの (暗号化された) アプリケーション データを受信 復号化された
データ: 43 バイト
220 mx .google.com ESMTP 6sm17740567yxg.66

7 バイトの平文を送信:
EHLO

28 バイトの暗号化されたデータが送信されました
169 バイトの (暗号化された) アプリケーション データが受信され まし た 復号化された データ
: 148 バイト拡張ステータスコード 250 パイプライン





7 バイトの平文を送信:
QUIT

28 バイトの暗号化されたデータが送信された
69 バイトの (暗号化された) アプリケーション データが受信された 復号化された
データ: 48 バイト
221 2.0.0 接続を閉じている

----- SMTP セッションの完了
送信終了通知
23 バイトのハンドシェイク データが送信されました
----- サーバーから切断されました -----
クリーンアップ
の開始 ----- すべて完了 -----

于 2010-01-12T10:43:20.787 に答える
5

たぶん、このリンクは良い出発点です。これには、MS SSPIを使用して実際に機能するサンプルコードが含まれています(MSVC固有のように見えますが、とにかくウィンドウのみです)。OpenSSLの例は無視してください;-)

于 2010-01-09T02:42:22.320 に答える
4

「 OpenSSLを使用したい」と繰り返します。

この問題はあまりにも深刻で、解決したいと思うたびに自力で解決するにはあまりにも簡単に失敗してしまいます。OpenSSL に問題がある場合は、対話と OpenSSL へのパッチを通じて問題に対処してください。

(Microsoft でさえ、あるいは実際に OpenSSL でさえ、誰もそれを台無しにしないわけではありません。ソースを確認でき、問題が発生したときにパッチが適用されるものを使用してください。OpenSSL を使用してください。)

于 2010-01-09T02:15:43.340 に答える
0

このようなコンパイル可能な動作するソース コードにいくら払うでしょうか? それとも、誰かがあなたにそれをくれると思っていましたか? OpenSSL の連中はすでにそうしています。それはとても醜いですが、価格は正しいです。

于 2010-01-09T02:21:34.313 に答える