车机证书更新流程

一. 准备知识

非对称加密的数据,加解密的流程是这样的:
公钥 + 原文 = 密文  ->  密文 + 私钥 = 原文
私钥 + 原文 = 密文  ->  密文 + 公钥 = 原文
常见的对称加密方式有AES,RC4,RC5,RC6和DES等
常见的非对称加密方式有RSA,ECC(椭圆加密)和DSA

权威机构会将自己的公钥提供给社会大众,目的就是可以验证某个证书是否是经过该机构认证过的(加密过的),如果证书可以使用该机构的公钥解密出来数据,说明这个证书是可信任的。

SSL/TLS的主要作用有三个:
A. 加密通信: 提供加密算法用于对通信数据进行加解密
B. 身份验证: 确认通信双方的身份是否合法(通过交换证书来验证)
C. 完整性: 发送数据同时对数据进行签名(对发送数据做HASH处理,生成摘要,然后使用私钥对摘要做加密),接收方收到数据后同样对数据做一次hash,生成摘要,然后使用发送方的公钥解密签名数据获取摘要,两个摘要相同才说明数据没有被中间方修改过。

x509是一种标准,是公钥证书(包含了身份信息和公钥)的格式标准

二. 证书更新流程

        一般8155上面,证书都是存放在QNX侧的TEE环境中,更新是需要QNX上的相关应用来执行的,流程如下:

QNX:
1.检查证书的有效期
1.1 QNX上有一个TEE的守护进程(nio_qseecom_service)用于和TEE环境内的应用做通信,证书一般存放在TEE环境中。
1.2 QNX上的其他进程想要和TEE环境交互,例如获取或者安装证书,就需要和TEE的守护进程(nio_qseecom_service)交互,方式为UNIX DOMAIN SOCKET
1.3 通过REQUEST/RESPONSE的方式从TEE获取到证书和公钥,TEE中存放的公钥的格式一般是DER的(二进制),而不是PEM(文本),需要使用SSL的d2p_PKCS8PrivateKey函数进行转换
1.4 通TEE返回的证书文件中获取有效期(BIO_new_mem_buf -> PEM_read_bio_X509 -> X509_get_notBefore/X509_get_notAfter -> X509_free

2.如果证书有效期不到半年了,那么可以启动证书更新,向云端申请新的证书
2.1 向云端申请新的证书一般通过HTTPS POST的方式,同时,url中的格式一般带有车辆的认证信息,例如VID,还有时间戳等,具体需要云端平台给出规格说明
2.2 HTTPS通信需要提供公钥,然后在HTTP的BODY中提供当前的证书,云端返回的RESPONSE中带有更新后的(主要是更新了证书有效期)证书

   CURL* curl;
   struct curl_slist *headers;  // 字符串链表,每个字符串元素作为HTTP REQUEST HEADER中的一行
   curl_slist_append  // 通过该函数将headers中的内容添加到REQUEST HEADER中
   curl_global_init
   curl_easy_init(curl)
   curl_easy_setopt
        CURLOPT_URL                   // HTTPS通信的url
        CURLOPT_POST                  // 表示是否使用HTTP POST Method  1:使用Post 0:不适用Post
        CURLOPT_POSTFIELDS            // HTTPS POST BODY字符串
        CURLOPT_WRITEFUNCTION         // 用于处理HTTPS RESPONSE的回调函数
        CURLOPT_WRITEDATA             // 保存用于存放HTTPS RESPONSE的字符串
        CURLOPT_HTTPHEADER            // HTTPS REQUEST HEADERS
        CURLOPT_SSLVERSION            // SSL版本
        CURLOPT_SSLCERTTYPE           // 证书的编码格式 PEM/DER
        CURLOPT_SSLKEYTYPE            // 公钥的编码格式 PEM/DER
        CURLOPT_SSL_VERIFYPEER        // 用于控制客户端是否验证服务器的SSL证书 0:不验证  1:验证
        CURLOPT_CAINFO                // CA证书的路径,CA证书用于验证服务器的SSL证书
        CURLOPT_CAPATH                // 功能类似CURLOPT_CAINFO,但是可以提供多个CA证书        
          
     struct ssl_auth auth;                // 携带客户端证书和公钥
     auth.cert                            // 客户端证书内容
     auth.key                             // 客户端公钥内容
     auth.trust_chain                     // 客户端证书信任链
     auth.cert_len                        // 客户端证书大小
     auth.key_len                         // 客户端公钥大小
          
         CURLOPT_SSL_CTX_FUNCTION // 回调函数,ssl户将上面的ssl_auth结构体传给该函数,该函数中作如下工作:
             1. 通过BIO_new_mem_buf,PEM_read_bio_X509,PEM_read_bio_PrivateKey解析出证书和公钥中的内容
             2. SSL_CTX_use_certificate 设置客户端证书
             3. SSL_CTX_use_PrivateKey  设置客户端公钥
             4. SSL_CTX_load_verify_locations  CA提供的证书信任链文件路径
         CURLOPT_SSL_CTX_DATA     // 验证使用到的公钥和证书,就是上面的ssl_auth类型的结构体


2.3 收到更新的证书后,需要和TEE的守护进程(nio_qseecom_service)打交道,把新的证书安装到TEE环境中。

3 通过HTTPS向云端返回安装新证书的结果,和上面下载的步骤类似,参数不同而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值