背景:

im6ull的电路板做完了,驱动也都调试好了,但是新板子连接客户服务器的时候经常报ca认证失败的错误,之前没有这方面的经历,这次遇到这个问题,好好解决一下。

相关知识点:

我的板子linux系统应该是已经安装了ca-certificates,这是用来管理ssl证书的一个软件,为了确认这一点,我运行了一下sudo update-ca-certificates命令,运行正常,最起码命令是有的,其他的就看看如何手动添加客户的证书了。


上面的连接告诉我几个关键路径,我运行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,大功告成!