> I think the sslcertmode=disable option that I introduced in [1] solves > this issue too; would it work for your case? That whole patchset is > meant to tackle the general case of the problem you've described. > > (Eventually I'd like to teach the server not to ask for a client > certificate if it's not going to use it.)
there is an option in pg_hba.conf on the server side called "clientcert" that can be specified besides the auth method that controls if certain client connections are required to send client certificate for additional verification. The value of "clientcert" can be "verify-ca" or "verify-full". For example:
hostssl all all 127.0.0.1/32 md5 clientcert=verify-full
If clientcert is not requested by the server, but yet the client still sends the certificate, the server will still verify it. This is the case in this discussion.
I agree that it is a more elegant approach to add "sslcertmode=disable" on the client side to prevent sending default certificate.
But, if the server does request clientcert but client uses "sslcertmode=disable" to connect and not give a certificate, it would also result in authentication failure. In this case, we actually would want to ignore "sslcertmode=disable" and send default certificates if found.
It would perhaps to better change the parameter to "defaultclientcert=on-demand" on the client side that will:
1. not send the existing default certificate if server does not request a certificate 2. send the existing default certificate if server does request a certificate while the client does not use "sslcert" parameter to specify another non-default certificate
I put "default" in the parameter name to indicate that it only applies to default certificate. If user specifies a non-default certificate using "sslcert" parameter, "defaultclientcert" should not be used and client should give error if both exists.
Cary Huang -------------------------------- HighGo Software Canada www.highgo.ca