2016-02-19 1 views
6

PerlのMojoliciousServer Name Identification (SNI)をサポートしています。一部のWebサーバーは、1つのHTTPS証明書を使用して複数のサイトをホストしています。私はこれを使用するように設定されていないシステムに取り組んでいます。ちょっとグーグルで検索すると、プロセスが明確になり、さまざまな部分が明らかになるようなものは表示されません。 StackOverflowの質問Perl LWP GET or POST to an SNI SSL URLにはいくつか言及されています。MojoliciousのSNIサポートを設定するにはどうすればよいですか?

私は何をする必要がありますか?

+0

はどのサイト、クライアントに応じて、異なる証明書を提供します要求された。後者はIO :: Socket :: SSLで実装できますが、Mojoliciousがそれを使う方法を提供しているかどうかはわかりません。 –

+0

クライアントとサーバーのアンサーが最適です。 –

答えて

6

まず、SNIをサポートするMojolicious(またはLWPなど)ではありません。 Net::SSLeayだから実際にはIO::Socket::SSLですが、あなたのバージョンがopensslなのではありません。

  • openssl1.0以降をインストールしてください。 --prefixオプションを使用して新しいディレクトリにインストールするように設定して、既に持っているものを邪魔することなく、他のものに依存しないようにすることができます。
  • Net::SSLeayを更新して、新しいopensslに対してコンパイルします。バージョン1.50以降が必要です。ここでの問題は、後でNet::SSLeayが幸いに古いopensslで動作することです。モジュールをアップグレードしても、新しいopensslが取得されるわけではありません。
  • 更新IO::Socket::SSLから1.56以降。最も早いリリースは2012年からのリリースであるため、とにかく更新する必要があります。
  • Mojolicious 2.83(2012年にリリースされていたので古い)は、クライアントのSNIサポートを追加し、Mojolicious 6.40(1月前)はすべてのWebサーバーでこれを追加しました。

あなたはモジュールごとに変更ファイルで見ることで、この情報を見つけることができますが、私たちはここにいる間、のは、それがモジュールをインストールするのと同じくらい簡単ではありませんでソートNet::SSLeayを取得してみましょう。

あなたがに注意を払わなければならないいくつかのもの:あなたは、彼らがバイナリ互換になるように、同じツールでのperl、opensslの、およびNet::SSLeayをコンパイルする必要が

  • 。右opensslを検索する場所を

cpanを伝えるためにOPENSSL_PREFIX変数を使用してください(とものはそれが実行されます)。すでに最新Net::SSLeayを持っていますが、opensslの古いバージョンに対してコンパイルした場合cpanは思っていても

$ export OPENSSL_PREFIX=/usr/local/ssl 
$ cpan Net::SSLeay IO::Socket::SSL 

、あなたはそれを再コンパイルするモジュールをインストールする強制することができ、その最新:

$ cpan -f Net::SSLeay IO::Socket::SSL 

IO::Socket::SSLは、この(1.84で追加)をチェックするメソッドがあります。

$ /usr/local/ssl/bin/openssl version 
OpenSSL 1.0.1r 28 Jan 2016 
$ perl -MIO::Socket::SSL -le 'print IO::Socket::SSL->VERSION' 
2.024 
$ perl -MIO::Socket::SSL -le 'print IO::Socket::SSL->can_client_sni' 
1 
+0

IO :: Socket :: SSLだけではできません。 SSLハンドシェイクに追加するホスト名を知る必要があります。名前がPeerAddrとして指定されている場合は使用されますが、IPアドレスだけが与えられている場合や既存のTCPソケットがアップグレードされた場合は、通常は名前を明示的に 'SSL_hostname'で指定する必要があります。それがMojo :: IOLoop :: Clientが実際にやっていることです。 –

+0

私は答えはまだありません。しかし、私はそれが実際にどのように起こるかについては心配していません。 –

-1

ないの質問に直接答えが、おそらくより良いので、 lution。

〜400ドメインの共有ホスティングの管理者としての経験から、ApacheでSSLを設定し、mod_perl2でMojoliciousを実行する方が便利です。アプリケーションにあまりにも多くの(ネットワーク)の設定を置く

は常に長期的に苦痛です。多くの場合、マルチドメインアプリケーションもまた不便になる可能性があります。

Apacheで設定すると、標準のスクリプト(例:暗号化からのSSL証明書の更新。もちろん

強力な理由と余分な仕事の価値が他のセットアップのための特別な要件があることができます。私はあなたがSNIのためのクライアントのサポート(すなわちのClientHello内のサーバー名を送信する)、またはサーバーのサポートについて尋ねている場合は、あなたの質問は、すなわちマルチサイトMojoliciousのサーバーを作る、明確にすべきだと思う

+0

私は他の解決策や回避策を探していません。 –

+1

downvotingのThx。 –

関連する問題