1. 程式人生 > >linux下的OPENSSL程式設計- 簡單函式介紹

linux下的OPENSSL程式設計- 簡單函式介紹


在利用OpenSSL開始SSL會話之前,需要為客戶端和伺服器制定本次會話採用的協議,目前能夠使用的協議包括TLSv1.0、SSLv2、SSLv3、SSLv2/v3。
需要注意的是,客戶端和伺服器必須使用相互相容的協議,否則SSL會話將無法正常進行。

(3 ) 建立會話環境
在OpenSSL中建立的SSL會話環境稱為CTX,使用不同的協議會話,其環境也不一樣的。
申請SSL會話環境的OpenSSL函式是:
SSL_CTX *SSL_CTX_new(SSL_METHOD * method);
當SSL會話環境申請成功後,還要根據實際的需要設定CTX的屬性,通常的設定是指定SSL握手階段證書的驗證方式和載入自己的證書。

制定證書驗證方式的函式是:
int SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int(*verify_callback),int(X509_STORE_CTX *));
為SSL會話環境載入CA證書的函式是:
SSL_CTX_load_verify_location(SSL_CTX *ctx,const char *Cafile,const char *Capath);
為SSL會話載入使用者證書的函式是:
SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file,int type);
為SSL會話載入使用者私鑰
的函式是:
SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx,const char* file,int type);
在將證書和私鑰載入到SSL會話環境之後,就可以呼叫下面的函式來驗證私鑰和證書是否相符
int SSL_CTX_check_private_key(SSL_CTX *ctx);

(4) 建立SSL套接字
SSL套接字是建立在普通的TCP套接字基礎之上,在建立SSL套接字時可以使用下面的一些函式:
SSL *SSl_new(SSL_CTX *ctx);
//申請一個SSL套接字
int SSL_set_fd(SSL *ssl,int fd);)
//繫結讀寫套接字
int SSL_set_rfd(SSL *ssl,int fd);

//繫結只讀套接字
int SSL_set_wfd(SSL *ssl,int fd);
//繫結只寫套接字

(5) 完成SSL握手
在成功建立SSL套接字後,客戶端應使用函式SSL_connect( )替代傳統的函式connect( )來完成握手過程:
int SSL_connect(SSL *ssl);
而對伺服器來講,則應使用函式SSL_ accept ( )替代傳統的函式accept ( )來完成握手過程:
int SSL_accept(SSL *ssl);
握手過程完成之後,通常需要詢問通訊雙方的證書資訊,以便進行相應的驗證,這可以藉助於下面的函式來實現:
X509 *SSL_get_peer_certificate(SSL *ssl);
該函式可以從SSL套接字中提取對方的證書資訊,這些資訊已經被SSL驗證過了。
X509_NAME *X509_get_subject_name(X509 *a);
該函式得到證書所用者的名字。

(6) 進行資料傳輸
當SSL握手完成之後,就可以進行安全的資料傳輸了,在資料傳輸階段,需要使用SSL_read( )和SSL_write( )來替代傳統的read( )和write( )函式,來完成對套接字的讀寫操作:
int SSL_read(SSL *ssl,void *buf,int num);