SSL: modulus из строки

MaxiStyle

Новичок
SSL: modulus из строки

На сайте организована авторизация по клиентским сертификатам, при чем у юзера может быть несколько сертификатов, но на разнах рабочих местах, мне необходимо в зависимости от ключа сертификата определять с какого рабочего места зашел юзер.
Для этого я переменную $_SERVER[SSL_CLIENT_CERT]) отдаю bash-скрипту на сервере. В скрипте необходимо извлечь из сертификата modulus и отдать обратно в php. PHP получает этот ключ и на основании его опряделят набор атрибутов для юзера.

php...
PHP:
$x = ereg_replace("\n$","",$_SERVER[SSL_CLIENT_CERT]);
$x = "'".ereg_replace("\n","&#&",$x)."'";
$x = ereg_replace("\&#\&$","",$x);
exec("/www/apache2/cgi-bin/read_ssl2www ".$x, $xx, $return);

//в итоге в $xx[0] должен быть ключ
bash...
openssl x509 -in $1 -noout -modulus

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

Alexandre

PHPПенсионер
http://ru2.php.net/manual/en/function.openssl-x509-parse.php подойдет?
вообще-то самое простое - это создать временный файл а параметр файла передать в openssl, как ты и предложел
 

MaxiStyle

Новичок
Alexandre
Не пойдет.
1. Использовать php функции с сертификатом не достаточно безопасно.
2. Хоть этот вариант и прост, но все же могут возникнуть проблемы с удалением временного файла, одновременным доступом и т.п.

Нашел решение на Perle:

@z=split("&#&",$ARGV[0]);
open(F,"| /usr/bin/openssl x509 -noout -modulus 2>&1");
foreach $tmp (@z){
print F $tmp."\n";
}
close(F);


Т.е. все тоже самое, только вместо exec:
$xx=`readssl.pl $x 2>/dev/null`;
$xx=ereg_replace("Modulus=","",ereg_replace("\n","",$xx));
В результате в $xx появляется необходимый ключ.
 
Сверху