wsl環境安裝
參考 wsl(windows subsystem for linux)的安裝與使用
安裝必備的開發環境包
我的ubuntu 開發環境配置
sudo apt-get update
sudo apt-get install build-essential
安裝 libssl-dev
sudo apt-get update sudo apt-install openssl libssl-dev
在windows上安裝clion ide
clion 2018.1.2 支援wsl 環境的開發
部署方式參見官方文件 how to use wsl development environment in clion
新建專案,在cmakelists.txt
中新增
target_link_libraries(certcheck crypto) target_link_libraries(certcheck ssl)
其中certcheck
為可執行檔案的名字
x509是tls/ssl證書的標準,所以在證書的處理中,很多openssl 證書處理的函式的都是以它開頭
維基百科 關於tls/ssl 證書的協議 x.509
#include
#include
#include
#include
#include
#include
bio *certificate_bio = null;
x509 *cert = null;
//initialise openssl
openssl_add_all_algorithms();
err_load_bio_strings();
err_load_crypto_strings();
//create bio object to read certificate
certificate_bio = bio_new(bio_s_file());
//read certificate into bio
if (!(bio_read_filename(certificate_bio, cert_path)))
if (!(cert = pem_read_bio_x509(certificate_bio, null, 0, null)))
其中cert
就是我們在後面處理中證書變數的指標
證書的時間可以讀取到乙個asn1_time
的結構型別中讀取證書時間
asn1_time *notbefore =
x509_get_notbefore
(cert)
;//讀取開始時間
asn1_time *notafter =
x509_get_notafter
(cert)
;//讀取結束時間
與當前時間比較
int day = 0;
int sec = 0;
asn1_time_diff(&day, &sec, notbefore, null);
null表示拿當前時間減notbefore的時間,然後把結果存在day和sec中,如果day和sec有乙個為負數,則表示當前時間小於notbefore
asn1_time_diff(&day, &sec, null, notafter);//那證書的結束時間與當前時間比較
這是乙個用於網域名稱匹配的函式,tls證書的網域名稱是支援萬用字元*的,但是萬用字元只能用於最末一級網域名稱
頒發給 *.example.com, 的證書可以用於下列網域名稱payment.example.com
contact.example.com
login-secure.example.com
www.example.com
由於萬用字元證書只能覆蓋一級子域(*不匹配所有子域),該證書無法有效服務於下面的網域名稱:
test.login.example.com
當裸網域名稱被列入可選dns名稱,該證書也可被用於裸網域名稱(又稱根域)
example.com
某些數字證書認證機構存在例外情況, 例如digicert的wildcard plus證書自動包括了裸域。
引用: wikipedia萬用字元證書
bool check_string(asn1_string *as, const char *s) else
} else
}if (!memcmp((char *) as->data + 1, &s[i], (size_t) as->length - 1)) else
}}
下面是對主題備用名稱進行校驗
gens = x509_get_ext_d2i(cert, nid_subject_alt_name, null, null);
if (gens)
general_names_free(gens);
}
下面是對subject name 欄位的進行校驗
i = -1;
name = x509_get_subject_name(cert);
while ((i = x509_name_get_index_by_nid(name, nid_commonname, i)) >= 0)
bool valid_rsa_size(x509 *cert)
rsa_size = rsa_size(rsa);
if (rsa_size * 8 < rsakey_min_len)
return true;
}
bool valid_extension(x509 *cert, int ext, const char *expect)
bio_flush(bio);
bio_get_mem_ptr(bio, &bptr);
//bptr->data is not null terminated - add null character
buf = (char *) malloc((bptr->length + 1) * sizeof(char));
memcpy(buf, bptr->data, bptr->length);
buf[bptr->length] = '\0';
//can print or parse value
bool rv;
if (!strstr(buf, expect)) else
bio_free_all(bio);
free(buf);
return rv;
}
函式的輸入ext是乙個int常量,參見openssl的文件中 supported extensions
expect 是期待得到的值
openssl是乙個非常強大用於密碼學的庫
openssl x509 開發文件, 學會利用官方文件來解決問題
分析openssl的原始碼,看官方是如何利用庫來解決問題,學習他們的演算法
作者: m2kar
郵箱: m2kar.cn#gmail.com
主頁: m2kar.cn
csdn: m2kar的專欄
Linux下C語言使用openssl庫進行加密
在這裡插一小節加密的吧,使用openssl庫進行加密。使用md5加密 我們以乙個字串為例,新建乙個檔案filename.txt,在檔案內寫入hello 然後在linux下可以使用命令md5sum filename.txt計算md5值 b1946ac92492d2347c6235b4d2611184 ...
c語言gmail基於openssl的簡易程式
本程式基於imap郵件協議 環境比較奇葩,eclipse window 7 cygwin openssl gcc eclipse主要用於編寫 gcc用來編譯 gcc g l c cygwin64 lib o main main.c lssl lcrypto 對返回值未做分析,存在很多不足 gcc g...
Mac下使用GCC開發C語言程式
在mac上開發c語言程式,需要先安裝xcode,之後使用gcc 命令編譯 include int main if a c if b c printf the order of the number is n printf d,d,d n a,b,c 列印排序結果 然後在終端命令視窗敲gcc命令 gc...