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

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

ただいまの
回答率

90.33%

  • PHP

    21390questions

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

  • SSL

    528questions

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

  • OpenSSL

    114questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,220

Tom_S

score 7

◆環境
php 5.3.6
openssl 0.9.8
CentOS 5.5

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/05/08 12:26

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

    キャンセル

  • Tom_S

    2018/05/08 13:02

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

    キャンセル

回答 2

checkベストアンサー

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 14:35

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

    キャンセル

  • 2018/05/08 15: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.)

    キャンセル

  • 2018/05/08 16:08

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

    キャンセル

  • 2018/05/08 16:36

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

    キャンセル

  • 2018/05/08 16:40

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

    キャンセル

  • 2018/05/08 16:42

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

    キャンセル

0

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/08 12:57

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

    キャンセル

  • 2018/05/08 13:14

    > ssl:// は SSL V2 での接続を試みます。 あるいはリモートホストの設定によっては SSL V3 での接続を試みます。

    ドキュメント読む限りは、上記とあるので、SSL V3 までは選択肢に入りそうですけど、TLS は言及がないので不明です。
    実際にパケットキャプチャしてみるほうが早い気がします。

    キャンセル

同じタグがついた質問を見る

  • PHP

    21390questions

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

  • SSL

    528questions

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

  • OpenSSL

    114questions

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