[erlang-bugs] possible bug in ssl and/or public_key module (R13 and R14)
Ingela Anderton Andin
ingela@REDACTED
Fri Sep 17 10:19:43 CEST 2010
Hi!
Humm ...
I get this result running your program:
Erlang R14B (erts-5.8.1) [source] [smp:4:4] [rq:4] [async-threads:0]
[kernel-poll:false]
Eshell V5.8.1 (abort with ^G)
1> c(ssl_test).
{ok,ssl_test}
2> ssl_test:test().
=ERROR REPORT==== 17-Sep-2010::09:22:46 ===
SSL: certify_certificate: ./ssl_handshake.erl:570:Fatal error:
certificate expired
** exception error: no match of right hand side value
{error,"certificate expired"}
in function ssl_test:test/0
Did you run your test on a github version of a R14B to be? I do not see
how you could get
a completely different error.
If I do
FunAndState = {fun(_,{bad_cert, unknown_ca}, UserState) -> {valid,
UserState}; (_,{bad_cert, cert_expired}, UserState) -> {valid,
UserState}; (_,{bad_cert, _} = Reason, _) -> {fail, Reason};
(_,{extension, _}, UserState) -> {unknown, UserState}; (_, valid,
UserState) -> {valid, UserState} end, []}.
ssl:connect(couchdb.staging.one.ubuntu.com, 443, [{verify,
verify_peer}, {verify_fun, FunAndState}]).
I get a connection. (I.e I accept that the certificate has expired)
However ssl:connect(couchdb.staging.one.ubuntu.com, 443, [{verify, 0},
{ssl_imp, old}]).
will give a connection so it seems {verify, 0} is more forgiving than
{verify, verify_none} that only allows the path error unkonwn_ca
at the moment, maybe we have to rethink that for backwards compatibility
reasons.
Regards Ingela Erlang/OTP team - Ericsson AB
Filipe David Manana wrote:
> When connecting to particular server, though an ssl socket, I always get the
> error:
>
> Erlang R14B (erts-5.8.1) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe]
> [kernel-poll:false]
>
> Eshell V5.8.1 (abort with ^G)
> 1> c(test_ssl).
> {ok,test_ssl}
> 2> test_ssl:test().
>
> =ERROR REPORT==== 17-Sep-2010::02:07:25 ===
> SSL: certify_certificate: ./ssl_handshake.erl:502:Fatal error: handshake
> failure
> ** exception error: no match of right hand side value {error,esslconnect}
> in function test_ssl:test/0
> 3>
>
> However, if I pick up another server, like www.cia.gov:443 or
> www.facebook.com:443 for example, it succeeds (with exactly the same ssl
> options passed to ssl:connect/3).
> Also tested with R13B03 and R13B04 and got the same results (only modified
> value of option verify from verify_none to 0).
>
> The code to test this eventual bug is:
>
> -module(test_ssl).
> -compile(export_all).
>
> -define(HOST, "couchdb.staging.one.ubuntu.com").
> % -define(HOST, "www.cia.gov").
>
> test() ->
> Body = iolist_to_binary([
> "GET / HTTP/1.1\r\n",
> "Host: ", ?HOST, "\r\n",
> "Accept: */*\r\n",
> "Connection: close\r\n", "\r\n"
> ]),
> application:start(crypto),
> application:start(public_key),
> application:start(ssl),
> Options = [
> {ssl_imp, new},
> binary,
> {nodelay, true},
> {active, false},
> {verify, verify_none}
> % {verify_fun, fun(_) -> true end},
> ],
> {ok, S} = ssl:connect(?HOST, 443, Options),
> ok = ssl:send(S, Body),
> loop(S),
> ssl:close(S).
>
> loop(S) ->
> ssl:setopts(S, [{active, once}]),
> receive
> {ssl, S, Data} ->
> io:format("received data: ~p~n", [Data]),
> loop(S);
> {ssl_closed, S} ->
> io:format("socket closed", []);
> {ssl_error, S, Error} ->
> io:format("socket error: ~p", [Error])
> end.
>
>
> cheers
>
>
More information about the erlang-bugs
mailing list