(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
openssl_csr_sign — Assina um CSR com outro certificado (ou ele mesmo) e gera um certificado
$csr
,$ca_certificate
,$private_key
,$days
,$options
= null
,$serial
= 0,$serial_hex
= null
openssl_csr_sign() gera um certificado x509 a partir do CSR fornecido.
Nota: É preciso ter um arquivo openssl.cnf válido instalado para que esta função funcione corretamente. Consulte as notas na seção de instalação para obter mais informações.
csr
Um CSR gerado anteriormente por openssl_csr_new(). Também pode ser o caminho para um CSR codificado em PEM quando especificado como file://caminho/para/csr ou uma string exportada gerada por openssl_csr_export().
ca_certificate
O certificado gerado será assinado por ca_certificate
.
Se ca_certificate
for null
, o certificado gerado
será um certificado autoassinado.
private_key
private_key
é a chave privada que corresponde a
ca_certificate
.
days
days
especifica o período de validade
do certificado gerado, em dias.
options
A assinatura do CSR pode ter um ajuste fino usando options
.
Consulte openssl_csr_new() para mais informação sobre
options
.
serial
Um número de série opcional do certificado emitido. Se não for especificado, o padrão será 0.
Retorna um OpenSSLCertificate em caso de sucesso, false
em caso de falha.
Versão | Descrição |
---|---|
8.0.0 |
Em caso de sucesso, esta função agora retorna uma instância de OpenSSLCertificate;
anteriormente, retornava um resource do tipo OpenSSL X.509 .
|
8.0.0 |
csr aceita uma instância OpenSSLCertificateSigningRequest agora;
anteriormente, um resource do tipo OpenSSL X.509 CSR era aceito.
|
8.0.0 |
ca_certificate agora aceita uma instância de OpenSSLCertificate;
anteriormente, um resource do tipo OpenSSL X.509 era aceito.
|
8.0.0 |
private_key agora aceita uma instância de OpenSSLAsymmetricKey
ou de OpenSSLCertificate;
anteriormente, um resource do tipo OpenSSL key ou do tipo OpenSSL X.509
era aceito.
|
Exemplo #1 Exemplo de openssl_csr_sign() - assinando um CSR (como implementar sua própria CA)
<?php
// Vamos supor que este script esteja configurado para receber
// um CSR que foi colado em uma área de texto de outra página
$csrdata = $_POST["CSR"];
// Assinaremos a solicitação usando nosso próprio certificado de "autoridade
// de certificação". Pode ser usado qualquer certificado para assinar outro, mas
// o processo é inútil, a menos que o certificado de assinatura seja confiável
// para o software/usuários que lidarão com o certificado recém-assinado
// Precisamos do nosso certificado CA e de sua chave privada
$cacert = "file://caminho/para/ca.crt";
$privkey = array("file://caminho/para/ca.key", "sua_senha_da_chave_CA");
$usercert = openssl_csr_sign($csrdata, $cacert, $privkey, 365, array('digest_alg'=>'sha256') );
// Agora o certificado gerado é exibido para que o usuário possa
// copiá-lo e colá-lo em sua configuração local (como um arquivo
// para armazenar o certificado para o servidor SSL)
openssl_x509_export($usercert, $certout);
echo $certout;
// Mostra todos os erros que ocorreram aqui
while (($e = openssl_error_string()) !== false) {
echo $e . "\n";
}
?>