Curl, Python, PHP で HTTPS 接続する際固まるサイトがあるので、TLS1.2 を使わないようにする

(コメント)

この記事 http://b.ytyng.com/a-61/ で書きましたが、OpenSSL 1.0.1f で https 接続した場合、TLS1.2 で 接続しようとして hello を発行した時、特定のサイトが応答で固まることがあります。

(OpenSSL 1.0.1f は、ubuntu 14.04, 15.04 などの最新のデフォルトバージョンです。1.0.1g を使っていれば解決されているかもしれません)

その場合、TLS1.2 を使わないように接続することで、回避することができます。

curl, Python, PHP で、TLS1.2 を使わない (TLS1.0を強制する) 方法です。

curl

$ curl -vv "https://hoge.example.com/"  # URLは仮
* Hostname was NOT found in DNS cache
*   Trying xxx.xxx.xxx.xxx...
* Connected to hoge.example.com (xxx.xxx.xxx.xxx) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):

ここで固まる

TLS1.2 を使わない (TLS1.0を強制)

$ curl -vv "https://hoge.example.com/" --tlsv1.0

固まらない!

python3.4 + requests

# import requests
r = requests.get('https://hoge.example.com/')
固まる!

↓ TLS1.2 を使わない (TLS1.0を強制)

import requests

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl

class MyAdapter(HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(
            num_pools=connections,
            maxsize=maxsize,
            block=block,
            ssl_version=ssl.PROTOCOL_TLSv1)

s = requests.Session()
s.mount('https://', MyAdapter())

r = s.get("https://hoge.example.com/")
固まらない!

参考:

Choosing The SSL Version In Python Requests • Lukasa's Echochamber https://lukasa.co.uk/2013/01/Choosing_SSL_Version_In_Requests/

PHP5.6

$html = file_get_contents('https://hoge.example.com/');
固まる!

↓ TLS1.2 を使わない (TLS1.0を強制)

$ctx = stream_context_create([
    'ssl' => [
        'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT,
    ],
]);
$html = file_get_contents('https://hoge.example.com/', false, $ctx);
固まらない!

参考:

PHP: PHP 5.6.x における OpenSSL 関連の変更 - Manual http://php.net/manual/ja/migration56.openssl.php

現在未評価

コメント

最近のツイート

  • ytyng

    ytyng @ytyng

    ホセ・リサール氏のマンガの反応が良い。 https://t.co/Lwqjx5nn8n #MANGACLUB @Mangadotclubさんから
    2 日, 14 時間 前

  • ytyng

    ytyng @ytyng

    Python の Typing で、Generator[MangazenkanOrderAdapter, None, None] は Iterator[MangazenkanOrderAdapter] とアノテーションをつけること… https://t.co/SqG9hOtEiF
    3 日, 16 時間 前

  • ytyng

    ytyng @ytyng

    近所に、スーパーバリューっていうスーパーがあるんだけど、店内にいるとたまにBGMが5拍子のアコースティックプログレみたいな音楽になる。めっちゃ耳に残る。あのBGMはなんか意味があるのかなー。
    4 日, 11 時間 前