私は現在、実質的にチャットサーバーとは何かをいじっています。ユーザーをあまり公開したくないので、OpenSSL ライブラリの LibreSSL のフォークを使用して TLS 暗号化を追加しました。コードの残りの部分は正常に動作しているように見えますが、証明書を正しく処理していないと思います。
通信を暗号化するためだけでなく、サーバーが本当にクライアントが話したい相手であることを確認するために使用する必要があるプライベート/パブリック証明書をサーバー上に持っています。そして、それは私が理解できない部分です:
サーバーの公開鍵をクライアントに渡すにはどうすればよいですか? 正しいサーバーと通信していることを確認するために必要です。それとも、ルート CA の証明書を含めて何か別のことをする必要がありますか? それを提供するAPIはありますか?公開鍵を実行可能ファイルと一緒に としてパッケージ化できますが
.pem
、クライアント要求に使用する公開サーバー鍵またはルート CA について OpenSSL に伝える API が見つかりません。クライアント用のシステム証明書を取得するにはどうすればよいですか? 今は
.pem
ファイルに作成したばかりですが、クライアントをダウンロードするすべてのユーザーに対して一意の証明書を使用して新しいダウンロードを作成する必要はありません。確かに、「現在のユーザーの証明書」を取得する方法、またはOpenSSL APIを介してこの使用のために自動生成する方法はありますか?
誰かが使用する適切な API を教えてくれたら、それは素晴らしいことです! また、手がかり、SOに関する同様の質問へのリンク、チュートリアル、OpenSSL暗号初心者向けの書籍へのポインタ、回答、またはサンプルコードも取得します。
現在、クライアント プログラムとサーバー プログラムの両方で証明書を設定するためにSSL_CTX_use_certificate_file()
との両方を使用しています。SSL_CTX_use_PrivateKey_file()
上記のリンク先の Github チャット サーバー リポジトリでコードを確認できます。eleven_session.cpp