Certificates I get at $work come four layers deep:
Self-signed CA cert from "WE ISSUE TO EVERYBODY.COM" Intermediate from "WE ISSUE TO LOTS OF FOLKS.COM" Intermediate from "WE ISSUE TO ORGS LIKE YOURS.COM" End-entity cert for my server. Until today, we had the topmost, self-signed cert in root.crt and stuff worked. But I needed to renew, and it seems that recently WE ISSUE TO ORGS LIKE YOURS has chosen somebody else to sign their certs, so I have new certs for the issuers above them, so I have to go deal with root.crt. And that got me thinking: do I really want WE ISSUE TO EVERYBODY to be what I'm calling trusted in root.crt? I considered just putting the end-entity cert for my server in there, but it's only good for a couple years, and I'd rather not have to fuss with editing and distributing root.crt that often. As a compromise, I tried putting the WE ISSUE TO ORGS LIKE YOURS cert there. I think I'm willing to accept that much risk. But psql says: psql: SSL error: certificate verify failed I would be happy if it gave a little more detail. Is it failing verification because the cert I put in root.crt is *not* self-signed, and I didn't include the two issuers above it? Does that mean it also would fail if I directly put the server's end-entity cert there? Would I have to put all three of WE ISSUE TO ORGS LIKE YOURS, WE ISSUE TO LOTS, and WE ISSUE TO EVERYBODY in the root.crt file in order for verification to succeed? If I did that, would the effect be any different from simply putting WE ISSUE TO EVERYBODY there, as before? Would it then happily accept a cert with a chain that ended at WE ISSUE TO EVERYBODY via some other path? Is there a way I can accomplish trusting only certs issued by WE ISSUE TO ORGS LIKE YOURS? I never noticed how thin the docs or verify-failure messages were on this topic until just now. Are there any options, openssl environment variables, or the like, to get it to be a little more forthcoming about what it expects? Regards, -Chap