2013-06-13 2 views
0

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

Я прочитал руководство, и метод использует закрытый ключ, но в моем назначении я могу использовать только .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"; 

?> 

ответ

0

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

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

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

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

Смежные вопросы