web-dev-qa-db-ja.com

カールを持つ片道SSL

私はそこにたくさんのトピックや記事があることを知っていますが、私は本当にこれに私の車輪を回転させています。

私はTLS上でNodeJSインスタンスを実行しています。 CURLを使用して接続するための別のサーバーが必要です。残念ながら、私が使用しているカールのバージョンの制限のため、-kを実行することはできません。

そのため、接続時に証明書警告がない場合があります。

私の考えは次のとおりです。

1. to generate a cert 
2. generate a certificate signing request
3. acquire the CA
4. sign the certificate with the CA
5. Configure NodeJS to send the CA, Cert, and Key during handshakes
6. Have the requesting server do a cURL command, specifying the certificate in the command.

これはどんな感覚にもかかわらず、これは後ろ向きですか?私はそれぞれの部分を区別するトラブルをたくさん持っています。

ありがとう、

編集

それで、私が回答に基づいて何をしているのかわかりません。 CA、PUBLIC、および秘密鍵のコピーを入手できれば。それから私は続行しますか?冗長にしてください。

1
jacksonecac

残念ながら、私が使用しているカールのバージョンの制限のために-kを実行することはできません。

それが開始からの誤ったアプローチです。 -kサーバ証明書の検証を無効にし、したがって中間攻撃の中で男を簡単にします.HTTPSが防止することを目的としたものを正確に許可します。

  1. にnodejsを設定します(== --- ==)ハンドシェイク中にCA、CERT、およびキーを送信します
  2. 要求側サーバーにCURLコマンドを実行させてください。コマンド内の証明書を指定します。

私はあなたがここで達成しようとしていることをよくよくよくわかりませんが、私が正しくあなたを正しく理解しているなら、あなたがサーバー側で証明書を生成し、この証明書をクライアントに送信し、将来この証明書をチェックするようにクライアントに送信します。

このアプローチの問題は、新しく作成された証明書のサーバーからクライアントへの送信を保護する必要があることです。そうでなければ、途中の男は攻撃者によって作成されたものに対して証明書を交換することができ、したがって中間の攻撃で検出不能な男をし続けることができます。

残念ながら、あなたの質問は未知の問題を解決するための試みを表しています( XY問題 )。 SSLを実行する一般的な方法は、クライアントによってすでに信頼されている認証局(CA)とこのCAによって発行された証明書を持つことです。ほとんどの場合、これらのCAはすでにクライアントから信頼されているので、暗号化のようなパブリックCAがこれに使用されます(OSまたはブラウザの船用)。あなたの質問に説明はありません。なぜあなたはこの確立された方法を行くことができず、代わりにあなた自身の解決策を発明する必要があります。

2
Steffen Ullrich