GB35114---SM3withSM2证书生成及读取(二)
生活随笔
收集整理的這篇文章主要介紹了
GB35114---SM3withSM2证书生成及读取(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
接上篇
GB35114---SM3withSM2證書生成及讀取(一)
作為相機,我們需要讀取設備端(自己)的私鑰:
? ? ? ? 1、對random2+random1+sip服務器id做數字簽名;
? ? ? ? 2、對cryptkey進行解密得到VKEK;
? ? ? ? 3、對METHOD+From+to+CallID+Date+VKEK+消息體進行散列運算。
以及服務端的公鑰:
? ? ? ? ?1、校驗sign2簽名結果;
現在我們用openssl庫來處理。
來看看我這邊的代碼
int gb35114_module_init() {X509 *x = NULL;EVP_PKEY *pkey = NULL;BIO *priio = NULL;EC_KEY *prikey = NULL;do{auth = malloc(GB_AUTH_T_LEN);if(NULL == auth){return 0;}memset(auth,0,GB_AUTH_T_LEN);x = load_cert(GB35114_SERCER_FILE, FORMAT_PEM, "Certificate");if(NULL == x){DBG_WARN("load cert ERR\n");break;}//read cer pubkeypkey = X509_get_pubkey(x);if(NULL == pkey){DBG_WARN("get_pubkey ERR\n");break;}auth->key.ec_skey = (EC_KEY *)pkey->pkey.ec;/* 證書驗簽暫時不做,未完成 bob 20191219if(!gb35114_verf_sercers(x)){break;}*///read dev prikeypriio = BIO_new_file(GB35114_PRIV_KEY, "rb");if( NULL == priio){DBG_ERR("open private key file err\n");break;}prikey = PEM_read_bio_ECPrivateKey(priio, &prikey, NULL, NULL);if( NULL == prikey){DBG_ERR("read private key file err\n");break;}auth->key.ec_dkey = prikey;auth->init_flag = 1;gb35114_load_conf();DBG_INFO("35114 module init\n");}while(0);if(1 != auth->init_flag){DBG_ERR("35114 module init fail\n");}//增加eckey不釋放數據 bob//X509_free(x);//BIO_free(priio);//EC_KEY_free(prikey);return 1; }openssl提供了
PEM_read_bio_ECPrivateKey函數來讀取私鑰文件;
通過
X509 *load_cert(const char *file, int format, const char *cert_descrip);
EVP_PKEY *X509_get_pubkey(X509 *x);
函數來獲取證書中的公鑰。
另注:gb35114的證書的交換是通過與認證機構進行物理交換所完成的。跟ssl認證不一樣。
有錯誤請留言,謝謝。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??bob? 2020-03-24
總結
以上是生活随笔為你收集整理的GB35114---SM3withSM2证书生成及读取(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 世界货币符号大全
- 下一篇: 格兰因果模型可以分析哪些东西_论文实证经