(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 = nullopenssl_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.
csrUm 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.
serialUm número de série opcional do certificado emitido. Se não for especificado, o padrão será 0.
serial_hex
Uma string hexadecimal opcional representando o número serial do
certificado emitido. Se definido, tome precedência sobre o valor do
parâmetro serial. Se não especificado ou se definido como
null, o valor do parâmetro serial é usado no
lugar.
Retorna um OpenSSLCertificate em caso de sucesso, false em caso de falha.
| Versão | Descrição |
|---|---|
| 8.4.0 |
O parâmetro serial_hex foi adicionado.
|
| 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";
}
?>