用OpenSSL編寫SSL,TLS程式 3

2021-09-30 03:20:09 字數 3261 閱讀 2377

2.void ssl_ctx_set_verify(ssl_ctx *ctx,int mode,int (*callback)(int, x509_store_ctx *));

預設mode

是ssl_verify_none,

如果想要驗證對方的話

,便要將此項變成

ssl_verify_peer.ssl/tls

中預設只驗證

server,

如果沒有設定

ssl_verify_peer的話,

客戶端連證書都不會發過來

.3.int ssl_ctx_load_verify_locations(ssl_ctx *ctx, const char *cafile,const char *capath);

要驗證對方的話

,當然裝要有

ca的證書了

,此函式用來便是載入

ca的證書檔案的

.4.int ssl_ctx_use_certificate_file(ssl_ctx *ctx, const char *file, int type);

載入自己的證書檔案

.5.int ssl_ctx_use_privatekey_file(ssl_ctx *ctx, const char *file, int type);

載入自己的私鑰

,以用於簽名

.6.int ssl_ctx_check_private_key(ssl_ctx *ctx);

呼叫了以上兩個函式後

,自己檢驗一下證書與私鑰是否配對

.7.void rand_seed(const void *buf,int num);

在win32

的環境中

client

程式執行時出錯

(ssl_connect

返回-1)

的乙個主要機制便是與

unix

平台下的隨機數生成機制不同

(握手的時候用的到

). 具體描述可見

mod_ssl

的faq.

解決辦法就是呼叫此函式,其中

buf應該為一隨機的字串,作為

"seed".

還可以採用一下兩個函式

:void rand_screen(void);

int rand_event(uint, wparam, lparam);

其中rand_screen()

以螢幕內容作為

"seed"

產生隨機數

,rand_event

可以捕獲

windows

中的事件

(event),

以此為基礎產生隨機數

.如果一直有

使用者干預的話

,用這種辦法產生的隨機數能夠

"更加隨機

",但如果機器一直沒人理

(如總停在登入畫面

),則每次都將產生同樣的數字

.這幾個函式都只在

win32

環境下編譯時有用,各種

unix

下就不必調了

.大量其他的相關函式原型,見

crypto/rand/rand.h.

8.openssl_add_ssl_algorithms()

或ssleay_add_ssl_algorithms()

其實都是呼叫

int ssl_library_init(void)

進行一些必要的初始化工作,用

openssl

編寫ssl/tls

程式的話第一句便應是它

.9.void    ssl_load_error_strings(void );

如果想列印出一些方便閱讀的除錯資訊的話

,便要在一開始呼叫此函式

.10.void err_print_errors_fp(file *fp);

如果呼叫了

ssl_load_error_strings()後,

便可以隨時用

err_print_errors_fp()

來列印錯誤資訊了

.11.x509 *ssl_get_peer_certificate(ssl *s);

握手完成後

,便可以用此函式從

ssl結構中提取出對方的證書

(此時證書得到且已經驗證過了

)整理成

x509結構.

12.x509_name *x509_get_subject_name(x509 *a);

得到證書所有者的名字

,引數可用通過

ssl_get_peer_certificate()

得到的x509物件.

13.x509_name *x509_get_issuer_name(x509 *a)

得到證書簽署者

(往往是

ca)的名字

,引數可用通過

ssl_get_peer_certificate()

得到的x509物件.

14.char *x509_name_oneline(x509_name *a,char *buf,int size);

將以上兩個函式得到的物件變成字元型

,以便列印出來

.15.ssl_method

的建構函式,包括

ssl_method *tlsv1_server_method(void);    /* tlsv1.0 */

ssl_method *tlsv1_client_method(void);    /* tlsv1.0 */

ssl_method *sslv2_server_method(void);    /* sslv2 */

ssl_method *sslv2_client_method(void);    /* sslv2 */

ssl_method *sslv3_server_method(void);    /* sslv3 */

ssl_method *sslv3_client_method(void);    /* sslv3 */

ssl_method *sslv23_server_method(void);    /* sslv3 but can rollback to v2 */

ssl_method *sslv23_client_method(void);    /* sslv3 but can rollback to v2 */

在程式中究竟採用哪一種協議

(tlsv1/sslv2/sslv3),

就看調哪一組建構函式了

.

用openssl進行SSL程式設計

主要介紹openssl進行ssl通訊的一些函式以及過程,主要是初始化過程,至於資料的接收以及後續處理可以具體問題具體分析。load所有的ssl演算法 openssl add ssl algorithms 建立ssl所用的method ssl method meth sslv23 method 初始化...

用openssl自簽名證書

進入命令列 1.進入證書存放的路徑 rm rf ssl 假如ssl資料夾已經存在 mkdir ssl cd ssl 2.生成金鑰 openssl genrsa des3 out ssl.key 1024 輸入密碼 isec openssl rsa in ssl.key out ssl.key 輸入密...

用openssl來加密檔案

使用 openssl 的常規方式是 openssl command command options arguments 在 linux 中加密檔案要加密當前工作目錄的內容 根據檔案的大小,這可能需要一點時間 tar czf openssl enc e aes256 outsecured.tar.gz...