openssl_csr_sign
(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
Descrição
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
. Seca_certificate
fornull
, o certificado gerado será um certificado autoassinado. private_key
-
private_key
é a chave privada que corresponde aca_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 sobreoptions
. 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";
}
?>