質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

8310閲覧

OpenSSLでSSL通信するときのSSL/TLSのバージョンについて

Tom_S

総合スコア18

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/05/08 03:00

編集2018/05/08 05:32

◆環境
php 5.3.6
openssl 0.9.8
CentOS 5.5

あるssl通信をする処理で、phpのfsockopen() メソッドが使用されています。
この**fsockopen()の第一引数にfsockopen("ssl://hostname.com",~)**というふうに、
ssl://~」のプロコトル指定があるのですが、この場合、SSL/TLSのバージョンはいくつで通信がされるのでしょうか?

自分の認識ですと、インストールされているOpenSSLが対応している最新のバージョンで通信が行われると思っているのですが、、、

拙い説明で申し訳ないですが、ご教授いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/08 03:26

実際のコードを提示されたほうが回答を得やすくなります。PHP5.3環境で間違いないですよね?
Tom_S

2018/05/08 04:02

mts10806さんご指摘ありがとうございます。PHP5.3環境で間違いないです。
guest

回答2

0

ベストアンサー

SSL では通信を確立するハンドシェイクの時点で、利用可能な TLS バージョンを決定しています。

  1. クライアントが(自身の処理できる最新の)バージョンを(ClientHello メッセージで)送る
  2. サーバーが、自身が処理できるバージョンの中で、1. で受け取ったバージョンを超えないものを(ServerHello メッセージで)返す

クライアントが SSL v2 を指定した場合、サーバーがいくら TLS v1.2 に対応していたとしても、SSL v2 で通信を確立しようとします(ただしサーバーで SSL v2 が有効な場合。有効でなければ、通信不可能となる)

で、ssh:// では何になるかというと、クライアント側は openssl 0.9.8 なのであれば、TLS 1.0 までサポートのはずです。ですから TLS 1.0 での通信(バージョン 3.1)を試み、相手先のサーバーがこれに対応していれば(TLS 1.2 まで対応していたとしても) TLS 1.0 で、それより古いバージョンしか対応してなければ、その中で最も新しいバージョンでの通信となります。

※ssh2 の場合、ClientHello でのバージョンを 2.0 として送ることで制限していると考えられます

投稿2018/05/08 05:10

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tom_S

2018/05/08 05:35

tacsheavenさん回答ありがとうございます。 ベストアンサーにさせていただきました。 ちなみにですが、回答していただいた情報が記載してあるサイトをもしご存知でしたら、教えていただけないでしょうか。
tacsheaven

2018/05/08 06:35

TLS ハンドシェイクについては、RFC 5246 で TLS 1.2 について定義してますから、その中の 7.4.1 あたりを読めば何をしているかは理解できるはずです。 ※日本語訳だと意味不明な文章になってたりするので、原語(英語)を読むことをお勧めします 7.4.1.3 ServerHello では server-version についてこう書いています。 This field will contain the lower of that suggested by the client in the client hello and the highest supported by the server. For this version of the specification, the version is 3.3. (See Appendix E for details about backward compatibility.)
Tom_S

2018/05/08 07:08

ありがとうございます!! すみません、回答いただいた、 >ssh:// では何になるかというと、クライアント側は~ の箇所ですが、 ssl://では何になるかというと、クライアント側は~ の間違いですよね?
Tom_S

2018/05/08 07:36

度々申し訳ないです。 聞く限りですと、ssl://~ でもTLS1.2での通信ができるみたいですが、 ssl://hostname.com と tls://hostname.comで何が違うのでしょうか?
tacsheaven

2018/05/08 07:40

それらの URI をどう扱うかは、hostname.com を処理しているサーバーによります。 ssl が名称変更されて(他にも変わってはいますが)tls になったので、歴史的に ssl:// と tls:// は同じプロトコルとして扱うかも知れませんし、あるいは ssl だったら SSL v2/v3 だけで TLS 1.0/1.1/1.2 には対応しないでよいものとして扱うかも知れません。サーバー側の実装によって異なってきますので、一概には言えません。
Tom_S

2018/05/08 07:42

丁寧な回答ありがとうございました。 大変助かりました。
guest

0

投稿2018/05/08 03:08

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tom_S

2018/05/08 03:57

te2jiさん回答ありがとうございます。 ということは、仮にopensslが1.0.1でTLSv1.2に対応していても、SSL V2で通信が行われるということになるのでしょうか。。。?
退会済みユーザー

退会済みユーザー

2018/05/08 04:14

> ssl:// は SSL V2 での接続を試みます。 あるいはリモートホストの設定によっては SSL V3 での接続を試みます。 ドキュメント読む限りは、上記とあるので、SSL V3 までは選択肢に入りそうですけど、TLS は言及がないので不明です。 実際にパケットキャプチャしてみるほうが早い気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問