Openssl學習 x509證書函式

2021-10-08 11:15:43 字數 4228 閱讀 4369

目前x.509有不同的版本,但是每個版本都包含了這些資訊:

1.version——x509的版本號

2.serial number——證書序列號

3.signature algorithm——簽名所使用的演算法,就是指的這個數字證書的對指紋進行簽名時所使用的加密演算法,這樣就可以使用證書發布機構的證書裡面的公鑰,根據這個演算法對簽名進行解密。指紋(也叫hash值)摘要後再用私鑰加密結果就是數字簽名。

4.signature hash algorithm——簽名雜湊演算法

5.issuer—— 證書的發布機構,指出是什麼機構發布的這個證書,也就是指明這個證書是哪個公司建立的(只是建立證書,不是指證書的使用者)。

6.valid from , valid to——證書的有效期,也就是證書的有效時間,或者說證書的使用期限。 過了有效期限,證書就會作廢,不能使用了。

7.subject(主題)——這個證書是發布給誰的,或者說證書的所有者,一般是某個人或者某個公司名稱、機構的名稱、公司**的**等。

其實就是我們在之前進行證書填寫時的必要資訊。

8.public key(公鑰)——這個我們在前面介紹公鑰密碼體制時介紹過,公鑰是用來對訊息進行加密的。

9.thumbprint, thumbprint algorithm(指紋以及指紋演算法)——這個是用來保證證書的完整性的,也就是說確保證書沒有被修改過。 其原理就是在發布證書時,發布者根據摘要演算法(乙個hash演算法)計算整個證書的hash值(也叫指紋)並用私鑰加密後成為簽名和證書放在一起,使用者在開啟證書時,先用公鑰解密簽名,獲得指紋,然後自己根據摘要演算法計算一下證書的hash值(指紋),如果和附帶的指紋對的上,就說明證書沒有被修改過,因為證書的內容被修改後,根據證書的內容計算的出的hash值(指紋)是會變化的。

獲得乙份x.509證書,必須請求ca發給你證書。使用者提供自己的公鑰,並提供有關自己的某些特定資訊。然後在這些資訊上用私鑰做數字簽名,並將整個資料報(稱為證書請求)發給ca。ca做一些努力來驗證使用者提供的資訊是正確的,然後就生成證書並返回給使用者。

1、 der編碼轉換為內部結構函式

x509 *

d2i_x509

(x509 *

*cert,

unsigned

char

**d,

int len)

;

函式功能:把乙個der編碼的證書資料轉化成openssl內部結構體。

引數:cert:[out]x509結構體。 d:[in]der編碼的證書資料指標位址。len證書資料長度;

返回值:編碼後的x509結構體資料

2、 獲得證書版本函式x509_get_version

#define x509_get_version(x)  asn1_integer_get((x)->cert_info->version)
引數:x:[in]x509*結構體資料結構。

返回值:證書版本,資料型別「long」

3、 獲得證書序列號函式

asn1_integer *

x509_get_serialnumber

(x509 *x)

;

返回值:證書序列號,資料型別「asn1_integer」.

4、 獲得證書頒發者資訊函式

x509_name *

x509_get_issuer_name

(x509 *a)

;

注*:x509_name結構體包括多個x509_name_entry結構體。x509_name_entry儲存了頒發者的資訊,這些資訊包括物件和值(object 和value)。物件的型別包括國家、通用名、單位、組織、地區、郵件等。

5、 獲得證書擁有者資訊函式

x509_name *

x509_get_subject_name

(x509 *a)

;

該函式設定證書請求人的主題名,x509_name *name引數就是要設定的主題名。

6、 獲得證書有效期的起始日期函式

#define x509_get_notbefore(x)        ((x)->cert_info->validity->notbefore)
返回值:證書起始有效期,資料型別「asn1_time」

7、 獲得證書有效期的終止日期函式

#define x509_get_notafter(x)           ((x)->cert_info->validity->notafter)
8、 獲得證書公鑰函式

evp_pkey *

x509_get_pubkey

(x509 *x)

;

9、 建立和釋放證書儲存區

x509_store *

x509_store_new

(void);

void x509_store_free

(x509_store *v)

;

函式功能:建立和釋放乙個x509_store結構體,主要用於驗證證書。

10、向證書儲存區新增證書

int x509_store_add_cert

(x509_store *ctx, x509 *x)

;

函式功能:新增信任的根證書到證書儲存區。

返回值:1成功,否則為0

11、向證書儲存區新增證書吊銷列表

int x509_store_add_crl

(x509_store *ctx, x509_crl *x)

;

功能:新增crl到證書儲存區。

引數:x:證書吊銷列表。ctx:證書儲存區。

返回值:1成功,否則為0。

12、建立證書儲存區上下文環境函式

x509_store_ctx *

x509_store_ctx_new

(void

);

返回值:操作成功返回證書儲存區上下文環境指標,否則返回null。

13、釋放證書儲存區上下文環境

void x509_store_ctx_free

(x509_store_ctx *ctx)

;

14、初始化證書儲存區上下文環境函式

int x509_store_ctx_init

(x509_store_ctx *ctx, x509_store *store, x509 *x509,

stack_of

(x509)

*chain)

;

函式功能:初始化證書儲存區上下文環境,設定根證書、待驗證的證書、ca證書鏈。

15、驗證證書函式

int x509_verify_cert

(x509_store_ctx *ctx)

;

返回值:驗證成功返回1,否則返回0

16.x509_req* x509_req_dup(x509_req *req);

複製乙份x509_req結構。它是巨集定義,實際上是由asn1_dup函式來完成複製工作。

17.x509_req_sign(x509_req *x, evp_pkey *pkey, constevp_md *md);

對x509_req中x509_req_info結構用pkey與md進行簽名,並用演算法標識與簽名值填充x509_req中的sig_alg與signature域。

成功返回位元組數,失敗返回0.

18.x509_req_verify(x509_req *a, evp_pkey *r);

與簽名相對應,對簽名進行驗證,所以將公鑰pkey傳入就可以了。

參考:1.

2.

X 509證書校驗

x.509證書校驗 這裡討論openssl 中如何應用 crls 和來自證書體系的其他證書來進行證書校驗。為此需要使用 x.509 包的功能函式。ssl協議實現已經處理了很多這裡將要討論的東西,即使如此,一些工作還是需要我們親歷親為,特別是當我們希望在證書校驗過程中使用 crls 的校驗,大部分情況...

x509證書驗證

x509 verify cert函式負責用來驗證證書的有效性,函式原型如下 int x509 verify cert x509 store ctx ctx 驗證成功返回1,失敗返回其他值,失敗的原因可以通過 long ncode x509 store ctx get error ctx const ...

如何使用X 509證書

簡介 在怎樣把x.509證書部署到生產系統之前,你需要了解ssl tsl協議中所支援的認證場景的區別。你部署證書的方式取決於 你選擇的是哪種認證場景。單向認證 在單向認證場景中,伺服器在ssl握手期間會將自己的證書分發給客戶端,以便客戶端能據此驗證目標身份。所以在 此情景下,伺服器相對於客戶端是認證...