error 2 at 1 depth lookup: unable to get issuer certificate

openssl报错如上:


问题描述

(openssl verify -CAfile ca.crt app.crt)
openssl 使用以上命令验证证书是否由CA签发时,报错如上标题,但可确定目标证书app.crt是由ca.crt所签发的;


原因分析:

1.报错解读: error 2 at 1 depth:
  1. error 2对应
# define         X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT            2

官方释义:找不到颁发者证书:如果找到不受信任证书的颁发者证书,就会出现这种情况;

  1. 1 depth
    表示出错证书在证书链中深度;
2.拓展

openssl进行验证证书verify时,将会构造证书链,在以下情况停止构造:

  1. 在受信任证书中找不到颁发者.
  2. 遇到自签名证书(根证书).
  3. 遇到最大验证深度.

之前都是利用openssl自签名证书进行验证,拥有完整证书链,所以可验证通过;我这里导致这个报错原因:ca.crt证书颁发者不在openssl信任列表,且本身不是自签名证书,即没有完整的证书信任链;


解决方案:

1.如果是需命令行验证通过

增加参数 -partial_chain,参数解释:即使不能构建到自签名信任锚的完整链,只要可能构建到可能不是自签名的可信证书的链,也允许验证成功。
即使用命令改为:openssl verify -partial_chain -CAfile ca.crt app.crt

2.如果是代码实现的程序

如果需要使自己实现证书验证接口验证通过,增加flag:X509_V_FLAG_PARTIAL_CHAIN,一行代码:

X509_STORE_set_flags(store, X509_V_FLAG_PARTIAL_CHAIN); //X509_STORE *store


顺便贴出证书验证verify代码实现吧…

static int test_verify_cb(int ok, X509_STORE_CTX *ctx)
{if (!ok){int certError = X509_STORE_CTX_get_error(ctx);int depth = X509_STORE_CTX_get_error_depth(ctx);printf("Error depth %d, certError %d \n", depth, certError);}return(ok);
}// ret > 0 is successful
int my_x509_verify(X509 *cacert, X509 *cert)
{int ret = -1;X509_STORE *store;X509_STORE_CTX *ctx;store = X509_STORE_new();ctx = X509_STORE_CTX_new();if(NULL == store || NULL == ctx){ret = -1;goto end;}X509_STORE_set_flags(store, X509_V_FLAG_PARTIAL_CHAIN);X509_STORE_set_verify_cb(store, test_verify_cb);X509_STORE_add_cert(store, cacert);X509_STORE_CTX_init(ctx, store, cert, NULL);ret = X509_verify_cert(ctx);end:if(ctx){X509_STORE_CTX_cleanup(ctx);X509_STORE_CTX_free(ctx);}if(store)X509_STORE_free(store);return ret;
}

openssl验证证书是否由CA证书颁发的问题相关推荐

  1. CA证书理解?CA证书的作用?

    CA证书顾名思义就是由CA(Certification Authority)机构发布的数字证书.要对CA证书完全理解及其作用,首先要理解SSL.SSL(security sockets layer,安 ...

  2. Centos搭建简单的证书机构,CA证书服务器

    CA认证: CA认证,即电子认证服务 [1]  ,是指为电子签名相关各方提供真实性.可靠性验证的活动. 证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构.是负责发 ...

  3. 自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名

    自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信 如果你的规划需要创建多个证书,那么使用私有CA ...

  4. java ca校验服务器证书,添加 CA 签名服务器证书和可信 CA 证书

    可以选择使用以下命令验证安装的证书: 列出所有服务器证书,并显示别名和有效日期等信息: msgcert list-certs 在使用 ./msgcert generate-CertDB 生成证书时,M ...

  5. ca服务器证书cdp过期,CA证书过期,却可以使用(active directory)

    1.在代码中利用证书去修改active directory用户的密码.我生成了一个有效期只有一天的证书,功能都正常,可以修改密码.服务器为 windows server 2008 r2 enterpr ...

  6. 基于openssl工具完成自建CA以及为server,client颁发证书

    文章目录 一.openssl简介 1.1 主要构成部分 1.2 openssl用途 1.3 证书.密钥.CSR请求文件.CRL列表 查看命令 二.RSA密钥操作 2.1密钥生成 2.2 转换命令 2. ...

  7. openssl 自建ca,颁发客户端证书

    openssl 自建ca,颁发客户端证书 概念理解 数字证书: 数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而 ...

  8. OpenSSL自建CA和签发二级CA及颁发SSL证书

    自己签发CA证书再签发服务器证书的场景非常简单.把根CA证书导入到浏览器后,就可以信任由这个根CA直接签发的服务器证书. 但是实际上网站使用的证书肯定都不是由根CA直接签发的,比如 像百度这种,网站使 ...

  9. openSSL命令、PKI、CA、SSL证书原理

    相关学习资料 http://baike.baidu.com/view/7615.htm?fr=aladdin http://www.ibm.com/developerworks/cn/security ...

最新文章

  1. tomcat架构之-----基本概念
  2. 程序员:除了技术,还有什么更重要?
  3. 静态网站任何优化怎么设置_网站关键词怎么设置对网站推广优化有利?
  4. 【BZOJ3083】遥远的国度,树链剖分练习
  5. Andriod Atom x86模拟器启动报错
  6. 在安装project2010 64位时提示 “无法安装64位office,因为已有32位版本”解决方法
  7. 磁盘不足 导致内存 linux,为什么 Linux 需要 Swapping,仅仅是内存不够用?
  8. linux脚本怎么发送到桌面,如何在Linux上使用Zenity创建简单的图形Shell脚本
  9. dbeaver设置mysql驱动
  10. java实训鉴定表_java实习自我鉴定材料定稿(资料4)
  11. C#批量发送短信操作
  12. c语言程序设计问号是什么意思,在C语言中,该语句在z=xy?x:y中是什么意思,问号表示什么意思...
  13. Unity 自带函数 Reset() 的使用
  14. vue导入音乐_【vlog制作】不经电脑,如何在VUE中导入自定义音乐
  15. python使用 作为转义符的开始符号_Python使用____作为转义符的开始符号。
  16. 想和应用宝sig签名谈谈
  17. 树冠点云投影面积计算(凸包法)
  18. 两台电脑间USB传输文件
  19. 基于Android的相关毕业设计和论文
  20. 题目 1902: [蓝桥杯][算法提高VIP]九宫格

热门文章

  1. matlab导入word数据,matlab导入word
  2. 爱上开源之Boot4go-etcdv3-browser之剧透篇
  3. _weak typeof(self) weakSelf = self;
  4. 疫情可视化(visualization)
  5. 狂神说HTML5笔记
  6. π的值(已算到6086位)
  7. Hutool做excel的解析
  8. (四十五:2021.08.05)《利用深度学习对ecg信号进行分割》
  9. java.sql.SQLException: Access denied for user 'Administrator'@'192.168.5.103' (using password: YES)
  10. 阿里云服务器如何进行快照备份