サーバーがクライアントを認証できる必要があり、すべての通信を暗号化する必要があるクライアント/サーバーアプリケーションを作成しています。
これを提供するメカニズムは、サーバーとクライアントアプリケーション内に自己完結型であり、完全に自動化されている必要があります(人間の操作は必要ありません)。SSLはこれを行うための最良の方法のようであり、私が使い慣れているものでもあります。
クライアントソフトウェアの展開が必要なクライアントごとに、アプリケーション、クライアント証明書(サーバーによって署名されたもの)、秘密鍵、およびサーバーの公開証明書(クライアントができるようにするため)を使用してMSIインストーラーを(オンザフライで)作成することを計画しました。サーバーを認証します-サーバー証明書は自己署名できます)。
クライアントのキーを生成してCSRを作成することはできますが、実際にCSRに署名してクライアントの証明書を生成する方法を見つけることができないようです。Win32 Crypto APIを調べましたが、実際にCSRに署名してクライアント証明書を取得する方法の例を見つけることができませんでした。
私はopensslツールを使用してコマンドラインからこれらすべてを実行する方法を知っていますが、アプリケーション内からそれを実行する方法がわかりません。
システムコールをopensslツールに呼び出し、動作することがわかっているパラメーターを渡すことはオプションではないことに注意してください。opensslツールが危険にさらされていないことに依存することはセキュリティ上の大きなリスクです。このようにすると、自己完結型の要件を満たすことはできません。
私はこれを正しい方法で行っています、または同じことを達成するためのより良い方法があります-基本的にサーバーに接続するクライアントの認証と接続するクライアントが接続するサーバーを認証する方法はすべて暗号化されています。
静的IPまたはホスト名を持つサーバー(またはクライアント)については推測できません(DNSはとにかく壊れている可能性があります)。また、既存のPKIインフラストラクチャについても推測できません。
私はこれを主にC#.Netで書いていますが、この機能が得られる場合は、これにC++拡張機能を書くことを検討します。
最後に、これが私の最初の投稿です。明らかなことを見逃したり、詳細が不足している場合は、質問してください。ギャップを埋めます:)
ありがとう、
ジェームズ