Как я могу создать самозаверяющий сертификат с помощью phpseclib

Как я могу создать самозаверяющий сертификат с помощью phpseclib из существующего файла .csr, только я могу использовать файл .csr.

Я прочитал руководство, и метод использует закрытый ключ, но в моем задании я могу использовать только файл .csr.

Я надеюсь, что вы можете мне помочь.

Вот мой код:

<?php

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

    if ($_FILES["file"]["error"] > 0)
    {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
        //This is the content of the file   
        $csr = file_get_contents($_FILES["file"]["name"]);
    }

    // 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->loadCSR('...'); // see csr.pem
    // calling setPublicKey() is unnecessary when loadCSR() is called

    $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"; 

?>

person darthlitox    schedule 13.06.2013    source источник


Ответы (1)


Вам нужен закрытый ключ, простой и понятный. Иначе чем вы собираетесь его подписывать? Поле подписи сертификата X.509 является обязательным.

Я имею в виду, что если все, что вам нужно, это открытый ключ, вам не нужно беспокоиться о накладных расходах X.509. Вы можете просто получить открытый ключ, который выглядит так:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0
FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/
3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB
-----END PUBLIC KEY-----

Но X.509 — это больше, чем просто открытый ключ — это подписанный открытый ключ. Технически CSR тоже является таковым, но CSR всегда являются самоподписанными, тогда как сертификаты X.509 могут быть подписаны кем угодно.

person neubert    schedule 13.06.2013