openssl验证证书是否由CA证书颁发的问题
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:
- error 2对应
# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2
官方释义:找不到颁发者证书:如果找到不受信任证书的颁发者证书,就会出现这种情况;
- 1 depth
表示出错证书在证书链中深度;
2.拓展
openssl进行验证证书verify时,将会构造证书链,在以下情况停止构造:
- 在受信任证书中找不到颁发者.
- 遇到自签名证书(根证书).
- 遇到最大验证深度.
之前都是利用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证书颁发的问题相关推荐
- CA证书理解?CA证书的作用?
CA证书顾名思义就是由CA(Certification Authority)机构发布的数字证书.要对CA证书完全理解及其作用,首先要理解SSL.SSL(security sockets layer,安 ...
- Centos搭建简单的证书机构,CA证书服务器
CA认证: CA认证,即电子认证服务 [1] ,是指为电子签名相关各方提供真实性.可靠性验证的活动. 证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构.是负责发 ...
- 自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名
自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信 如果你的规划需要创建多个证书,那么使用私有CA ...
- java ca校验服务器证书,添加 CA 签名服务器证书和可信 CA 证书
可以选择使用以下命令验证安装的证书: 列出所有服务器证书,并显示别名和有效日期等信息: msgcert list-certs 在使用 ./msgcert generate-CertDB 生成证书时,M ...
- ca服务器证书cdp过期,CA证书过期,却可以使用(active directory)
1.在代码中利用证书去修改active directory用户的密码.我生成了一个有效期只有一天的证书,功能都正常,可以修改密码.服务器为 windows server 2008 r2 enterpr ...
- 基于openssl工具完成自建CA以及为server,client颁发证书
文章目录 一.openssl简介 1.1 主要构成部分 1.2 openssl用途 1.3 证书.密钥.CSR请求文件.CRL列表 查看命令 二.RSA密钥操作 2.1密钥生成 2.2 转换命令 2. ...
- openssl 自建ca,颁发客户端证书
openssl 自建ca,颁发客户端证书 概念理解 数字证书: 数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而 ...
- OpenSSL自建CA和签发二级CA及颁发SSL证书
自己签发CA证书再签发服务器证书的场景非常简单.把根CA证书导入到浏览器后,就可以信任由这个根CA直接签发的服务器证书. 但是实际上网站使用的证书肯定都不是由根CA直接签发的,比如 像百度这种,网站使 ...
- openSSL命令、PKI、CA、SSL证书原理
相关学习资料 http://baike.baidu.com/view/7615.htm?fr=aladdin http://www.ibm.com/developerworks/cn/security ...
最新文章
- tomcat架构之-----基本概念
- 程序员:除了技术,还有什么更重要?
- 静态网站任何优化怎么设置_网站关键词怎么设置对网站推广优化有利?
- 【BZOJ3083】遥远的国度,树链剖分练习
- Andriod Atom x86模拟器启动报错
- 在安装project2010 64位时提示 “无法安装64位office,因为已有32位版本”解决方法
- 磁盘不足 导致内存 linux,为什么 Linux 需要 Swapping,仅仅是内存不够用?
- linux脚本怎么发送到桌面,如何在Linux上使用Zenity创建简单的图形Shell脚本
- dbeaver设置mysql驱动
- java实训鉴定表_java实习自我鉴定材料定稿(资料4)
- C#批量发送短信操作
- c语言程序设计问号是什么意思,在C语言中,该语句在z=xy?x:y中是什么意思,问号表示什么意思...
- Unity 自带函数 Reset() 的使用
- vue导入音乐_【vlog制作】不经电脑,如何在VUE中导入自定义音乐
- python使用 作为转义符的开始符号_Python使用____作为转义符的开始符号。
- 想和应用宝sig签名谈谈
- 树冠点云投影面积计算(凸包法)
- 两台电脑间USB传输文件
- 基于Android的相关毕业设计和论文
- 题目 1902: [蓝桥杯][算法提高VIP]九宫格
热门文章
- matlab导入word数据,matlab导入word
- 爱上开源之Boot4go-etcdv3-browser之剧透篇
- _weak typeof(self) weakSelf = self;
- 疫情可视化(visualization)
- 狂神说HTML5笔记
- π的值(已算到6086位)
- Hutool做excel的解析
- (四十五:2021.08.05)《利用深度学习对ecg信号进行分割》
- java.sql.SQLException: Access denied for user 'Administrator'@'192.168.5.103' (using password: YES)
- 阿里云服务器如何进行快照备份