<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/migration56.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'migration56.openssl.php',
    1 => 'Mudan&ccedil;as do OpenSSL no PHP 5.6.x',
    2 => 'Mudan&ccedil;as do OpenSSL no PHP 5.6.x',
  ),
  'up' => 
  array (
    0 => 'migration56.php',
    1 => 'Migrando do PHP 5.5.x para o PHP 5.6.x',
  ),
  'prev' => 
  array (
    0 => 'migration56.new-functions.php',
    1 => 'Novas fun&ccedil;&otilde;es',
  ),
  'next' => 
  array (
    0 => 'migration56.extensions.php',
    1 => 'Outras mudan&ccedil;as a extens&otilde;es',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'appendices/migration56/openssl.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="migration56.openssl" class="sect1">
 <h2 class="title">Mudanças do OpenSSL no PHP 5.6.x</h2>

 <div class="sect2" id="migration56.openssl.peer-verification">
  <h3 class="title">Empacotadores de fluxo agora verificam nomes e certificados de servidor por padrão ao usar SSL/TLS</h3>

  
   <p class="para">
    Todos os fluxos criptografados de cliente agora permitem a verificação de mesmo nível por padrão. Por
    padrão, será usada a coleção de CAs padrão do OpenSSL para verificar o certificado
    de mesmo nível. Na maioria dos casos, nenhuma alteração precisará ser feita para se comunicar
    com servidores com certificados SSL válidos, pois as distribuições geralmente
    configuram o OpenSSL com coleções de CAs bem conhecidos.
   </p>

   <p class="para">
    A coleção de CAs padrão pode ser substituída globalmente definindo
    a configuração openssl.cafile ou openssl.capath, ou
    por requisição usando as opções de contexto
    <a href="context.ssl.php#context.ssl.cafile" class="link"><code class="parameter">cafile</code></a> ou
    <a href="context.ssl.php#context.ssl.capath" class="link"><code class="parameter">capath</code>
    </a>.
   </p>

   <p class="para">
    Embora em geral não seja recomendado, é possível desabilitar a verificação
    de certificado de mesmo nível para uma requisição definindo a opção de contexto
    <a href="context.ssl.php#context.ssl.verify-peer" class="link"><code class="parameter">verify_peer</code></a>
    para <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> e é possível desabilitar a verificação de nome de mesmo nível definindo a opção de contexto
    <a href="context.ssl.php#context.ssl.verify-peer-name" class="link"><code class="parameter">verify_peer_name</code></a>
    para <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
   </p>

 </div>

 <div class="sect2" id="migration56.openssl.fingerprint">
  <h3 class="title">Impressões digitais de certificado</h3>

  <p class="para">
   Foi adicionado suporte para extrari e verificar impressões digitais de
   certificado. <span class="function"><a href="function.openssl-x509-fingerprint.php" class="function">openssl_x509_fingerprint()</a></span> foi adicionada para
   extrair uma impressão digital de um certificado X.509 certificate, e duas
   opções de <a href="context.ssl.php" class="link">contexto de fluxo SSL</a> foram
   adicionadas: <code class="literal">capture_peer_cert</code> para capturar o certificado X.509
   do servidor, e <code class="literal">peer_fingerprint</code> para certificar que o
   certificado do servidor deve corresponder à impressão digital informada.
  </p>
 </div>

 <div class="sect2" id="migration56.openssl.ciphers">
  <h3 class="title">Cifras padrões atualizadas</h3>

  <p class="para">
   As cifras padrões usadas pelo PHP foram atualizadas para uma lista mais segura
   com base nas
   <a href="https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_Ciphersuite" class="link external">&raquo;&nbsp;Recomendações de crifra Mozilla</a>,
   com duas novas exclusões: cifras anônimas Diffie-Hellman, e RC4.
  </p>

  <p class="para">
   Esta lista pode ser acessada através da nova constante
   <strong><code><a href="openssl.ciphers.php#constant.openssl-default-stream-ciphers">OPENSSL_DEFAULT_STREAM_CIPHERS</a></code></strong>, e pode ser
   substituída (como em versões anteriores do PHP) configurando-se as opções
   de contexto
   <a href="context.ssl.php#context.ssl.ciphers" class="link"><code class="parameter">ciphers</code></a>.
  </p>
 </div>

 <div class="sect2" id="migration56.openssl.tls-compression">
  <h3 class="title">Compressão desabilitada por padrão</h3>

  <p class="para">
   Compressão SSL/TLS foi desabilitada por padrão para mitigar o ataque
   CRIME. O PHP 5.4.13 adicionou uma opção de contexto
   <a href="context.ssl.php#context.ssl.disable-compression" class="link"><code class="parameter">disable_compression</code></a>
   para permitir que a compressão seja desabilitada: ela agora está definida para
   <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> (isto é, compressão desabilitada) por padrão.
  </p>
 </div>

 <div class="sect2" id="migration56.openssl.honor-cipher-order">
  <h3 class="title">Permite que servidores definam sua própria ordem de cifras de preferência</h3>

  <p class="para">
   A opção de contexto SSL <code class="parameter">honor_cipher_order</code> foi adicionada
   para permitir que servidores de fluxo criptografado mitiguem vulnerabilidades BEAST
   definindo as cifras do servidor e não as do cliente.
  </p>
 </div>

 <div class="sect2" id="migration56.openssl.metadata">
  <h3 class="title">Acesso ao protocolo e à cifra negociados</h3>

  <p class="para">
   O protocolo e a cifra que foram negociados para um fluxo criptografado
   agora podem ser acessados por <span class="function"><a href="function.stream-get-meta-data.php" class="function">stream_get_meta_data()</a></span> ou
   <span class="function"><a href="function.stream-context-get-options.php" class="function">stream_context_get_options()</a></span> quando a opção de contexto SSL
   <code class="parameter">capture_session_meta</code> for definida para
   <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$ctx </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">([</span><span style="color: #DD0000">'ssl' </span><span style="color: #007700">=&gt; [<br />    </span><span style="color: #DD0000">'capture_session_meta' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">TRUE<br /></span><span style="color: #007700">]]);<br /><br /></span><span style="color: #0000BB">$html </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'https://google.com/'</span><span style="color: #007700">, </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$meta </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_get_options</span><span style="color: #007700">(</span><span style="color: #0000BB">$ctx</span><span style="color: #007700">)[</span><span style="color: #DD0000">'ssl'</span><span style="color: #007700">][</span><span style="color: #DD0000">'session_meta'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$meta</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">O exemplo acima produzirá:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(4) {
  [&quot;protocol&quot;]=&gt;
  string(5) &quot;TLSv1&quot;
  [&quot;cipher_name&quot;]=&gt;
  string(20) &quot;ECDHE-RSA-AES128-SHA&quot;
  [&quot;cipher_bits&quot;]=&gt;
  int(128)
  [&quot;cipher_version&quot;]=&gt;
  string(11) &quot;TLSv1/SSLv3&quot;
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration56.openssl.forward-secrecy">
  <h3 class="title">Novas opções para sigilo de encaminhamento perfeito em servidores de fluxo criptografados</h3>

  <p class="para">
   Os fluxos criptografados de clientes já suportam sigilo de encaminhamento perfeito,
   pois geralmente são controlados pelo servidor. Fluxos criptografados de servidor no PHP usando
   certificados capazes de sigilo de encaminhamento perfeito não precisam tomar nenhuma ação
   adicional para habilitar o SEP; entretanto um número de opções de contexto SSL
   foi adicionado para permitir maior controle sobre o SEP e lidar com
   problemas de compatibilidade que possam aparecer.
  </p>

  <dl>
   
    <dt><code class="parameter">ecdh_curve</code></dt>
    <dd>
     <p class="para">
      Esta opção permite a seleção de uma curva específica para uso com cifras
      ECDH. Se não especificada, <code class="literal">prime256v1</code> será usada.
     </p>
    </dd>
   
   
    <dt><code class="parameter">dh_param</code></dt>
    <dd>
     <p class="para">
      Um caminho para um arquivo contendo parâmetros para a troca de chaves Diffie-Hellman,
      como as criadas pelo comando:
     </p>
     <div class="example-contents">
<div class="shellcode"><pre class="shellcode">openssl dhparam -out /caminho/para/meus/certificados/dh-2048.pem 2048</pre>
</div>
     </div>

    </dd>
   
   
    <dt><code class="parameter">single_dh_use</code></dt>
    <dd>
     <p class="para">
      Se definida para <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, um novo par de chaves será criado usando parâmetros
      Diffie-Hellman, desta forma melhorando o sigilo de encaminhamento.
     </p>
    </dd>
   
   
    <dt><code class="parameter">single_ecdh_use</code></dt>
    <dd>
     <p class="para">
      Se definida para <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, um novo par de chaves será sempre gerado quando conjuntos
      de cifras ECDH forem negociadas. Isto melhora o sigilo de encaminhamento.
     </p>
    </dd>
   
  </dl>
 </div>

 <div class="sect2" id="migration56.openssl.crypto-method">
  <h3 class="title">Seleção de versão SSL/TLS</h3>

  <p class="para">
   Agora é possível selecionar versões específicas de SSL e TLS através da
   opçõa de contexto <code class="parameter">crypto_method</code> ou pela especificação de
   um transporte específico ao criar um empacotador de fluxo (por exemplo, chamando-se
   <span class="function"><a href="function.stream-socket-client.php" class="function">stream_socket_client()</a></span> ou
   <span class="function"><a href="function.stream-socket-server.php" class="function">stream_socket_server()</a></span>).
  </p>

  <p class="para">
   A opção de contexto <code class="parameter">crypto_method</code> aceita uma máscara de bits
   enumerando os protocolos permitidos, da mesma forma que a opção
   <code class="parameter">crypto_type</code> da função
   <span class="function"><a href="function.stream-socket-enable-crypto.php" class="function">stream_socket_enable_crypto()</a></span>.
   
  </p>

  <table class="segmentedlist">
   <caption><strong>Versões de protocolo selecionadas e opções correspondentes</strong></caption>
   <thead><tr><th>Protocolo(s)</th>
   <th>Opção do Cliente</th>
   <th>Opção do Servidor</th>
   <th>Transporte</th>
   </tr></thead><tbody><tr class="seglistitem">
    <td class="seg">Qualquer versão TLS ou SSL</td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-any-client">STREAM_CRYPTO_METHOD_ANY_CLIENT</a></code></strong></td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-any-server">STREAM_CRYPTO_METHOD_ANY_SERVER</a></code></strong></td>
    <td class="seg"><code class="literal">ssl://</code></td>
   </tr>
   <tr class="seglistitem">
    <td class="seg">Qualquer versão TLS</td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-tls-client">STREAM_CRYPTO_METHOD_TLS_CLIENT</a></code></strong></td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-tls-server">STREAM_CRYPTO_METHOD_TLS_SERVER</a></code></strong></td>
    <td class="seg"><code class="literal">tls://</code></td>
   </tr>
   <tr class="seglistitem">
    <td class="seg">TLS 1.0</td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-tlsv1-0-client">STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT</a></code></strong></td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-tlsv1-0-server">STREAM_CRYPTO_METHOD_TLSv1_0_SERVER</a></code></strong></td>
    <td class="seg"><code class="literal">tlsv1.0://</code></td>
   </tr>
   <tr class="seglistitem">
    <td class="seg">TLS 1.1</td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-tlsv1-1-client">STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT</a></code></strong></td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-tlsv1-1-server">STREAM_CRYPTO_METHOD_TLSv1_1_SERVER</a></code></strong></td>
    <td class="seg"><code class="literal">tlsv1.1://</code></td>
   </tr>
   <tr class="seglistitem">
    <td class="seg">TLS 1.2</td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-tlsv1-2-client">STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT</a></code></strong></td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-tlsv1-2-server">STREAM_CRYPTO_METHOD_TLSv1_2_SERVER</a></code></strong></td>
    <td class="seg"><code class="literal">tlsv1.2://</code></td>
   </tr>
   <tr class="seglistitem">
    <td class="seg">SSL 3</td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-sslv3-client">STREAM_CRYPTO_METHOD_SSLv3_CLIENT</a></code></strong></td>
    <td class="seg"><strong><code><a href="stream.constants.php#constant.stream-crypto-method-sslv3-server">STREAM_CRYPTO_METHOD_SSLv3_SERVER</a></code></strong></td>
    <td class="seg"><code class="literal">sslv3://</code></td>
   </tr>
  </tbody></table>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">// Requisitando TLS 1.0 ou melhor ao usar file_get_contents():<br /></span><span style="color: #0000BB">$ctx </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">([<br />    </span><span style="color: #DD0000">'ssl' </span><span style="color: #007700">=&gt; [<br />        </span><span style="color: #DD0000">'crypto_method' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">STREAM_CRYPTO_METHOD_TLS_CLIENT</span><span style="color: #007700">,<br />    ],<br />]);<br /></span><span style="color: #0000BB">$html </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'https://google.com/'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Requisitando TLS 1.1 ou 1.2:<br /></span><span style="color: #0000BB">$ctx </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_context_create</span><span style="color: #007700">([<br />    </span><span style="color: #DD0000">'ssl' </span><span style="color: #007700">=&gt; [<br />        </span><span style="color: #DD0000">'crypto_method' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT </span><span style="color: #007700">|<br />                           </span><span style="color: #0000BB">STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT</span><span style="color: #007700">,<br />    ],<br />]);<br /></span><span style="color: #0000BB">$html </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'https://google.com/'</span><span style="color: #007700">, </span><span style="color: #0000BB">false</span><span style="color: #007700">, </span><span style="color: #0000BB">$ctx</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Conectando com uso de transporte de fluxo tlsv1.2://.<br /></span><span style="color: #0000BB">$sock </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_socket_client</span><span style="color: #007700">(</span><span style="color: #DD0000">'tlsv1.2://google.com:443/'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration56.openssl.default-certificate-paths">
  <h3 class="title">Adicionada a função <span class="function"><a href="function.openssl-get-cert-locations.php" class="function">openssl_get_cert_locations()</a></span></h3>

  <p class="para">
   A função <span class="function"><a href="function.openssl-get-cert-locations.php" class="function">openssl_get_cert_locations()</a></span> foi
   adicionada: ela retorna as localizações padrões onde o PHP irá pesquisar
   por pacotes de certificados CA.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">openssl_get_cert_locations</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <p class="para">O exemplo acima produzirá:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
array(8) {
  [&quot;default_cert_file&quot;]=&gt;
  string(21) &quot;/etc/pki/tls/cert.pem&quot;
  [&quot;default_cert_file_env&quot;]=&gt;
  string(13) &quot;SSL_CERT_FILE&quot;
  [&quot;default_cert_dir&quot;]=&gt;
  string(18) &quot;/etc/pki/tls/certs&quot;
  [&quot;default_cert_dir_env&quot;]=&gt;
  string(12) &quot;SSL_CERT_DIR&quot;
  [&quot;default_private_dir&quot;]=&gt;
  string(20) &quot;/etc/pki/tls/private&quot;
  [&quot;default_default_cert_area&quot;]=&gt;
  string(12) &quot;/etc/pki/tls&quot;
  [&quot;ini_cafile&quot;]=&gt;
  string(0) &quot;&quot;
  [&quot;ini_capath&quot;]=&gt;
  string(0) &quot;&quot;
}
</pre></div>
   </div>
  </div>
 </div>

 <div class="sect2" id="migration56.openssl.spki">
  <h3 class="title">Suporte a SPKI</h3>

  <p class="para">
   Foi adicionado suporte para geração, extração e verificação de chaves públicas assinadas
   e desafios (SPKAC em inglês). <span class="function"><a href="function.openssl-spki-new.php" class="function">openssl_spki_new()</a></span>,
   <span class="function"><a href="function.openssl-spki-verify.php" class="function">openssl_spki_verify()</a></span>,
   <span class="function"><a href="function.openssl-spki-export-challenge.php" class="function">openssl_spki_export_challenge()</a></span> e
   <span class="function"><a href="function.openssl-spki-export.php" class="function">openssl_spki_export()</a></span> foram adicionadas para criar, verificar,
   exportar chaves públicas <abbr title="Privacy-Enhanced Mail">PEM</abbr> e desafio associado a partir de um
   SPKAC gerado por um elemento <code class="literal">KeyGen</code> de HTML5.
  </p>

  <dl>
   
    <dt><code class="parameter">openssl_spki_new</code></dt>
    <dd>
     <p class="para">
      Gera uma novo SPKAC usando chave privada, string de desafio e
      algoritmo de hash.
     </p>

     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$pkey </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_pkey_new</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">openssl_pkey_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$pkey</span><span style="color: #007700">, </span><span style="color: #DD0000">'secret passphrase'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$spkac </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_spki_new</span><span style="color: #007700">(</span><span style="color: #0000BB">$pkey</span><span style="color: #007700">, </span><span style="color: #DD0000">'challenge string'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <p class="para">O exemplo acima produzirá:</p>
      <div class="example-contents screen">
<div class="cdata"><pre>
SPKAC=MIIBXjCByDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3L0IfUijj7+A8CPC8EmhcdNoe5fUAog7OrBdhn7EkxFButUp40P7+LiYiygYG1TmoI/a5EgsLU3s9twEz3hmgY9mYIqb/rb+SF8qlD/K6KVyUORC7Wlz1Df4L8O3DuRGzx6/+3jIW6cPBpfgH1sVuYS1vDBsP/gMMIxwTsKJ4P0CAwEAARYkYjViMzYxMTktNjY5YS00ZDljLWEyYzctMGZjNGFhMjVlMmE2MA0GCSqGSIb3DQEBAwUAA4GBAF7hu0ifzmjonhAak2FhhBRsKFDzXdKIkrWxVNe8e0bZzMrWOxFM/rqBgeH3/gtOUDRS5Fnzyq425UsTYbjfiKzxGeCYCQJb1KJ2V5Ij/mIJHZr53WYEXHQTNMGR8RPm7IxwVXVSHIgAfXsXZ9IXNbFbcaLRiSTr9/N4U+MXUWL7
</pre></div>
      </div>
     </div>
    </dd>
   

   
    <dt><code class="parameter">openssl_spki_verify</code></dt>
    <dd>
     <p class="para">
      Verifica o SPKAC informado.
     </p>

     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$pkey </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_pkey_new</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">openssl_pkey_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$pkey</span><span style="color: #007700">, </span><span style="color: #DD0000">'secret passphrase'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$spkac </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_spki_new</span><span style="color: #007700">(</span><span style="color: #0000BB">$pkey</span><span style="color: #007700">, </span><span style="color: #DD0000">'challenge string'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">openssl_spki_verify</span><span style="color: #007700">(</span><span style="color: #0000BB">$spkac</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </div>
    </dd>
   

   
    <dt><code class="parameter">openssl_spki_export_challenge</code></dt>
    <dd>
     <p class="para">
      Exporta o desafio associado a partir do SPKAC fornecido.
     </p>

     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$pkey </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_pkey_new</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">openssl_pkey_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$pkey</span><span style="color: #007700">, </span><span style="color: #DD0000">'secret passphrase'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$spkac </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_spki_new</span><span style="color: #007700">(</span><span style="color: #0000BB">$pkey</span><span style="color: #007700">, </span><span style="color: #DD0000">'challenge string'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$challenge </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_spki_export_challenge</span><span style="color: #007700">(</span><span style="color: #0000BB">$spkac</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$challenge</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <p class="para">O exemplo acima produzirá:</p>
      <div class="example-contents screen">
<div class="cdata"><pre>
challenge string
</pre></div>
      </div>
     </div>
    </dd>
   

   
    <dt><code class="parameter">openssl_spki_export</code></dt>
    <dd>
     <p class="para">
      Exporta chave pública RSA em formato <abbr title="Privacy-Enhanced Mail">PEM</abbr>, a partir do SPKAC.
     </p>

     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$pkey </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_pkey_new</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">openssl_pkey_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$pkey</span><span style="color: #007700">, </span><span style="color: #DD0000">'secret passphrase'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$spkac </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_spki_new</span><span style="color: #007700">(</span><span style="color: #0000BB">$pkey</span><span style="color: #007700">, </span><span style="color: #DD0000">'challenge string'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">openssl_spki_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$spkac</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <p class="para">O exemplo acima produzirá:</p>
      <div class="example-contents screen">
<div class="cdata"><pre>
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcvQh9SKOPv4DwI8LwSaFx02h7
l9QCiDs6sF2GfsSTEUG61SnjQ/v4uJiLKBgbVOagj9rkSCwtTez23ATPeGaBj2Zg
ipv+tv5IXyqUP8ropXJQ5ELtbXPUN/gvw7cO5EbPHr/7eMhbpw8Gl+AfWxW5hLW8
MGw/+AwwjHBOwong/QIDAQAB
-----END PUBLIC KEY-----
</pre></div>
      </div>
     </div>
    </dd>
   
  </dl>
 </div>
</div><?php manual_footer($setup); ?>