2

私はphpを生成example.com.crtして使用したい。example.com.pemファイルを取得するための Linux コマンドは次のとおりです。

openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes 
            -out example.com.crt -keyout example.com.pem

PHPで2つのファイルの内容を2つの文字列で取得したい。これに相当するphpコードは何ですか?

更新: Linux コマンドの実行を求めないでください。

4

5 に答える 5

2

ここで別のコマンド:

<?php 
// generate 2048-bit RSA key
$pkGenerate = openssl_pkey_new(array(
    'private_key_bits' => 2048,
    'private_key_type' => OPENSSL_KEYTYPE_RSA
));

// get the private key
openssl_pkey_export($pkGenerate,$pkGeneratePrivate); // NOTE: second argument is passed by reference

// get the public key
$pkGenerateDetails = openssl_pkey_get_details($pkGenerate);
$pkGeneratePublic = $pkGenerateDetails['key'];

// free resources
openssl_pkey_free($pkGenerate);

// fetch/import public key from PEM formatted string
// remember $pkGeneratePrivate now is PEM formatted...
// this is an alternative method from the public retrieval in previous
$pkImport = openssl_pkey_get_private($pkGeneratePrivate); // import
$pkImportDetails = openssl_pkey_get_details($pkImport); // same as getting the public key in previous
$pkImportPublic = $pkImportDetails['key'];
openssl_pkey_free($pkImport); // clean up

// let's see 'em
echo "\n".$pkGeneratePrivate
    ."\n".$pkGeneratePublic
    ."\n".$pkImportPublic
    ."\n".'Public keys are '.(strcmp($pkGeneratePublic,$pkImportPublic)?'different':'identical').'.';
?>
于 2016-01-23T09:09:13.210 に答える
1

純粋な PHP X.509 実装である phpseclib を使用できます。

http://phpseclib.sourceforge.net/x509/examples.html#selfsigned

<?php
include('File/X509.php');
include('Crypt/RSA.php');

// create private key / x.509 cert for stunnel / website
$privKey = new Crypt_RSA();
extract($privKey->createKey());
$privKey->loadKey($privatekey);

$pubKey = new Crypt_RSA();
$pubKey->loadKey($publickey);
$pubKey->setPublicKey();

$subject = new File_X509();
$subject->setDNProp('id-at-organizationName', 'phpseclib demo cert');
//$subject->removeDNProp('id-at-organizationName');
$subject->setPublicKey($pubKey);

$issuer = new File_X509();
$issuer->setPrivateKey($privKey);
$issuer->setDN($subject->getDN());

$x509 = new File_X509();
//$x509->setStartDate('-1 month'); // default: now
//$x509->setEndDate('+1 year'); // default: +1 year

$result = $x509->sign($issuer, $subject);
echo "the stunnel.pem contents are as follows:\r\n\r\n";
echo $privKey->getPrivateKey();
echo "\r\n";
echo $x509->saveX509($result);
echo "\r\n";
?>

これにより、公開鍵に対応する秘密鍵を使用して、秘密鍵と自己署名 X.509 証明書 (CLI の例のように) が作成されます。

于 2012-11-30T16:04:09.573 に答える
0

exec()またはsystem()関数を使用してコマンドを実行し、file_get_contents()を使用して出力ファイルを読み取ります。

于 2012-11-29T09:46:26.720 に答える
0

PHP への OpenSSL 拡張機能がありますexec()

http://php.net/manual/en/book.openssl.php

于 2012-11-29T09:47:46.117 に答える
-1

おそらくこれは最善の解決策ではありませんが、次のような exec() と file_get_contents() を使用できます。

exec("openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out example.com.crt -keyout example.com.pem");
$crtFile = file_get_contents("example.com.crt");
$pemFile = file_get_contents("example.com.pem");

ファイルのアクセス許可と明らかにファイル パスに注意してください。これらのコマンドの周りにエラー処理を追加した方がよいでしょう。

詳細: http://php.net/manual/en/function.exec.php

そして: http://php.net/manual/en/function.file-get-contents.php

于 2012-11-29T09:46:13.590 に答える