以下是我在erlang中使用epgsql
连接到postgres实例的方法:
epgsql:connect("example.com",
"user",
"secret",
[{database, "whatever",
{ssl, true},
{cacertfile, "cacert.crt"},
{certfile, "user.crt"},
{keyfile, "user.nopassword.key"},
{verify, verify_peer},
{fail_if_no_peer_cert, true}
])
我无法像sslmode=verify-full
一样在python中设置psycorg2
:
psycopg2.connect("host=example.com
user=user
dbname=whatever
sslrootcert=cacert.crt
sslcert=user.crt
sslkey=user.nopassword.key
sslmode=verify-full")
在这两种情况下一切正常,但我有两个问题:
{verify, verify_peer}
选项中的epgsql
是否等同于sslmode=verify-ca
?sslmode=verify-full
?为什么我认为对第一个问题的回答是肯定的:
http://www.erlang.org/doc/man/ssl.html,section" ssl选项说明 - 对于服务器和客户端来说很常见":
在verify_peer模式下的默认选项verify_fun:
{fun(_,{bad_cert, _} = Reason, _) ->
{fail, Reason};
(_,{extension, _}, UserState) ->
{unknown, UserState};
(_, valid, UserState) ->
{valid, UserState};
(_, valid_peer, UserState) ->
{valid, UserState}
end, []}
如果错误为{bad_cert, unknown_ca}
,则会失败。