openssl_csr_sign

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

openssl_csr_signAssina um CSR com outro certificado (ou ele mesmo) e gera um certificado

Descrição

openssl_csr_sign(
    OpenSSLCertificateSigningRequest|string $csr,
    OpenSSLCertificate|string|null $ca_certificate,
    #[\SensitiveParameter] OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key,
    int $days,
    ?array $options = null,
    int $serial = 0,
    ?string $serial_hex = null
): OpenSSLCertificate|false

openssl_csr_sign() gera um certificado x509 a partir do CSR fornecido.

Note: É 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.

Parâmetros

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.

Valor Retornado

Retorna um OpenSSLCertificate em caso de sucesso, false em caso de falha.

Registro de Alterações

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.

Exemplos

Example #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";
}
?>