phpseclib подписывает CSR с собственным CA

Я хочу подписать CSR с моим CA. Я взял некоторые части этого кода из phpseclib: примеры X.509.

<?php
include('File/X509.php');
include('Crypt/RSA.php');
$c = $_POST['csr'];

$CAPrivKey = new Crypt_RSA();
$CAPrivKey->setPassword('PrivatePassword');
$CAPrivKey->loadKey("-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,47EF178926906B55

lVtuTcJ1etpRaUT9086Vm5dsop8o5D92VVubcyhI268ZG4frRCBR4yuyORp+zdS2
[...]
gyx636VRV7aekLc6IFHJ56MzZRA/23izSooWqAJLTGEBrc4CWuodj9cc/+p3+9zC
-----END RSA PRIVATE KEY-----
");

$issuer = new File_X509();
$issuer->setPrivateKey($CAPrivKey);
$issuer->loadX509("-----BEGIN CERTIFICATE-----
MIIK0zCCBrugAwIBAgIJAPzTFDuzmcUcMA0GCSqGSIb3DQEBBQUAMIGhMQswCQYD
[...]
6F5Ji6w2IfD6xFhgvyTmqYgsae3+DEX6TAJosaI0EJQz6vYeubQb
-----END CERTIFICATE-----
");


$subject = new File_X509();

$subject->loadCSR($c); 


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

$result = $x509->sign($issuer, $subject);

echo $x509->saveX509($result);
?>

В $csr у меня есть CSR, отформатированный следующим образом:

----- НАЧАТЬ ЗАПРОС СЕРТИФИКАТА----- MIGYMIGFAgAwbzELMAkGA1UEBgwCUEwxCjAIBgNVBAgMAS4xETAPBgNVBAcMCExlb2Frd2RhMQow [...] dGVzdC5wbDAQMAsGCSqGSIb3DQEBAQMBADALBgkqhkiG9w0BAQUDAQUDAQA= -----END CERTIFIC

Этот код дает мне ошибку: Fatal error: Maximum execution time of 30 seconds exceeded in D:\wamp\www\Math\BigInteger.php on line 1659


person Disa    schedule 17.12.2012    source источник
comment
Если вы запускаете эквивалентные команды openssl на том же сервере из командной строки, сколько времени занимает подписание?   -  person rlandster    schedule 17.12.2012
comment
@rlandster Не более двух секунд   -  person Disa    schedule 17.12.2012


Ответы (1)


Сколько битов в ключе? У вас установлены gmp, bcmath или openssl? Phpseclib использует каждый из них для ускорения работы, если они доступны, а если нет, он будет использовать собственную внутреннюю реализацию, которая является самой медленной. Согласно тестам math_biginteger на phpseclib.sourceforge.net чистая реализация php в более старых версиях php займет много времени даже с 2048-битным ключом.

person mailpa    schedule 17.12.2012
comment
Верно, включение расширения GMP сократило время примерно до одной секунды. Спасибо за помощь. Другая проблема, которая только что возникла, заключается в том, что когда я пытаюсь открыть файл .cdr, Windows говорит, что он поврежден. - person Disa; 17.12.2012
comment
Как вы пытаетесь открыть файл? - person mailpa; 18.12.2012
comment
Я также был бы не против узнать, насколько большим был ключ к моему собственному назиданию. Судя по тем временам, когда вы говорите, что материал берет, я думаю, это довольно большой ключ. Вроде 8192 бита или что-то в этом роде.. - person mailpa; 18.12.2012
comment
Я просто дважды щелкаю файл .cer (в Windows 7), затем появляется окно с ошибкой. Мой корневой закрытый ключ имеет длину 8192 бита. - person Disa; 18.12.2012
comment
Ух ты. Хорошая догадка с моей стороны, лол! Я поиграю с Windows 7, чтобы открыть его, когда я вернусь домой к компьютеру. Навскидку я думаю, что, возможно, .cers должен быть в формате der, а не в формате pem. Я проверю это и дам вам знать! - person mailpa; 18.12.2012
comment
По умолчанию File_X509 phpseclib не устанавливает серийный номер, что означает, что серийный номер по умолчанию равен 0. Он должен быть ненулевым, чтобы Windows могла его принять. Так что сделайте $x509->setSerialNumber('1'). Или $x509-›setSerialNumber('2') или что-то в этом роде. - person ; 18.12.2012