Erlang SSL - Certificate not suitable on sni_fun callback
我收到了这个错误:
1 |
在为
我尝试查看 otp 源代码。似乎无论回调返回什么都被忽略,从而导致该函数子句被评估:
1 2 | certificate_chain(undefined, _, _) -> {error, no_cert}; |
导致该错误!但我可能是错的,因为我在浏览代码库时有点迷失......
如果有帮助,我会使用自签名 CA 来签署在 TLS 握手期间发现 SNI 时生成的 CSR(通过 sni_fun 选项)。
请指教!非常感谢!
更新:
我尝试了 Erlang OTP 20.3 版本并得到另一个错误:
1 | TLS server: In state hello at tls_connection.erl:739 generated SERVER ALERT: Fatal - Handshake Failure - malformed_handshake_data |
查看 OTP 源代码,这是该块异常的结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | try Version = ssl_handshake:select_version(tls_record, ClientVersion, Versions), case ssl_cipher:is_fallback(CipherSuites) of true -> Highest = tls_record:highest_protocol_version(Versions), case tls_record:is_higher(Highest, Version) of true -> ?ALERT_REC(?FATAL, ?INAPPROPRIATE_FALLBACK); false -> handle_client_hello(Version, Hello, SslOpts, Info, Renegotiation) end; false -> handle_client_hello(Version, Hello, SslOpts, Info, Renegotiation) end catch _:_ -> ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, malformed_handshake_data) end. |
我确信证书没问题,我可以查看它,也可以使用 openssl 在 DER/PEM 格式之间进行转换,没有错误。有没有办法揭示在这种情况下是哪种异常?
我解决了这个问题:sni_fun 必须返回
的列表
1 | [{cert, DerdecodedCert}, {keyfile, PathToTheCsrKeyFile}] |
我只是回来了
1 | [{cert, DerdecodedCert}] |
(这是由 Erlang ssl doc 指示的)
希望这对遇到与我类似的问题的人有所帮助!