내부 용으로 간단한 PKI 인프라를 만들려고하고 있으며, <keygen>
태그를 사용하고 싶습니다.phpseclib에서 생성 된 인증서가 KEYGEN 제출 후 브라우저에서 유효하지만 인식되지 않습니다.
이 태그가 서버에 SPKAK을 보내면 서명해야한다는 것을 알고 있습니다. exec
을 사용하여 openssl을 시작하고 php 5.5를 사용할 수 없기 때문에 SPKAK를 처리하는 유일한 방법은 phpseclib입니다.
이
내 코드입니다 :<?PHP
if(isset($_POST['key'])){
header('Content-type: application/x-x509-user-cert');
header('Content-disposition: attachment; filename=user.crt');
include('File/X509.php');
$capem = file_get_contents('root-ca.crt');
$subject = new File_X509();
$subject->loadCA($capem);
$subject->loadSPKAC($_POST['key']);
$subject->setDN('CN=Username');
$issuer = new File_X509();
$issuer->loadX509($capem);
$cakey = new Crypt_RSA();
$cakey->setPassword('SECRETPASSWORD');
$cakey->loadKey(file_get_contents('root-ca.key'));
$issuer->setPrivateKey($cakey);
$x509 = new File_X509();
$cert = $x509->sign($issuer, $subject);
$x509->loadX509($cert);
$x509->setExtension('id-ce-keyUsage', array('digitalSignature', 'keyEncipherment'));
$x509->setStartDate('-1 day');
$x509->setEndDate('+ 3 year');
$x509->setSerialNumber('1235', 10);
$cert = $x509->sign($issuer, $x509);
echo $x509->saveX509($cert);
}else{
?>
<form method="POST">
<keygen name="key" keytype="RSA" challenge="ucert">
<button>SEND</button>
</form>
<?PHP
}
?>
이상한 것은 생성 된 인증서가 제공 유효 (창 그것을 인식)은 그것을 인식하지 않습니다 (내 testings를에 크롬과 파이어 폭스 모두)하지만 브라우저이다 오류 201 INVALID CERT, 브라우저에 저장된 개인 키와 연결되어 있지 않습니다.
어떻게해야할까요?
인증을 수행하거나 특정 웹 사이트에 대한 https 연결을 설정하기 위해 X509 인증서를 사용하고 있습니까? 나중에 웹 사이트를 지정해야 할 수도 있습니다. 예. '$ subject-> setDomain ('www.google.com', 'www.yahoo.com') '또는 무엇인가. 또한 CA로 사용하고 싶다면'$ x509-> makeCA();'를 할 필요가있다. IDK가 귀하의 질문에 대답하는지 여부. – neubert
클라이언트 인증을위한 인증서를 원합니다. 이미 CA 인증서를 만들었으므로이 스크립트를 사용하여 새 유효한 인증서를 성공적으로 만들 수 있습니다. 문제는 생성 된 인증서를 개인 키 – JohnKiller
과 연결하는 대신 오류 201이 발생한다는 것입니다. 내 생각에 필요한 확장 프로그램이 누락되었습니다. 아니면 keyUsage 필드가 필요합니다. 나는 집에 돌아 가면 놀 수 있지만, 할 수 있으면 직접 로그인 할 수있는 샘플 X509 인증서를 생성 한 다음 pastebin.com 링크를 통해 게시 할 수 있습니다. work idk. – neubert