Minha opinião: o manual do openssl s_client
diz:
-nextprotoneg protocols
enable Next Protocol Negotiation TLS extension and provide a list of comma- separated protocol names that the client should advertise support for. The list should contain most wanted protocols first. Protocol names are printable ASCII strings, for example "http/1.1" or "spdy/3". Empty list of protocols is treated specially and will cause the client to advertise support for the TLS extension but disconnect just after reciving ServerHello with a list of server supported protocols.
(ênfase minha)
Então, eu diria que o mecanismo SSL / TLS que está encerrando sua solicitação em benchmarkjs.com
simplesmente não suporta essa extensão de negociação do protocolo Next Protocol ou a desativou por algum motivo. Portanto, em seu teste, o comando openssl s_client
anuncia que é compatível com NPN, mas o servidor faz vista grossa para ot.
O handshake ainda passa OK porque a extensão parece não ser essencial (ou pelo menos considerada como tal por openssl
) e você obtém o túnel TLS conectado.
Quanto à implementação de checagem confiável, eu tenho medo, pois openssl s_client
aparentemente não tem nenhuma opção de linha de comando que force a finalização da sessão imediatamente, você teria que ir mais fundo e escrever seu próprio programa ligando para libssl
que implementaria o comportamento desejado. (E eu o implementaria pessoalmente em Ir usando o crypto/tls
pacote de sua biblioteca padrão, já que não é mais difícil de programar do que JavaScript, mas produz um programa vinculado estaticamente, o que significa que é fácil de usar.