SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

PHPでクライアント証明書が必要なWebサイトにアクセスする

問題

クライアント認証が必要なWebサイトに file_get_contents 関数や fsockopen 関数でアクセスするには?

php

答え

以下のように、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);

関連するメモ

コメント