CSR(証明書署名要求)を取得して署名するWebページがあります。問題は、CSRから公開鍵を抽出する方法がわからないことです。requestがpemでエンコードされたリクエストを保持する文字列であるところを試しopenssl_csr_get_public_key($request)
ましたが、うまくいかないようです。これを行う方法についてのアイデアはありますか?
ありがとう!
phpseclibの純粋なPHPCSR実装は、一般的にはるかに「フォールトトレラント」であることがわかりました。例えば。
<?php
include('File/X509.php');
$x509 = new File_X509();
$csr = $x509->loadCSR('...'); // see google.crt
print_r($sr);
?>
これで、必要なCSRから何にでもアクセスできるようになります。
公開鍵自体に署名する必要はありませんが、CSR、つまり署名には、公開鍵と一緒に署名されるCSRのメタデータが含まれます。
PHPコマンドは
openssl_csr_sign
です。
これを機能させるには、CSR(クライアントから提供される)とCAcertファイル(サーバー上のファイルからロードされ、コマンドに文字列として渡される)が必要です。後者の生成については、こちらをご覧ください:http ://www.openssl.org/docs/apps/ca.html (公式)およびこちら(方法)http://www.freebsdmadeeasy.com/tutorials/freebsd/create- a-ca-with-openssl.php
明らかに、あなたが「本物の」CAである場合(たとえば、他の人が信頼するCAによって署名された証明書を持っている場合)、すでに証明書(彼らによって署名されている)を持っているでしょう。
一般的に言って、他の人から提供された公開鍵に署名することは良い習慣ではありません。クライアントにCSRメタデータを提供するように依頼し、クライアントのキーを生成して、秘密キーと証明書の両方を返します。これは、PKCS 12形式で実行できます(openssl_pkcs12_export
交換全体を参照)。 SSL経由で発生する必要があります。
csrが正しくフォーマットされていることを確認してください。PHPがプラスをスペースなどに変更していないことを確認してください。