7

他のマシンは正常に動作しているのに、Ubuntu マシンに接続する際に問題が発生しています。両者の違いは、Ubuntu 版と SSLeay 版ですが、何が問題なのかを絞り込むことはできません。

私はすでに次のことを行いました: a) 環境変数を追加します: PERL_LWP_SSL_VERIFY_HOSTNAME の値を 0 にします b) $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; を追加します。VICommon.pm ファイルに

上記の両方が機能しませんでした。2 台目のマシンで動作しない理由がわかりません。

Ubuntu 12.10 (動作)

$perl /usr/lib/vmware-vcli/apps/general/connect.pl --url https:///sdk/webService --username --password

接続成功

サーバー時間: 2013-07-19T22:11:31.681181Z

$ パール -v

これは、x86_64-linux-gnu-thread-multi 用にビルドされた perl 5、バージョン 14、サブバージョン 2 (v5.14.2) です。

$ perl -MLWP -e 'print "LWP バージョン: $LWP::VERSION\n"'

LWP バージョン: 6.04

$ perl -MCrypt::SSLeay -e 'print "Crypt::SSLeay バージョン: $Crypt::SSLeay::VERSION\n"'

クリプト::SSLeay バージョン: 0.58

Ubuntu 13.04 (動作しません)

$perl /usr/lib/vmware-vcli/apps/general/connect.pl --url https:///sdk/webService --username --password

/usr/share/perl/5.14/VMware/VICommon.pm 行 548 の「https:///sdk/vimService.wsdl」でサーバー バージョンを利用できません。

$ パール -v

これは、x86_64-linux-gnu-thread-multi 用にビルドされた perl 5、バージョン 14、サブバージョン 2 (v5.14.2) です。

$ perl -MLWP -e 'print "LWP バージョン: $LWP::VERSION\n"'

LWP バージョン: 6.04

$ perl -MCrypt::SSLeay -e 'print "Crypt::SSLeay バージョン: $Crypt::SSLeay::VERSION\n"'

Crypt::SSLeay バージョン: 0.64

証明書エラー (両方のマシンで同じ)

lwp-request https:///sdk/webService に接続できません:443 (証明書の検証に失敗しました)

LWP::Protocol::https::Socket: SSL 接続試行が不明なエラー error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/share/perl5/LWP/Protocol/http.pm 行 51 で失敗しました。

更新 1

この問題はUbuntuのバージョンとは何の関係もないように見えますが、「apt-get upgrade」を実行したときに取得した新しいパッケージは、12.10ボックスでは実行しませんでしたが、機能していました。ただし、13.04 では、すべての更新を行うことになりました。私が行ったときに80を超える更新を取得したので、それを台無しにしているライブラリにまだ絞り込んでいません。新しい 13.04 イメージをインストールすると、正常に動作します。

** アップデート 2 **

ベースの Ubuntu 12.10 または 13.04 は正常に動作するようです。最新のアップデートを取得すると、機能しなくなります。したがって、どのライブラリが問題を引き起こしているのかはまだわかりません。

4

5 に答える 5

4

コードですぐに使用するのではなく、use Net::SSL;次の方法でより予測可能な動作を実現できます。

$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';

PERL_LWP_SSL_VERIFY_HOSTNAMEゼロに設定すると、期待どおりに機能します。ただし、基礎となる実装モジュールの変更は解決策ではなく、ハックと見なされるべきです。

于 2015-10-15T08:42:31.627 に答える
2

また、Net::HTTPS のバージョン、および IO::Socket::SSL がインストールされているかどうかによっても異なります。Net::HTTPS は、Net::SSL (Crypt::SSL を使用) よりも IO::Socket::SSL (Net::SSLeay を使用) を優先します。Net::HTTPS の最近のバージョンでは、IO::Socket::SSL との連携方法が改善されています。

于 2013-07-19T23:19:43.873 に答える
2

グローバル ENV 変数を追加するか、Apache 構成を介して設定することができます (Apache を使用している場合)。

SetEnv PERL_LWP_SSL_VERIFY_HOSTNAME 0

また

$ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;
于 2014-09-25T07:46:29.830 に答える
-2

PERL_LWP_SSL_VERIFY_HOSTNAME環境変数を 0 に設定すると、重要なセキュリティ チェックが無効になります。

関連するモジュールを最新バージョン (2014 年 11 月現在) にアップグレードすると、問題が解決しました。

(私の場合、次のディストリビューションに更新しました: Crypt-SSLeay-0.72、Net-HTTP-6.07、libwww-perl-6.08 LWP-Protocol-https-6.06)。

于 2014-11-26T21:48:02.037 に答える