自编译的OpenSSL包在CentOS 7上出现证书错误 我在CITOS/ReHAT 7.7环境下开发了一个C++ HTTP/HTTPS客户端应用程序,该操作系统附带了代码> OpenSSL 1.0.2K-FIPS。但我的应用程序至少需要openssl1.1.1。因此,我从源代码编译了OpenSSL 1.1.1f
我的编译配置自编译的OpenSSL包在CentOS 7上出现证书错误 我在CITOS/ReHAT 7.7环境下开发了一个C++ HTTP/HTTPS客户端应用程序,该操作系统附带了代码> OpenSSL 1.0.2K-FIPS。但我的应用程序至少需要openssl1.1.1。因此,我从源代码编译了OpenSSL 1.1.1f,c++,ssl,https,openssl,client,C++,Ssl,Https,Openssl,Client,我的编译配置 ./Configure linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 --prefix=/usr/local --openssldir=/usr/local 问题从这里开始 我使用新的OpenSSL结果发出的任何请求都使用验证返回代码:20(无法获取本地颁发者证书)。我花了一些时间切换HTTP客户端C++,这是一个非常累人的过程,只发现问题是OpenSSL本身。 经过长时间的研究,我目前使用
./Configure linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 --prefix=/usr/local --openssldir=/usr/local
问题从这里开始
我使用新的OpenSSL结果发出的任何请求都使用验证返回代码:20(无法获取本地颁发者证书)
。我花了一些时间切换HTTP客户端C++,这是一个非常累人的过程,只发现问题是OpenSSL本身。
经过长时间的研究,我目前使用的HTTP客户端在其repo中共享了一个ca包。把它纳入我的项目解决了这个问题
或者使用命令行
openssl s_client -connect example.com:443 -CAfile ./ca-bundle.crt
这一切似乎都很荒谬,在我开发HTTP客户端的经验中,我以前从未做过类似的事情。因此,我的问题是:
- 这是CentOS 7的问题吗
- 我在编译OpenSSL时出错了吗?(随后)
命令行设置证书路径(“/etc/ssl/certs/ca bundle.crt”)
也可以工作(我花了很长时间才意识到),但我以前从未手动执行过,因此请原谅我的无知
谢谢你抽出时间
编辑:借助一些代码
const char* dir = getenv(X509_get_default_cert_dir_env());
if (!dir)
dir = X509_get_default_cert_dir();
cout << dir << endl;
const char*dir=getenv(X509_get_default_cert_dir_env());
如果(!dir)
dir=X509_get_default_cert_dir();
库特1。二号。很可能。@SamVarshavchik我共享了我的编译脚本,这是一个简短的脚本。你能告诉我哪里出了错吗?关于stackoverflow的所有问题都必须包括问题本身的所有相关信息。外部链接可以随时停止工作,使问题变得毫无意义。我确信openssl的配置脚本必须能够指定证书包的路径。我必须查一下,但这应该只是正确设置的问题。@SamVarshavchik谢谢你的输入,我共享的链接与问题的陈述并不完全相关。它只是表示我使用了一个外部ca包文件。至于汇编问题,我看了一遍,但没有提到这一点。我花了很长时间才弄明白这个问题。现在我只想找到一种通用的方法来防止这个问题,这似乎是关于在我的应用程序中添加相关代码,而不是篡改OpenSSL。有帮助吗?
const char* dir = getenv(X509_get_default_cert_dir_env());
if (!dir)
dir = X509_get_default_cert_dir();
cout << dir << endl;