アプリケーションがサーバーの証明書をチェックするかどうかをチェックするようにリスナーを設定しようとしています(そうでないことを強く想定しています)。だから私は自己署名証明書を作成しましたfake.pem
リスナーの場合、アプリケーションからリスナーに接続しようとしています。
socat openssl-listen:443,reuseaddr,cert=./fake.pem echo
Wiresharkでキャプチャしたパケットは
Client (C) -> Server(S): SYN
S->C: SYN-ACK
C->S: ACK
C->S: sClient Hello
S->C: ACK
S->C: Server Hello, Certificate, Server Key Exchange, Certificate Request, Server Hello Done
C->S: Certificate, Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
S->C: Alert (Level: Fatal, Description: handshake Failure)
S->C: RST ACK`
Socatはオプションcafile
のみをチェックするものだと思っていました(少なくともそれはマンページに記載されています)。無効にできる追加のチェックを実行しますか?
クライアントからの有効な証明書ではなく、サーバー側が文句を言う他の理由はありますか?
問題はcertificate request
部分。クライアントアプリケーションは証明書を送信せず、オプションverify=0
が正常に機能するsocatリスナーに追加されます。 verify
はデフォルトでTrueに設定されています。