背景:
im6ull的电路板做完了,驱动也都调试好了,但是新板子连接客户服务器的时候经常报ca认证失败的错误,之前没有这方面的经历,这次遇到这个问题,好好解决一下。
相关知识点:
我的板子linux系统应该是已经安装了ca-certificates,这是用来管理ssl证书的一个软件,为了确认这一点,我运行了一下sudo update-ca-certificates命令,运行正常,最起码命令是有的,其他的就看看如何手动添加客户的证书了。
https://blog.csdn.net/velanjun/article/details/77980335
上面的连接告诉我几个关键路径,我运行update-ca-certificates命令的时候,实际调用的配置文件是/etc/ca-certificates.conf,这个文件很重要,里面全是crt证书的路径,遗憾的是,我有这个文件,但里面的证书文件和路径都不存在,所以运行了也是一堆找不到文件的提示。
解决过程:
1、创建相关目录
创建/usr/share/ca-certificates/mozilla目录,这个目录是crt文件保存的目录,你也可以在ca-certificates文件夹里创建其他目录,这里的mozilla目录是我的/etc/ca-certificates.conf写的,里面所有crt文件都指向这个目录,我就不改了,怕改了之后驾驭不了。
下面是/etc/ca-certificates.conf开头的一点内容,里面写了这些路径是干啥的,印证了上面连接说的内容是真实的。让我难过的是,我的电路板内存空间十分有限,毕竟是嵌入式的产品,成本很重要,所以,dpkg我是真的没办法安装了,手动是我唯一的出路。
# This file lists certificates that you wish to use or to ignore to be
# installed in /etc/ssl/certs.
# update-ca-certificates(8) will update /etc/ssl/certs by reading this file.
#
# This is autogenerated by dpkg-reconfigure ca-certificates.
# Certificates should be installed under /usr/share/ca-certificates
# and files with extension '.crt' is recognized as available certs.
#
# line begins with # is comment.
# line begins with ! is certificate filename to be deselected.
#
mozilla/ACCVRAIZ1.crt
mozilla/AC_RAIZ_FNMT-RCM.crt
mozilla/Actalis_Authentication_Root_CA.crt
mozilla/AffirmTrust_Commercial.crt
mozilla/AffirmTrust_Networking.crt
mozilla/AffirmTrust_Premium.crt
mozilla/AffirmTrust_Premium_ECC.crt
2、添加证书文件
先去虚拟机的/usr/share/ca-certificates/mozilla目录,一顿劫掠,咔咔打包,全复制到电路板上,添加进去,mozilla是个基金会,Firforx就是他们做的,有兴趣可以了解一下。
有上面证书还不够,要把客户的证书文件也要来,客户给我的是个.pem的文件,改为.crt,然后也复制进去。
3、修改配置文件
/etc/ca-certificates.conf文件里要增加客户的crt文件,在最后一行添加一句:
mozilla/xxx.crt
4、再次更新
配置文件都修改好了,再次更新一下证书。
sudo update-ca-certificates
这个命令会从/etc/ca-certificates.conf读取配置,然后到/etc/ssl/certs/目录下生成.pem文件,并且更新/etc/ssl/certs/ca-cetificates.crt文件,这样就安装好证书了。
5、测试
实际测试结果还是不行呀!
curl https://www.baidu.com,这个没问题,但是换成客户的https连接就报错。
折腾了大半天,原来是忘记更新系统时间了,系统时间不同步,ca证书校验也会出错。
ntpdate time.ntp.org
用上面的命令更新一下系统时间,再次curl,大功告成!
最后,还有个解释挺详细的博文,分享一下: