Verifica a assinatura digital do certificado x509 em relação a uma chave pública

# openssl_x509_verify

(PHP 7 >= 7.4.0, PHP 8)

openssl_x509_verify — Verifica a assinatura digital do certificado x509 em relação a uma chave pública

### Descrição

function openssl_x509_verify(OpenSSLCertificate|string `$certificate`, OpenSSLAsymmetricKey|OpenSSLCertificate|array|string `$public_key`): int

openssl_x509_verify() verifica se o certificado `certificate` foi assinado pela chave privada correspondente à chave pública `public_key`.

### Parâmetros

`certificate`
  Consulte Parâmetros Chave/Certificado para obter uma lista de valores válidos.
`public_key`

  OpenSSLAsymmetricKey - uma chave, retornada por openssl_get_publickey()

  string - uma chave no formato PEM (por exemplo, `-----BEGIN PUBLIC KEY----- MIIBCgK...`)

### Valor Retornado

Retorna 1 se a assinatura estiver correta, 0 se estiver incorreta e -1 em caso de erro.

### Registro de Alterações

Versão | Descrição
--- | ---
8.0.0 | `certificate` agora aceita uma instância de OpenSSLCertificate; anteriormente, um resource do tipo `OpenSSL X.509` era aceito.
8.0.0 | `public_key` agora aceita uma instância de OpenSSLAsymmetricKey ou OpenSSLCertificate; anteriormente, um resource do tipo `OpenSSL key` ou `OpenSSL X.509` era aceito.

### Exemplos

Exemplo #1 Exemplo de openssl_x509_verify()

    <?php
    $hostname = "news.php.net";
    $ssloptions = array(
        "capture_peer_cert" => true,
        "capture_peer_cert_chain" => true,
        "allow_self_signed"=> false,
        "CN_match" => $hostname,
        "verify_peer" => true,
        "SNI_enabled" => true,
        "SNI_server_name" => $hostname,
    );

    $ctx = stream_context_create( array("ssl" => $ssloptions) );
    $result = stream_socket_client("ssl://$hostname:443", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $ctx);
    $cont = stream_context_get_params($result);
    $x509 = $cont["options"]["ssl"]["peer_certificate"];
    $certparsed = openssl_x509_parse($x509);

    foreach($cont["options"]["ssl"]["peer_certificate_chain"] as $chaincert)
    {
        $chainparsed = openssl_x509_parse($chaincert);
        $chain_public_key = openssl_get_publickey($chaincert);
        $r = openssl_x509_verify($x509, $chain_public_key);
        if ($r==1)
        {
            echo $certparsed['subject']['CN'];
            echo " foi assinado digitalmente por ";
            echo $chainparsed['subject']['CN']."\n";
        }
    }
    ?>

### Veja Também

- openssl_verify() - Verifica assinatura
- openssl_get_publickey() - Sinônimo de openssl_pkey_get_public

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open