OpenSSL证书错误

OpenSSL证书错误,openssl,ssl-certificate,Openssl,Ssl Certificate,我正在用OpenSSL库编写一个程序,以建立SSL POP连接 使用其他服务器(如Gmail)。为此,我生成了一个自签名证书 使用OpenSSL并对其进行了验证 ./openssl verify -CAfile /home/melluru/openssl/ssl/certs/cert.pem /home/melluru/openssl/ssl/certs/cert.pem >/home/melluru/openssl/ssl/certs/cert.pem: OK O

我正在用OpenSSL库编写一个程序,以建立SSL POP连接 使用其他服务器(如Gmail)。为此,我生成了一个自签名证书 使用OpenSSL并对其进行了验证

./openssl verify -CAfile /home/melluru/openssl/ssl/certs/cert.pem
           /home/melluru/openssl/ssl/certs/cert.pem
>/home/melluru/openssl/ssl/certs/cert.pem: OK
OpenSSL工具的验证选项给出“OK”结果。但是当我用下面的 我的程序加载证书并验证结果,我得到了错误

/**添加证书文件**/
如果(!(SSL)CTX使用证书文件(CTX,“/home/melluru/openssl/SSL/certs/cert.pem”,
SSL(文件类型(PEM)))
printf(“无法读取证书文件”);
/**添加私钥的步骤***/
如果(!(SSL)CTX使用私钥文件(CTX,“/home/melluru/openssl/SSL/certs/cert.pem”,
SSL(文件类型(PEM)))
printf(“无法读取密钥文件”);
/**要添加受信任的证书**/
如果(SSL)加载验证位置(CTX,“/home/melluru/openssl/SSL/certs/cert.pem”,
空)!=1){
printf(“加载信任证书失败\n”);
SSL_-CTX_-free(CTX);
返回0;
}
/***连接到gmail服务器的BIO代码*****/
printf(“ssl验证错误为%d\n”,ssl获取验证结果(ssl));
我收到错误20
X509\u V\u ERR\u无法在本地获取颁发者证书


有人能帮忙吗?还有什么需要添加的吗?

由于您的证书是自签名的,您可以使用它来检查其签名,就像您使用
openssl verify
命令行所做的那样

但是,当您尝试建立SSL连接时,要验证的不是您的证书,而是从服务器(或客户端)接收的证书

SSL\u CTX\u load\u verify\u locations
行中,您必须指向您信任的证书链。正是这个链将根据您通过握手协议接收的证书进行检查

我从未使用过您描述的那种环境,但您说您想连接到gmail,因此必须是gmail的证书链,位于
SSL\u CTX\u load\u verify\u位置

这就是为什么您会收到错误“X509\u V\u ERR\u无法在本地获取颁发者证书”。OpenSSL无法在本地找到您正在接收的证书的颁发者证书(在您通过方法
SSL\u CTX\u load\u verify\u locations
放置的链中)