SSL 2way C 程序失败,curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正确

如何解决SSL 2way C 程序失败,curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正确

我正在尝试使用我的 apache 服务器进行 2way ssl。在 apache 服务器配置中,我启用了客户端认证验证。 我创建了自 CA 并通过 OpenSSL 1.0.2k-fips 签署了服务器和客户端证书,

这是我的客户端程序,我使用 curl 7.68,并通过 commnad 构建 exe

gcc client.c -o client -lcurl

对于 -lcurl

我设置了我的 libcurl 二进制文件所在目录的路径

export LD_LIBRARY_PATH=<path of exec dir>

客户端.c

#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
  CURL *curl;
  CURLcode res;
  FILE *headerfile;
  const char *pPassphrase = "1234";
  static const char *pCertFile = "/scratch/amitcck/ssl/CA/client.crt";
  static const char *pCACertFile = "/scratch/amitcck/ssl/CA/ca.cert.pem";
  static const char *pHeaderFile = "/scartch/amitcck/curl_libs/dumpit.txt";
  const char *pKeyName;
  const char *pKeyType;
  const char *pEngine;
#ifdef USE_ENGINE
  pKeyName  = "rsa_test";
  pKeyType  = "ENG";
  pEngine   = "chil";            /* for nChiper HSM... */
#else
  pKeyName  = "/scratch/amitcck/ssl/CA/client.key";
  pKeyType  = "PEM";
  pEngine   = NULL;
#endif
  headerfile = fopen(pHeaderFile,"wb");
  curl_global_init(CURL_GLOBAL_DEFAULT);
  curl = curl_easy_init();
  if(curl) {
    /* what call to write: */
    curl_easy_setopt(curl,CURLOPT_URL,"https://localhost:8051/");
    curl_easy_setopt(curl,CURLOPT_HEADERDATA,headerfile);
    do { /* dummy loop,just to break out from */
      if(pEngine) {
        /* use crypto engine */
        if(curl_easy_setopt(curl,CURLOPT_SSLENGINE,pEngine) != CURLE_OK) {
          /* load the crypto engine */
          fprintf(stderr,"can't set crypto engine \n");
          break;
        }
        if(curl_easy_setopt(curl,CURLOPT_SSLENGINE_DEFAULT,1L) != CURLE_OK) {
          /* set the crypto engine as default */
          /* only needed for the first time you load
             a engine in a curl object... */
          fprintf(stderr,"can't set crypto engine as default \n");
          break;
        }
      }
      /* cert is stored PEM coded in file... */
      /* since PEM is default,we needn't set it for PEM */
      if(curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM")!=CURLE_OK){
         fprintf(stderr,"PEM wrong \n");
      }
      /* set the cert for client authentication */
      if(curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile)!=CURLE_OK)
      {
         fprintf(stderr,"CRT wrong \n");
      }
      /* sorry,for engine we must set the passphrase
         (if the key has one...) */
      if(pPassphrase)
        if(curl_easy_setopt(curl,CURLOPT_KEYPASSWD,pPassphrase)!=CURLE_OK){
     fprintf(stderr,"passphrase WRONG \n");
}
      /* if we use a key stored in a crypto engine,we must set the key type to "ENG" */
      if(curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,pKeyType)!=CURLE_OK){
         fprintf(stderr,"Type WRONG\n");
      }
      /* set the private key (file or ID in engine) */
      if(curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName)!=CURLE_OK){
         fprintf(stderr,"SSL key wrong\n");
      }
      /* set the file with the certs vaildating the server */
      if(curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile)!=CURLE_OK){
        fprintf(stderr,"Fine\n");
      }
      /* disconnect if we can't validate server's cert */
      if(curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1L)!=CURLE_OK){
       fprintf(stderr,"Not Connected \n");
   }
      /* Perform the request,res will get the return code */
      res = curl_easy_perform(curl);
      /* Check for errors */
      if(res != CURLE_OK)
        fprintf(stderr,"curl_easy_perform() failed: %s\n",curl_easy_strerror(res));
      /* we are done... */
    } while(0);
    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  curl_global_cleanup();
  return 0;
}

我的程序因以下错误而失败,

curl_easy_perform() failed: SSL peer certificate or SSH remote key was not OK

当我尝试通过导入 client.p12 文件从 Web 浏览器进行 CA 验证时,该网站在 https 下工作正常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res