PHPでクライアント証明書が必要なWebサイトにアクセスする
問題
クライアント認証が必要なWebサイトに file_get_contents 関数や fsockopen 関数でアクセスするには?
答え
以下のように、context で証明書等を指定すればできる。
$context = stream_context_create(); stream_context_set_option($context, 'ssl', 'local_cert', '/patsh/to/client.pem'); file_get_contents('https://example.jp/example.php', false, $context);
SSLコンテキストオプションの local_cert には、PEM形式の証明書ファイルのパスを指定せよとのことなので、PEM形式のファイルを指定する。
pfx形式、PKCS#12形式の証明書は、opensslコマンドでPEM形式に変換できる。
秘密鍵の暗号化が必要なければ -nodes をつけて作成。
openssl pkcs12 -nodes -in xxxxxx.p12 -out client.pem
パスフレーズを残すなら、以下のようにしてPEM形式に変換して、
openssl pkcs12 -in xxxxxx.p12 -out client.pem
phpでもパスフレーズを指定して使用する。
$context = stream_context_create(); stream_context_set_option($context, 'ssl', 'local_cert', '/patsh/to/client.pem'); stream_context_set_option($context, 'ssl', 'passphrase', 'パスワード'); file_get_contents('https://example.jp/hogehoge.html', false, $context);
コメント