Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> この領域でのOpenSSLアプリケーション・プログラミングまれ詳細なドキュメントのためにOpenSSL

この領域でのOpenSSLアプリケーション・プログラミングまれ詳細なドキュメントのためにOpenSSL

  
アプリケーション・プログラミングは、私はソースパッケージのopensslのサンプルコードを慎重に分析することによって、その基本的な構造を理解することを学ぶと、文書結合の男になってきています。 SSL通信標準TCP層上の伝送を除いC /S構造のモデル、および一般的に明らかな差は対応しません。私はSSLプロセスとの安全なTCP接続を確立するための簡単な分析をしてみましょう。
A、デジタル証明書準備

通常、弊社のサーバーは
ため
サーバーの秘密鍵ファイルserver.keyの
サーバー側の証明書のをserver.crtファイルが必要双方向認証接続、片方向接続用のクライアント側の証明書認証client.crtファイル


、クライアントの秘密鍵ファイルのclient.keyを使用するには、<
ホームエンドで証明書を提出する必要はありません。 B> 2、


プログラム構造とSSL関連のヘッダファイルは、opensslのディレクトリに配置され、通常はこれらを使用する必要があります。
の#include /* SSLeayのもの* /RSAとアルゴリズム関連の定義
の#include /*暗号化ライブラリのインタフェース* /
の#include /*証明書関連のファイル* /
の#include
の#include
する#include
1

ために OPENSSL

ログインSSL_load_error_strings(必要な初期化の一部)を、場合/*エラーメッセージを初期化する、必要ではありませんOpenSSLのエラーメッセージプリントを使用するには、* /
SSLeay_add_ssl_algorithms(それを呼び出す必要があります); /* * /
/*アルゴリズムSSLアルゴリズムのライブラリをロードも(次の2つの方法を使用SSL_library_init
SSLライブラリをロードすることができます無効); OpenSSL_add_ssl_algor ithms();
* /

メタ= SSLv23_server_method(以下SSL環境を作成します。
/*クライアントモードです:SSL_METHOD * TLSv1_client_method(無効)
; TLSv1.0契約SSL_METHOD * SSLv2_client_method(無効);のSSLv2プロトコルSSL_METHOD * SSLv3_client_method(無効);のSSLv3プロトコルSSL_METHOD * SSLv23_client_method(無効);のSSLv2 /v3プロトコル
サーバモードは次のとおりです。SSL_METHOD * TLSv1_server_method(無効)
; SSL_METHOD * SSLv2_server_method (ボイド);同じパターン/*アプリケーションで、クライアントとサーバがなければならない* /; SSL_METHOD * SSLv3_server_method(ボイド); SSL_METHOD * SSLv23_server_method(ボイド);
* /
CTX = SSL_CTX_new(メタ)
現在のSSLセッションの環境を返すためのポインタである、我々は彼らのニーズに応じてそれを設定CTX:
無効SSL_CTX_set_verify(SSL_CTX *、int型、int型*(int型、X509_STORE_CTX *)を);
セット証明書の検証方法。最初のパラメータは、現在のCTXポインタで、二つ目は、あなたがお互いの言葉を確認したい場合は、SSL_VERIFY_PEERを使用し、方法を確認することです。あなたはSSL_VERIFY_NONEを使用し、それを必要としない。通常の状況下では、クライアントが互いを認証する必要があり、サーバーは必要ありません。その上にNULLポインタを使用するための特別な必要がない場合は3番目のパラメータは、コールバック・プロセスの検証です。ボイドSSL_CTX_load_verify_locations
(SSL_CTX *、CONSTのchar *、CONSTのchar *);
証明書がロードされ、上記第一の引数は、第二の証明書ファイルのパラメータ名、パラメータ3は、証明書ファイルへのパスであり、
INT SSL_CTX_use_certificate_file(SSL_CTX * CTX、CONSTのchar *ファイル、int型に);
ローカル証明書をロードし、証明書ファイルで指定された型構造タイプ;返す-1 SSL_CTX_set_default_passwd_cb_userdata
障害(CTX、" 123456")。パスワードのSSL証明書は、証明書を読んだときに自動的に使用され、プロンプトが設定されていない場合、証明書をロードする場合は、パスワードを入力するように求め、そのプログラムにおける多くの問題を使用されますが、機能があらかじめ保存され、ロードされるように設定されたパスワードを

int型SSL_CTX_use_PrivateKey_file(SSL_CTX * CTX、constのchar型*ファイル、int型);
自分の秘密鍵をロードし、type引数には、秘密鍵ファイルの構築のタイプを指定し、返すために失敗-1。書類や証明書をロードした後、秘密鍵と証明書が一致を確認することができます:
int型SSL_CTX_check_private_key(SSL_CTX *);
例:


場合(SSL_CTX_use_certificate_file (CTX、をserver.crt、SSL_FILETYPE_PEM)< = 0){
ERR_print_errors_fp(標準エラー);
出口(3);
} SSL_CTX_set_default_passwd_cb_userdata(CTX、"
; 123456789");
IF(SSL_CTX_use_PrivateKey_file(CTX、server.keyの、SSL_FILETYPE_PEM)< = 0){
ERR_print_errors_fp(標準エラー);
出口(4);
}
IF(!SSL_CTX_check_private_key(CTX)) {
の関数fprintf(stderrに、"秘密鍵が一致していない証明書の公開鍵/N");
出口(5);
}
2
関連する
は、 TCP


SSLソケットは、ソケットソケットの連続に依存しているので、セキュリティはそれぞれのソケットコネクタに関連付けられている必要があります。 TCP接続が確立された後、SSL通信処理が行われ、通常のソケットプログラミングでソケットを確立するプロセスは違いはありません、ここではそれらを繰り返すありません。
SSL = SSL_new(CTX); //はSSL_set_fd(SSL、SD)
SSLソケットを適用し; //は、TCPソケットに正常に接続するために
コール以上を読み書きするためにソケットをバインドSSL協会。
3
、呼び出し終了


ERR = SSL_accept(SSL)のためのセキュアな通信サービスを開始しますは、クライアントの要求を監視
、クライアントが呼び出す
ERR = SSL_connect(SSL);
は、接続を開始します。 int型SSL_write(SSLの*のSSL、するchar * bufに、int型NUM);
安全な通信成功の後、双方は
int型SSL_read(SSLの*のSSL、CHAR * bufは、int型NUM)を呼び出すことができます。
時間双方はX509 * SSL_get_peer_certificate(SSLの*のSSL)を呼び出すことによって、ピア証明書情報
例を得ることができる:
ログイン
CLIENT_CERT = SSL_get_peer_certificate(SSL)。
IF(!CLIENT_CERT = NULL){
のprintf("クライアント証明書:/N");
STR = X509_NAME_oneline(X509_get_subject_name(CLIENT_CERT)、0、0);
CHK_NULL(STR);
のprintf(" /Tの件名:%S /N"、STR);
OPENSSL_free(STR);
STR = X509_NAME_oneline(X509_get_issuer_name(CLIENT_CERT)、0、0);
CHK_NULL (STR);
のprintf(" /トン発行者:%のS /N"、STR);
OPENSSL_free(STR);
/*私たちは、証明書* /
X509_free(CLIENT_CERT)を解放;.
}他
のprintf("クライアントが持っていないcertificate./n");
4
>、通信の終了は、あなたが SSL
リソース

int型SSL_shutdown(SSLの*のSSL)の前にリリースを申請する必要があり、SSLソケットを閉じ、SSL_free(SSL)を無効に。リリースSSLソケット、無効SSL_CTX_free(CTX); SSLリリース環境;


Copyright © Windowsの知識 All Rights Reserved