OpenSSL學習筆記 CRL

2021-05-22 09:50:09 字數 3272 閱讀 1057

//這個結構代表了乙個被吊銷的證書

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...