SSL双方向認証

5376 ワード

前の方式はただ1:1のモードを実現して、昨日同僚は引き続きn:1のモードを実現して、ここは私は更に記録を整理します。
nginxによるssl_clientcertificateパラメータはクライアント公開鍵を指定するだけで、クライアントを追加して通信する場合はserverを再インストールします。
n:1のモードはCAのカスケード証明書モードによって実現され、まず自分でセットのCAルート証明書を作成し、その助けを借りて2級証明書をclient証明書として生成する。
このとき、client秘密鍵署名は、対応するclient公開鍵によって検証されるだけでなく、ルート証明書の公開鍵によって検証されることができる。
ここを見たらぱっと明るくなるはずです。具体的な操作を紹介します。
1準備工作
1.1 opensslディレクトリ準備
一般的にopensslのプロファイルはこのディレクトリ/etc/pki/tlsにあります。
mkdir/etc/pki/ca_linvo
cd/etc/pki/ca_linvo
mkdir root server client newcerts
echo 01>serial
echo 01>カルnumber
touch index.txt
1.2 openssl配置準備
 
opensslの設定を変更します。
vi /etc/pki/tls/openssl.cnf
このコメントを見つけたら、次の文に変えます。
ヽoo。ツca     = CA_default
default_ca     = CA_linvo
全体をコピーして上の名前に変えます。
下記のパラメータを修正します。
dir=/etc/pki/ca_linvo
certifeat=$dir/root/ca.crt
prvate_key=$dir/root/ca.key
終了を保存
2 CAルート証明書の作成
生成key: 
openssl genrsa-out/etc/pki/ca_linvo/root/ca.key
csr:openssl req-new-key/etc/pki/ca_を生成します。linvo/root/ca.key-out/etc/pki/ca_linvo/root/ca.csr
生成crt:openssl x 509-req-days 3650-in/etc/pki/ca_linvo/root/ca.csr-signkey/etc/pki/ca_linvo/root/ca.key-out/etc/pki/ca_linvo/root/ca.crt
生成crl:openssl ca-gencrl-out/etc/pki/ca_linvo/root/ca.cl-crldays 7
作成したルート証明書ファイルは全部/etc/pki/ca_にあります。linvo/root/カタログ下
証明書を作成する時、証明書のパスワード設定長さ>=6桁を提案します。javaのkeytoolツールはそれに要求があるようです。
3 server証明書を作成します。
生成key:openssl genrsa-out/etc/pki/ca_linvo/server/server.key
csr:openssl req-new-key/etc/pki/ca_を生成します。linvo/server/server.key-out/etc/pki/ca_linvo/server/server.csr
生成crt:openssl ca-in/etc/pki/ca_linvo/server/server.csr-cert/etc/pki/ca_linvo/root/ca.crt-keyfile/etc/pki/ca_linvo/root/ca.key-out/etc/pki/ca_linvo/server.crt-days 3650
説明:
1、ここで生成したcrtは先ほどcaルート証明書の下のカスケード証明書です。実はserver証明書は主に通常の一方向のhttpsを配置するために使われます。だからカスケードモードを使わなくてもいいです。
openssl rsa-in/etc/pki/ca_linvo/server/server.key-out/etc/pki/ca_linvo/server/server.key openssl x 509-req-in/etc/pki/ca_linvo/server.csr-signkey/etc/pki/ca_linvo/server/server.key-out/etc/pki/ca_linvo/server.crt-days 3650
2、−daysパラメータは、必要に応じて証明書の有効期限を設定してもよい。例えば、デフォルト365日間。
4 client証明書を作成する
生成key:openssl genrsa-des 3-out/etc/pki/ca_linvo/client/client.key 1024
csr:openssl req-new-key/etc/pki/ca_を生成します。linvo/client/client.key-out/etc/pki/ca_linvo/client/client.csr
生成crt:openssl ca-in/etc/pki/ca_linvo/client/client.csr-cert/etc/pki/ca_linvo/root/ca.crt-keyfile/etc/pki/ca_linvo/root/ca.key-out/etc/pki/ca_linvo/client/client.crt-days 3650
説明:
1、ここではカスケード証明書を使用しなければならず、このステップを繰り返して、複数のclient証明書を作成することができます。
2、crtを生成する時、次のエラーが発生する可能性があります。
openssl TXT_DB error number 2 failed to udate database
ここを参照して操作できます。
私が使っているのは方法の一つです。もうすぐindex.txt.atrの中でunique_subject=の
5 inxの設定
ここではserverセグメントのキー部分のみを表示します。
同前certifcate /etc/pki/ca_linvo/server/server.crt;server公開鍵ssl_certifcate_key /etc/pki/ca_linvo/server/server.key;server秘密鍵ssl_clientcertifcate  /etc/pki/ca_linvo/root/ca.crt.ルートレベル証明書の公開鍵は、各2レベルのclient ssl_を検証するために使用されます。verify_client on
再起動します
6テスト
6.1ブラウザテスト
双方向認証ですので、直接ブラウザを通じてhttpsアドレスにアクセスすると400 Bad Request(No required SSL certificate was sent)と言われます。本機にclient証明書をインストールする必要があります。
windowsにインストールされた証明書はpfxフォーマットが必要です。p 12フォーマットともいいます。生成方式は以下の通りです。
openssl pkcs 12-export-inkey/etc/pki/ca_linvo/client/client.key-in/etc/pki/ca_linvo/client/client.crt-out/etc/pki/ca_linvo/client/client.pfx 
windowsの中でダブルクリックしてインストールします。インストールする時に証明書を作成する時に設定したパスワードを入力するように促すことができます。
インストールが成功したら、ブラウザからウェブサイトへのアクセスを再開します。証明書を選択するようにヒントを与えるかもしれません。先ほどインストールした証明書を選択すればいいです。
この時、一部のブラウザがユーザーにこの証明書が信頼されていない、住所が安全でないなどと警告します。これは私達のserver証明書は私達が自分で発行したものです。本当の権威CA機関が公布したのではなく、無視してもいいです。
6.2 php curlテスト
ここではキーの設定が必要なcurlパラメータのみを一覧表示します。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //       ,  CA         
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); //            ,          0
        curl_setopt($ch, CURLOPT_VERBOSE, '1'); //debug  ,      
        curl_setopt($ch, CURLOPT_SSLCERT, CLIENT_CRT); //client.crt    ,        
        curl_setopt($ch, CURLOPT_SSLCERTPASSWD, CRT_PWD); //client    
        curl_setopt($ch, CURLOPT_SSLKEY, CLIENT_KEY); //client.key    
白いページがあっても、戻り情報がない場合は、証明書やパスワードが正しく設定されていませんので、確認してください。 
6.3 php sopテスト
まずclientのpemフォーマット証明書を構築して、openssl命令でもいいですが、crtとkeyがありますので、手動で合併するのも簡単です。
新しいファイルを作成して、crtの中-----BEGIN CERTIFFATE-------とEND CERTIFRICATE-----の間のbase 64の内容(この二つの分割線を含む)をコピーして、keyの中-----BEGIN RSA PRIVATE KEY---------とEND RSA PRIVATE KEY-----の間の内容もコピーして、そしてclient.pemとして保存すればいいです。
もっと手っ取り早いなら、次のように命令して、直接二つの書類を統合してもいいです。
cat/etc/pki/ca_linvo/client/client.crt/etc/pki/ca_linvo/client/client.key>/etc/pki/ca_linvo/client/client.pem
pemファイルがあります。次にphp内蔵のSoappCientを使って呼び出しができます。構造関数は第二のパラメータを設定する必要があります。
 
$header = array(		
		'local_cert' => CLIENT_PEM, //client.pem    
		'passphrase' => CRT_PWD //client    
		);
	$client = new SoapClient(FILE_WSDL, $header); //FILE_WSDL     https  
前のブログで最後にlocal_と言いました。リモートパスに設定するとエラーが発生します。初めてwsdlを取得した時にclient証明書を使っていないため、wsdlをコストを維持してファイルを呼び出す必要があります。
 
しかし、今回のテストは大丈夫です。ローカルファイルとして別に保存しなくてもいいです。直接遠隔で取得すればいいです。
前の証明書に問題があると思いましたが、以前の証明書を使っても大丈夫です。とても怪しいです。