2017-10-13 5 views
0

私は、通常のSSLハンドシェイク中にクライアントがサーバーの証明書を受け取り、それを検証した後、サーバーの公開キーを使用してセッションキーを暗号化することを知っています。クライアントはSSLハンドシェイクを行うために事前に保存されたサーバの証明書をどのように使用できますか?

Linux上のC言語でSSLクライアントを作成したいと思います。 SSLハンドシェーク中、サーバの証明書を待つ必要はなく、以前にダウンロードされたサーバの公開鍵で暗号化されたセッション鍵を送信します。

私はOpenSSLの使い方を学んでいます。私はここでdo-handshakeの部分が必要です。

ありがとうございました。なぜこれを行うのですか? ISPまたはゲートウェイは証明書を検閲し、証明書の名前に従って接続をブロックできます。

+0

なぜですか?どのように証明書を送信しないようにサーバーに指示しますか?あなたは変更された証明書をどのように扱いますか?私には悪い考えのように聞こえますが、これは[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)でしょうか? –

+0

これを行うには、クライアントコードとサーバーコードの両方にアクセスする必要があります。実装されると、このハンドシェイクはクライアントとサーバーの間でのみ機能します。つまり、サーバーは他のクライアントと通信できませんでした。 – mnistic

+0

"*クライアントがSSLハンドシェイクを行うためにあらかじめ保存されているサーバの証明書を使用するにはどうすればよいですか?*"サーバをクライアントに送信したものを無視して、 – alk

答えて

1

残念ながら、これは不可能です。 SSL(またはTLS)プロトコルの一部として、サーバーは常にその証明書を送信します。

ISPの検閲を迂回したい場合は、VPNまたはTorを使用することをお勧めします。

+1

両方のピアが「匿名」キーまたはPSKまたはSRPキー交換のいずれかをサポートし、同意しない限り、パブリックサーバーはそれを行いません。独自のサーバーを稼働させる必要があります。そうした場合は、通常の証明書ベースのキーエクスチェンジャーを、無害であることを選択した名前といっしょに簡単に(そしてあまり目立たないように)使用できます。 –

+0

@ dave_thompson_085クライアントは証明書を受け取ったと思っても構いません(あらかじめ保存されている証明書を使用します)とにかくハンドシェークを実行できますか? – judian

+0

@judian:そう思わない。 ISPや他のMitMがTCPから証明書メッセージをスプライスしたが、調整されたシーケンス番号を含む他のものをすべて残していれば、原則としてハンドシェイクを続けることができるかもしれません。フルフライトではなく、証明書メッセージでなければならないことに注意してください。まだserverhelloとserverkxが必要です。しかし、実際には、サーバが証明書をまったく送信しないようにしない限り、MitMは接続を完全にブロックします。これは、実行しているサーバ(または友人が走っているサーバ)でのみ起こります。 _ SNIを無効にします。 –

関連する問題