//這個結構代表了乙個被吊銷的證書
asn1_integer *serialnumber;//證書序列號
asn1_time *revocationdate;//被吊銷的日期
stack_of(x509_extension)/* optional */ *extensions;
int sequence;/* load sequence */
} x509_revoked;
typedef struct x509_crl_info_st
x509_crl_info;
struct x509_crl_st
/* x509_crl */
;在檔案ossl_typ.h中有:
typedef struct x509_crl_st x509_crl;
我們下面要操作的crl就是x509_crl。
1.生成乙個空的crl
呼叫函式x509_crl_new()
eg. x509_crl *crl = x509_crl_new();
2.設定crl中各資訊的值
呼叫函式x509_crl_set_***,其中***可以是version, issuer, lastupdate, nextupdate。
3.給crl簽名
呼叫x509_crl_sign()
eg. x509_crl_sign(crl, pkey, evp_md5());
其中,pkey是乙個evp_pkey型的指標變數。
4.給crl中新增乙個擴充套件項
呼叫函式int x509_crl_add1_ext_i2d(x509_crl *x, int nid, void *value, int crit, unsigned long flags)
這個函式自動為使用者生成乙個x509_extension結構體,定義如下:
typedef struct x509_extension_st
x509_extension;
一般用x509v3_add_default就行了,也就是直接傳0就ok了。
需要注意的是,函式x509_crl_add1_ext_i2d要求傳入的value是乙個asn1_octet_string*型的。開始以為,是void*就可以傳任何型別的指標,結果在函式x509_crl_add1_ext_i2d執行時,會產生段錯誤。
函式x509_crl_add1_ext_i2d呼叫的主要的函式如下圖:
int x509_crl_add1_ext_i2d(x509_crl *x, int nid, void *value, int crit, unsigned long flags)
|(在檔案x509_ext.c中)
|此函式的作用是,把nid, value, crit組合成乙個x509_extension結構,
|通過flags指示的動作加入到x中。
int x509v3_add1_i2d(stack_of(x509_extension) **x, int nid, void *value, int crit, unsigned long flags)
|(在檔案v3_lib.c中)
|此函式的作用是,通過呼叫x509v3_ext_i2d把nid, value, crit組合成乙個x509_extension結構,
|通過flags指示的動作加入到x中。
x509_extension *x509v3_ext_i2d(int ext_nid, int crit, void *ext_struc)
|(在檔案v3_conf.c中)
|此函式的作用是,把傳入的三個引數組合成乙個x509_extension結構,
|這裡的三個引數分別就是nid, crit, value
static x509_extension *do_ext_i2d(x509v3_ext_method *method, int ext_nid, int crit, void *ext_struc)
|(在檔案v3_conf.c中)
|這是乙個內部函式,作用是通過method中的函式,把ext_struc轉換成asn1_octet_string,
|然後呼叫x509_extension_create_by_nid生成乙個x509_extension
x509_extension *x509_extension_create_by_nid(x509_extension **ex, int nid, int crit, asn1_octet_string *data)
|(在檔案x509_v3.c中)
|此函式的作用是,把nid轉換成asn1_object,
|並通過呼叫x509_extension_create_by_obj生成乙個x509_extension
x509_extension *x509_extension_create_by_obj(x509_extension **ex, asn1_object *obj, int crit, asn1_octet_string *data)
(在檔案x509_v3.c中)
此函式的作用是,通過呼叫x509_extension_new, x509_extension_set_object,
x509_extension_set_critical, x509_extension_set_data生成乙個x509_extension
5.將crl存入pem格式檔案
呼叫函式pem_write_x509_crl()
eg. pem_write_x509_crl(fp, crl);
這個函式是把crl以pem格式存入檔案的。
6.從pem格式檔案中讀取crl
呼叫函式pem_read_x509_crl()
eg. pem_read_x509_crl(fp, crl, null, null);
其中,crl是乙個指向x509_crl的指標的指標。
OpenSSL學習筆記 簡介
openssl 是乙個主要用於transport layer security tls 和 secure sockets layer ssl 協議的穩定 可商用 全功能的工具箱。openssl也是乙個強大通用的安全套接字層加密庫,用於網路上以及計算機之間的加密通訊協議等,同時它還是乙個多用途的 跨平...
OpenSSL學習筆記 記憶體分配
申請記憶體的執行緒號 const char file 申請記憶體的檔名 int line 申請記憶體的行號 tail of thread s stack int references 被引用的次數 這個結構體是用來記錄使用者申請的記憶體資訊的。typedef struct mem st mem 這個...
linux 學習筆記 openssl公升級
mv usr bin openssl usr bin openssl.old 將之前的備份 mv usr include openssl usr include openssl.old ln s usr local ssl bin openssl usr bin openssl 軟鏈結 ln s u...