參考文章:
ssl_library_init ssl庫的初始化
openssl_add_all_algorithms 載入所有的ssl演算法
ssl_load_error_strings() 載入所有ssl錯誤訊息
ssl_ctx_new() 產生乙個ssl ctx
ssl_ctx_use_certificate_file 載入使用者的數字證書
int
ssl_library_init
(void
)
void
ssl_load_error_strings
(void
);
函式作用:載入所有libssl中的錯誤**的string
x509 *
ssl_get_peer_certificate
(const ssl *ssl)
;
x509_name *
x509_get_subject_name
(const x509 *x)
;
注意:
char
*x509_name_oneline
(x509_name *a,
char
*buf,
int size)
;
如果設定了buf,就會按照size的尺寸,將資料塞入buf中返回。
如果buf為null,那麼就會動態生成buf,然後寫入,最後返回。
返回值示例:
;函式作用:該函式也可以將x509_name 轉化成ascii碼,它與x509_name_oneline的區別是它可以提取x509_name中的某一項,例如common name,country name等等
函式引數:
nid
: 可以取如下這些值
例如傳入nid_countryname
char cscommonname[
512]=;
x509_name *pcommonname =
x509_get_subject_name
(cert)
;int nnamelen =
512;o
nnamelen =
x509_name_get_text_by_nid
(pcommonname, nid_commonname, cscommonname, nnamelen)
;//結果:cscommonname = 「baidu.com」
void
x509_free
(x509 *a)
;
函式作用:釋放x509結構
void
x509_crl_get0_signature
(const x509_crl *crl,
const asn1_bit_string *
*psig,
const x509_algor *
*palg)
;
函式引數傳入x509_crl格式的crl證書,將簽名放在psig中,將簽名演算法放在palg中。
stack_of
(ssl_cipher)
*ssl_ctx_get_ciphers
(const ssl_ctx *ctx)
;
int
sk_ssl_cipher_num
(cryptography_stack_of_ssl_cipher *
);
sk_ssl_cipher_value
const
char
*ssl_get_servername
(const ssl *s,
const
int type)
;
引數解析:
type值
tl***t_nametype_host_name
int
ssl_client_version
(const ssl *s)
;//獲取client端放在legacy_version中的值
const
char
*ssl_get_version
(const ssl *ssl)
;//獲取連線使用的version,返回值是const char *
intssl_version
(const ssl *s)
;//獲取連線使用的version,返回值是int
ssl_ctx_set_verify
ssl_ctx_set_cert_verify_callback
()
ssl_ctx_set_verify_depth()
ssl_ctx_set_client_cert_cb()
ssl_set_session_secret_cb
()
x509_store_new
()
int
x509_up_ref
(x509 *a)
;
增加a的引用計數。
x509_crl_up_ref
(x509_crl *crl)
;
增加crl的引用
const ssl_cipher *
ssl_get_current_cipher
(const ssl *s)
這個函式返回的是ssl_cipher物件,想要獲取cipher的id、名稱和版本就需要使用其他函式去獲得。
使用下面三個函式可以獲取cipher的詳細資料。
ssl_cipher_get_id
(cipher)
,ssl_cipher_get_name
(cipher)
ssl_cipher_get_version
(cipher)
另外也可以使用ssl_get_cipher
函式一步到位獲取cipher的名稱
#
define
ssl_get_cipher
(s) \
ssl_cipher_get_name
(ssl_get_current_cipher
(s))
void
ssl_get0_alpn_selected
(const ssl *ssl,
const
unsigned
char
**data,
unsigned
int*len)
;
ssl_connect 中間會檢查證書等等,預設情況下,openssl 有它預設的行為。但是使用者可以根據自己需求進行自定義。
x509_store_set_get_issuer
可以自定義設定尋找上層的證書。
ssl_ctx_set_verify
可以設定自定義驗證證書鏈中每個證書的方法。
ssl_ctx_set_cert_verify_callback
可以自定義整個驗證的流程,例如可以設定這個callback function,跳過整個驗證過程。
注意區分ssl_ctx_set_verify
和ssl_ctx_set_cert_verify_callback
。
以上這些函式通常是客戶端使用的。
cppssl_add1_chain_cert()
函式可以用於將證書新增到證書鏈中。這個函式通常是伺服器端使用的。
JS Objec 的 API 作用描述
比較兩個值是否相同,與嚴格等於 的不同之處有兩個 一是 0不等於 0,二是nan等於自身 object.is nan,nan true object.is 0,0 falseobject.assign函式用於合併物件,將第乙個引數後面的引數合併到第乙個引數上,若屬性名重複,後面的覆蓋前面的值 con...
陣列常用的Api
建立陣列的基本方式如下 1.new array 當引數是乙個數值時,代表的是建立了乙個長度為該數值的陣列,當引數是除了數值的其他型別的值的時候,則會建立乙個只包含該特定值的陣列 2.字面量let personal let values 1,3,4,6 3array.from es6新增的建立陣列的靜...
openssl常用函式 SSL TLS程式設計
ssl tls 協議已經廣泛應用於電子商務中,用來保證資訊傳輸的安全性。利用 openssl 進行安全套接字程式設計和普通套接字程式設計類似。主要函式 1.初始化 ssl演算法庫函式 int ssl library init void define openssl add ssl algorithm...