(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
openssl_csr_new — Gera um CSR
$distinguished_names
,&$private_key
,$options
= null
,$extra_attributes
= null
openssl_csr_new() gera um novo CSR
com base na informação fornecida por distinguished_names
.
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.
distinguished_names
O Nome Distinto (DN) ou campos de assunto a serem usados no
certificado. O parâmetro distinguished_names
é um
array associativo onde as chaves representam os nomes de atributo dos
Nomes Distintos e os valores podem ser strings (para valores
simples) ou arrays (se for necessário definir múltiplos valores).
private_key
private_key
deve ser definido par uma chave privada que
tenha sido gerada anteriormente por openssl_pkey_new() (ou
de outra forma obtida pelas outras funções da família openssl_pkey), ou
uma variável null
. Se o valor for uma variável null
, uma nova chave primária será
gerada com base no parâmetro options
fornecido e
será atribuída à variável informada. A parte pública correspondente da
chave será usada para assinar o CSR.
options
Por padrão, a informação no openssl.conf
do sistema
é utilizada para inicializar a requisição; uma seção do arquivo de configuração
pode ser especificada configurando a chave config_section_section
no parâmetro
options
. Um arquivo de configuração Openssl alternativo
pode ser especificado configurando o valor da chave
config
para o caminho do arquivo a ser usado.
As chaves a seguir, se estiverem presentes em options
,
comportam-se como suas equivalentes no openssl.conf
, como
listadas na tabela abaixo.
Chave options |
Tipo | Equivalente no openssl.conf |
Descrição |
---|---|---|---|
digest_alg | string | default_md | Método de resumo ou de hash de assinatura, normalmente um dos métodos informados por openssl_get_md_methods() |
x509_extensions | string | x509_extensions | Seleciona quais extensões devem ser usadas ao criar um certificado x509 |
req_extensions | string | req_extensions | Seleciona quais extensões devem ser usadas ao criar um CSR |
private_key_bits | int | default_bits | Especifica quantos bits devem ser usados para gerar uma chave privada |
private_key_type | int | none | Especifica o tipo de chave privada a ser criada. Pode ser uma das
constantes OPENSSL_KEYTYPE_DSA ,
OPENSSL_KEYTYPE_DH ,
OPENSSL_KEYTYPE_RSA ou
OPENSSL_KEYTYPE_EC .
O valor padrão é OPENSSL_KEYTYPE_RSA .
|
encrypt_key | bool | encrypt_key | Uma chave exportada (com senha) deve ser criptografada? |
encrypt_key_cipher | int | none | Uma das constantes de cifra. |
curve_name | string | none | Um dos nomes de curva informados por openssl_get_curve_names(). |
config | string | N/A | Caminho para o arquivo alternativo openssl.conf. |
extra_attributes
extra_attributes
é usado para especificar atributos
adicionais para o CSR. É um array associativo
cujas chaves são convertidas para OIDs e aplicadas como
atributos CSR.
Retorna o CSR em caso de sucesso, true
se a criação do CSR for bem sucedida mas a assintura
falhar ou false
em caso de falha.
Versão | Descrição |
---|---|
8.4.0 |
O array associativo do parâmetro distinguished_names agora suporta arrays como valores,
permitindo que múltiplos sejam especificados para um único atributo.
|
8.4.0 |
O parâmetro extra_attributes agora define corretamente os atributos CSR,
ao invés de modificar o Nome Distinto do assunto como fazia antes incorretamente.
|
8.0.0 |
Em caso de sucesso, esta função agora retorna uma instância de OpenSSLCertificateSigningRequest;
anteriormente, retornava um resource do tipo OpenSSL X.509 CSR .
|
8.0.0 |
private_key agora aceita uma instância de OpenSSLAsymmetricKey;
anteriormente, aceitava um resource do tipo OpenSSL key .
|
7.1.0 |
options agora também suporta curve_name .
|
Exemplo #1 Criando um certificado autoassinado
<?php
// para certificados SSL de servidor, o commonName é o domínio a ser protegido
// para certificados de e-mail S/MIME, o commonName é o proprietário do endereço de e-mail
// campos de localização e identificação referem-se ao proprietário do domínio ou do e-mail a serem protegidos
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
);
// Gera um novo par de chaves privadas (e públicas)
$privkey = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
// Gera uma requisição de assinatura de certificado
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));
// Gera um certificado autoassinado, válido por 365 dias
$x509 = openssl_csr_sign($csr, null, $privkey, $days=365, array('digest_alg' => 'sha256'));
// Grava a chave privada, o CSR e o certificado autoassinado para uso posterior
openssl_csr_export($csr, $csrout)var_dump($csrout);
openssl_x509_export($x509, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);
// Exibe erros que possam ter ocorrido
while (($e = openssl_error_string()) !== false) {
echo $e . "\n";
}
?>
Exemplo #2 Criando um certificado ECC autoassinado (a partir do PHP 7.1.0)
<?php
$subject = array(
"commonName" => "docs.php.net",
);
// Gere um novo par de chaves privadas (e públicas)
$private_key = openssl_pkey_new(array(
"private_key_type" => OPENSSL_KEYTYPE_EC,
"curve_name" => 'prime256v1',
));
// Gera uma requisição de assinatura de certificado
$csr = openssl_csr_new($subject, $private_key, array('digest_alg' => 'sha384'));
// Gera um certificado EC autoassinado
$x509 = openssl_csr_sign($csr, null, $private_key, $days=365, array('digest_alg' => 'sha384'));
openssl_x509_export_to_file($x509, 'ecc-cert.pem');
openssl_pkey_export_to_file($private_key, 'ecc-private.key');
?>