For checking the status of a client certificate using OCSP, you can use this script:
<?php
// User variables:
$dir = '/path/to/temp/'; // Directory where apache has access to (chmod 777).
$RootCA = '/path/to/Root.cer'; // Points to the Root CA in PEM format.
$OCSPUrl = 'http://ocsp.url'; //Points to the OCSP URL
// Script:
$a = rand(1000,99999); // Needed if you expect more page clicks in one second!
file_put_contents($dir.$a.'cert_i.pem', $_SERVER['SSL_CLIENT_CERT_CHAIN_0']); // Issuer certificate.
file_put_contents($dir.$a.'cert_c.pem', $_SERVER['SSL_CLIENT_CERT']); // Client (authentication) certificate.
$output = shell_exec('openssl ocsp -CAfile '.$RootCA.' -issuer '.$dir.$a.'cert_i.pem -cert '.$dir.$a.'cert_c.pem -url '.$OCSPUrl);
$output2 = preg_split('/[\r\n]/', $output);
$output3 = preg_split('/: /', $output2[0]);
$ocsp = $output3[1];
echo "OCSP status: ".$ocsp; // will be "good", "revoked", or "unknown"
unlink($dir.$a.'cert_i.pem');
unlink($dir.$a.'cert_c.pem');
?>
It can be ameliorated, but it's just a beginning!
Normally, you can extract the ocsp url from the client certificate. Also, an OCSP request contains only the hash of the issuer name, the hash of the issuer's key, and the serial number of the client certificate. All three can be extracted directly from the client certificate.
OpenSSL
- 導入
- インストール/設定
- 定義済み定数
- キー/証明書パラメータ
- 証明書の認証
- OpenSSL 関数
- openssl_csr_export_to_file — CSR をファイルにエクスポートする
- openssl_csr_export — CSR を文字列としてエクスポートする
- openssl_csr_get_public_key — CERT の公開鍵を返す
- openssl_csr_get_subject — CERT の subject を返す
- openssl_csr_new — CSR を作成する
- openssl_csr_sign — 他の CERT(あるいは自分自身)で証明書をサインする
- openssl_error_string — OpenSSL エラーメッセージを返す
- openssl_free_key — キーリソースを開放する
- openssl_get_privatekey — openssl_pkey_get_private のエイリアス
- openssl_get_publickey — openssl_pkey_get_public のエイリアス
- openssl_open — シール(暗号化)されたデータをオープン(復号)する
- openssl_pkcs12_export_to_file — PKCS#12 互換の証明書保存ファイルをエクスポートする
- openssl_pkcs12_export — PKCS#12 互換の証明書保存ファイルを変数にエクスポートする
- openssl_pkcs12_read — PKCS#12 認証ストアをパースして配列形式にする
- openssl_pkcs7_decrypt — S/MIME 暗号化されたメッセージを復号する
- openssl_pkcs7_encrypt — S/MIME メッセージを暗号化する
- openssl_pkcs7_sign — S/MIME メッセージにサインする
- openssl_pkcs7_verify — S/MIME でサインされたメッセージの署名を検証する
- openssl_pkey_export_to_file — エクスポート可能な形式で、キーをファイルに取得する
- openssl_pkey_export — エクスポート可能な形式で、キーを文字列に取得する
- openssl_pkey_free — 秘密鍵を開放する
- openssl_pkey_get_details — キーの詳細の配列を返す
- openssl_pkey_get_private — 秘密鍵を取得する
- openssl_pkey_get_public — 証明書から公開鍵を抽出し、使用できるようにする
- openssl_pkey_new — 新規に秘密鍵を生成する
- openssl_private_decrypt — 秘密鍵でデータを復号する
- openssl_private_encrypt — 秘密鍵でデータを暗号化する
- openssl_public_decrypt — 公開鍵でデータを復号する
- openssl_public_encrypt — 公開鍵でデータを暗号化する
- openssl_seal — データをシール(暗号化)する
- openssl_sign — 署名を生成する
- openssl_verify — 署名を検証する
- openssl_x509_check_private_key — 秘密鍵が証明書に対応するかを確認する
- openssl_x509_checkpurpose — 証明書が特定の目的に使用可能かどうか確認する
- openssl_x509_export_to_file — 証明書をファイルにエクスポートする
- openssl_x509_export — 証明書を文字列としてエクスポートする
- openssl_x509_free — 証明書リソースを開放する
- openssl_x509_parse — X509 証明書をパースし、配列として情報を返す
- openssl_x509_read — X.509 証明書をパースし、リソース ID を返す
OpenSSL
koen dot thomeer at pubmed dot be
31-Aug-2008 07:27
31-Aug-2008 07:27
