- - PR -
HTTPSのWEBサーバにあるコンテンツをPerlのコマンドで取得したい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-19 10:37
Linux+OpenSSL+Perlで
HTTPSのWEBサーバにあるコンテンツをPerlのコマンドで 取得したいのですが、うまくいきません。 どうやら、標準入力をOpenSSLのコマンドに引き渡せてないようです。 下記のコードにおかしなところはありますか? 週末からずっと悩んでいますが、解決できませんので 書き込みさせていただきました。 ----- #!/usr/bin/perl $data = "GET /index.html HTTP/1.1\\r\\n"; $cmd = "openssl s_client -connect webmail.hs.kddi.ne.jp:443"; open(CMD, "echo -e $data | $cmd |"); @cmd=<CMD>; print @cmd; ./test.pl depth=1 /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)05/CN=VeriSign Class 3 Secure Server CA verify error:num=20:unable to get local issuer certificate verify return:0 DONE CONNECTED(00000003) --- Certificate chain ..... 略 ..... CE4484A32C75C257DCAE55 Key-Arg : None Krb5 Principal: None Start Time: 1195436246 Timeout : 300 (sec) Verify return code: 20 (unable to get local issuer certificate) --- # | ||||
|
投稿日時: 2007-11-19 12:30
SSLの認証は,信頼するCA が発行した証明書は信頼できるというものです.
どのCA を信頼するかは,クライアント側で情報を与えてやる必要があります. その情報が足りない為に > verify error:num=20:unable to get local issuer certificate というエラーが出ています。 openssl s_clientコマンドのオプション(-CAfile)で CAの証明書を与えてやればこのエラーは出なくなると思います。 | ||||
|
投稿日時: 2007-11-19 13:58
お世話になります。
ご回答ありがとうございました。 早速、CAの証明書 (ブラウザーからベリサインという事がわかりましたので エクスポートしてサーバにUpしました) を指定しました。 "Verify return code: 0 (ok)" となりましたので、証明書系では問題はないかと思いましたが /index.htmlの結果が取得できません。 シェルでなく、コマンドプロンプトから 1.opensslコマンド実行⇒入力待ち、 2.GET /index.html HTTP/1.1 を入力すると結果が取得できます。 よろしくお願いします。 --- #!/bin/sh data="GET /index.html HTTP/1.1\\r\\n\\r\\n\\r\\n"; cmd="openssl s_client -connect webmail.hs.kddi.ne.jp:443 -CAfile /root/synclock/certs/ca.c er"; echo -e $data | $cmd # ./test.sh CONNECTED(00000003) depth=2 /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority verify return:1 depth=1 /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)05/CN=VeriSign Class 3 Secure Server CA verify return:1 depth=0 /C=JP/ST=Tokyo/L=Shinjuku-ku/O=KDDI CORPORATION/OU=Network Operations Center -01/CN=webmail.hs.kddi.ne.jp verify return:1 --- Certificate chain 0 s:/C=JP/ST=Tokyo/L=Shinjuku-ku/O=KDDI CORPORATION/OU=Network Operations Center -01/CN=webmail.hs.kddi.ne.jp i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)05/CN=VeriSign Class 3 Secure Server CA 1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)05/CN=VeriSign Class 3 Secure Server CA i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority --- Server certificate -----BEGIN CERTIFICATE----- ..... 略 ..... -----END CERTIFICATE----- subject=/C=JP/ST=Tokyo/L=Shinjuku-ku/O=KDDI CORPORATION/OU=Network Operations Center -01/CN=webmail.hs.kddi.ne.jp issuer=/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)05/CN=VeriSign Class 3 Secure Server CA --- No client certificate CA names sent --- SSL handshake has read 3061 bytes and written 332 bytes --- New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA Server public key is 1024 bit SSL-Session: Protocol : TLSv1 Cipher : EDH-RSA-DES-CBC3-SHA Session-ID: FB014F22D1EFCEC5FF8D74675D721BA360B2362A4B9038F9607962E390ADBC84 Session-ID-ctx: Master-Key: 2AFF7962092F9BC884027B6CE6721952266B8B1FD5E6488F148BD09938AC267771429FC3D59B6F85509AA597FBE80B27 Key-Arg : None Krb5 Principal: None Start Time: 1195448276 Timeout : 300 (sec) Verify return code: 0 (ok) --- DONE # | ||||
|
投稿日時: 2007-11-19 14:26
opensslに-ign_eofオプションをつけるとよいです。
他にも問題ありそうですが、とりあえず。 | ||||
|
投稿日時: 2007-11-19 16:06
OpenSSLのコマンドではないのですが、
IO::Socket::SSLが使えるなら
¥は半角です でいけると思いますが、これじゃだめですか? |
1