PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのSSLコンテキストオプション完全ガイド|ssl://・tls://で使える設定一覧

はじめに

この記事では、ssl:// および tls:// トランスポートで使用できるコンテキストオプションの一覧を紹介します。これらのオプションを適切に設定することで、SSL/TLS通信における証明書の検証方法や暗号化の挙動を細かく制御できます。

peer_name接続先(ピア)として使用する名前。未設定の場合は、ストリームを開いた際に使用したホスト名から自動的に推測されます。
verify_peer使用されるSSL証明書の検証を必須にします。デフォルトは TRUE です。
verify_peer_nameピア名の検証を必須にします。デフォルトは TRUE です。
allow_self_signed自己署名証明書を許可します。verify_peer の設定が必要です。デフォルトは FALSE です。
cafileリモートピアの身元を認証するために使用する、ローカルファイルシステム上の認証局(CA)ファイルの場所を指定します。
capath正しくハッシュ化された証明書ディレクトリを指定する必要があります。
local_certローカルファイルシステム上にある証明書ファイルへのパスを指定します。
local_pk証明書と秘密鍵が別々のファイルとして保存されている場合の、ローカル秘密鍵ファイルへのパスを指定します。
passphraselocal_cert ファイルのエンコードに使用されたパスフレーズを指定します。
CN_match期待するコモンネーム(Common Name)を指定します。コモンネームが一致しない場合、接続の試行は失敗します。
verify_depth証明書チェーンが深すぎる場合に処理を中断します。
ciphers利用可能な暗号スイートのリストを設定します。文字列の形式は ciphers(1) のマニュアルで説明されています。
capture_peer_certTRUE に設定すると、ピア証明書を格納した peer_certificate コンテキストオプションが生成されます。
capture_peer_cert_chainTRUE に設定すると、証明書チェーンを格納した peer_certificate_chain コンテキストオプションが生成されます。
SNI_enabledTRUE に設定すると、Server Name Indication(SNI)が有効になります。
SNI_server_name設定した場合、その値がSNIのサーバー名として使用されます。未設定の場合は、使用されたホスト名からサーバー名が推測されます。
disable_compression設定すると、TLS圧縮を無効にします。
peer_fingerprintリモート証明書のダイジェストが指定されたハッシュと一致しない場合に、処理を中断します。
security_levelセキュリティレベルを設定します。未指定の場合はデフォルトのセキュリティレベルが使用されます。PHP 7.2.0 および OpenSSL 1.1.0 以降で利用可能です。

セキュリティに関する注意点

本番環境では、verify_peerverify_peer_name を無効化することは中間者攻撃(MITM攻撃)のリスクを高めるため避けるべきです。これらを false に設定するのは、開発・テスト環境でのみにとどめることをおすすめします。

使用例

以下は、SSLコンテキストの設定例です。

$stream_context = stream_context_create([ 'ssl' => [
    'local_cert' => '/path/to/key.pem',
    'peer_fingerprint' => openssl_x509_fingerprint(file_get_contents('/path/to/key.crt')),
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true,
    'verify_depth' => 0 ]]);
  1. PHPで変数名を文字列として取得する方法をわかりやすく解説

    PHPでは、可変変数や $GLOBALS スーパーグローバル配列を活用することで、変数名を文字列として扱ったり、値から変数名を逆引きしたりすることができます。ここでは、具体的なコード例をもとにその方法を解説します。 例1:可変変数を使って文字列を変数名として扱う まずは、可変変数($$)を使用した基本的な例です。変数の値が、そのまま別の変数の「名前」として機能します。 <?php $a = This is it!; $$a = Demo string!; print($a); ?> 出力結果 上記のコードを実行すると、次のような出力が得られます。 T

  2. PHPのzip_entry_name()関数とは?使い方とサンプルコードを解説

    PHPのzip_entry_name()関数は、ZIPアーカイブ内に格納されているファイル(エントリ)の名前を取得するための関数です。この関数を使用することで、ZIPファイルの中にどのようなファイルが含まれているのかを簡単に確認できます。構文zip_entry_name(zip_entry)パラメータzip_entry − zip_open()で開いたZIPリソースに対してzip_read()で読み込んだ、ZIPディレクトリエントリを指定します。戻り値zip_entry_name()関数は、指定したZIPエントリ(アーカイブ内のファイル)の名前を文字列として返します。以下に具体例を示します。「