<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'migration56.openssl.php',
    1 => 'Cambios para OpenSSL en PHP 5.6.x',
    2 => 'Cambios para OpenSSL en PHP 5.6.x',
  ),
  'up' => 
  array (
    0 => 'migration56.php',
    1 => 'Migraci&oacute;n de PHP 5.5.x a PHP 5.6.x',
  ),
  'prev' => 
  array (
    0 => 'migration56.new-functions.php',
    1 => 'Nuevas funciones',
  ),
  'next' => 
  array (
    0 => 'migration56.extensions.php',
    1 => 'Otros cambios en las extensiones',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">Cambios para OpenSSL en PHP 5.6.x</h2>

 <div class="sect2" id="migration56.openssl.peer-verification">
  <h3 class="title">Las envolturas de flujo ahora verifican de forma predeterminada los certificados de par y los nombres de host al usar SSL/TLS</h3>

  
   <p class="simpara">
    Todos los flujos cifrados de cliente activan ahora la verificación de pares de forma
    predeterminada. De forma predeterminada, esto utilizará el paquete de CA predeterminado de OpenSSL para verificar el
    certificado de par. Para la mayoría de los usuarios, esto no debería causar problemas al comunicarse con
    servidores que tengan certificados SSL válidos, ya que la mayoría de los
    distribuidores configuran OpenSSL para usar las rutas de CA predeterminadas.
   </p>

   <p class="simpara">
    El paquete de CA predeterminado se puede sobrescribir a nivel global utilizando las
    opciones de configuración openssl.cafile o openssl.capath, o para cada
    solicitud utilizando las opciones de contexto
    <a href="context.ssl.php#context.ssl.cafile" class="link"><code class="parameter">cafile</code></a> o
    <a href="context.ssl.php#context.ssl.capath" class="link"><code class="parameter">capath</code></a>
    .
   </p>

   <p class="simpara">
    Aunque en general no se recomienda, es posible desactivar la verificación del certificado
    de par para una solicitud estableciendo la opción de contexto
    <a href="context.ssl.php#context.ssl.verify-peer" class="link"><code class="parameter">verify_peer</code></a>
    a <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, y desactivar la validación del nombre del par configurando la opción de
    contexto <a href="context.ssl.php#context.ssl.verify-peer-name" class="link"><code class="parameter">verify_peer_name</code></a>
    a <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">Huellas digitales de certificado</h3>

  <p class="para">
   Se ha añadido soporte para extraer y verificar las huellas digitales de los
   certificados. <span class="function"><a href="function.openssl-x509-fingerprint.php" class="function">openssl_x509_fingerprint()</a></span> se ha añadido para
   extraer una huella digital de un certificado X.509 y se han añadido dos
   <a href="context.ssl.php" class="link">opciones de contexto</a> de flujo SSL:
   <code class="literal">capture_peer_cert</code> para capturar el certificado X.509
   del par y <code class="literal">peer_fingerprint</code> para asegurar que el
   certificado del par coincida con la huella digital dada.
  </p>
 </div>

 <div class="sect2" id="migration56.openssl.ciphers">
  <h3 class="title">Cifrados por defecto actualizados</h3>

  <p class="para">
   Los cifrados predeterminados utilizados por PHP se han actualizado a una lista
   más segura basada en las
   <a href="https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_Ciphersuite" class="link external">&raquo;&nbsp;recomendaciones de cifrado de Mozilla</a>,
   con dos exclusiones adicionales: cifrados Diffie-Hellman anónimos y RC4.
  </p>

  <p class="para">
   Esta lista es accesible a través de la nueva constante
   <strong><code><a href="openssl.ciphers.php#constant.openssl-default-stream-ciphers">OPENSSL_DEFAULT_STREAM_CIPHERS</a></code></strong> y puede ser reemplazada
   (como en versiones anteriores de PHP) definiendo la opción 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">Compresión desactivada por defecto</h3>

  <p class="para">
   La compresión SSL/TLS se ha desactivado de forma predeterminada para mitigar el ataque CRIME.
   PHP 5.4.13 añadió una opción de contexto
   <a href="context.ssl.php#context.ssl.disable-compression" class="link"><code class="parameter">disable_compression</code></a>
   para permitir desactivar la compresión; ahora está establecida en
   <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> (es decir, la compresión está desactivada) de forma predeterminada.
  </p>
 </div>

 <div class="sect2" id="migration56.openssl.honor-cipher-order">
  <h3 class="title">Permitir que los servidores prefieran su propio orden de cifrado</h3>

  <p class="para">
   Se ha añadido la opción de contexto SSL <code class="parameter">honor_cipher_order</code>
   para permitir que los servidores de flujos cifrados mitiguen las
   vulnerabilidades de BEAST prefiriendo los cifrados del servidor sobre los del cliente.
  </p>
 </div>

 <div class="sect2" id="migration56.openssl.metadata">
  <h3 class="title">Acceder al protocolo negociado y al cifrado</h3>

  <p class="para">
   Ahora se puede acceder al protocolo y cifrado negociados para un flujo cifrado
   a través de <span class="function"><a href="function.stream-get-meta-data.php" class="function">stream_get_meta_data()</a></span> o
   <span class="function"><a href="function.stream-context-get-options.php" class="function">stream_context_get_options()</a></span> cuando la opción de
   contexto SSL <code class="parameter">capture_session_meta</code> está establecida en <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>.
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$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; [
    </span><span style="color: #DD0000">'capture_session_meta' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">TRUE
</span><span style="color: #007700">]]);

</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">);
</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">];
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$meta</span><span style="color: #007700">);
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</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">Nuevas opciones para la confidencialidad persistente en servidores de flujos cifrados</h3>

  <p class="para">
    Los flujos cifrados de cliente ya admiten la confidencialidad persistente,
    dado que por lo general esta es controlada por el servidor. Los flujos cifrados de servidor en PHP
    que utilizan certificados compatibles con la confidencialidad persistente no requieren realizar
    ninguna acción adicional para habilitar PFS; sin embargo, se han añadido varias opciones de
    contexto SSL nuevas para permitir un control mucho más granular sobre PFS y
    manejar los problemas de compatibilidad que puedan surgir.
  </p>

  <dl>
   
    <dt><code class="parameter">ecdh_curve</code></dt>
    <dd>
     <p class="para">
      Esta opción permite seleccionar una curva específica para usar con
      los cifrados ECDH. Si no se especifica, se usará <code class="literal">prime256v1</code>.
     </p>
    </dd>
   
   
    <dt><code class="parameter">dh_param</code></dt>
    <dd>
     <p class="para">
      Ruta a un archivo que contiene parámetros para el intercambio de claves Diffie-Hellman,
      como el creado por el siguiente comando:
     </p>
     <div class="example-contents">
<div class="shellcode"><pre class="shellcode">openssl dhparam -out /path/to/my/certs/dh-2048.pem 2048</pre>
</div>
     </div>

    </dd>
   
   
    <dt><code class="parameter">single_dh_use</code></dt>
    <dd>
     <p class="para">
      Si se establece en <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, se creará un nuevo par de claves al usar los
      parámetros Diffie-Hellman, mejorando así la confidencialidad persistente.
     </p>
    </dd>
   
   
    <dt><code class="parameter">single_ecdh_use</code></dt>
    <dd>
     <p class="para">
      Si se establece en <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, siempre se generará un nuevo par de claves al
      negociar las suites de cifrado ECDH. Esto mejora la confidencialidad persistente.
     </p>
    </dd>
   
  </dl>
 </div>

 <div class="sect2" id="migration56.openssl.crypto-method">
  <h3 class="title">Selección de la versión SSL/TLS</h3>

  <p class="para">
   Ahora es posible seleccionar versiones específicas de SSL y
   TLS a través de la opción de contexto SSL <code class="parameter">crypto_method</code> o
   especificando un transporte concreto al crear una envoltura de flujo
   (por ejemplo, llamando a <span class="function"><a href="function.stream-socket-client.php" class="function">stream_socket_client()</a></span> o
   <span class="function"><a href="function.stream-socket-server.php" class="function">stream_socket_server()</a></span>).
  </p>

  <p class="para">
   La opción de contexto SSL <code class="parameter">crypto_method</code> acepta una máscara de bits
   enumerando los protocolos que están permitidos, como lo hace el
   <code class="parameter">crypto_type</code> de <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>Versiones de protocolo seleccionadas y opciones correspondientes</strong></caption>
   <thead><tr><th>Protocolo(s)</th>
   <th>Bandera cliente</th>
   <th>Bandera servidor</th>
   <th>Transporte</th>
   </tr></thead><tbody><tr class="seglistitem">
    <td class="seg">Cualquier versión TLS o 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">Cualquier versión 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"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

</span><span style="color: #FF8000">// Requiriendo TLS 1.0 o mejor al usar file_get_contents():
</span><span style="color: #0000BB">$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; [
        </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">,
    ],
]);
</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">);

</span><span style="color: #FF8000">// Requiriendo TLS 1.1 o 1.2:
</span><span style="color: #0000BB">$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; [
        </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">|
                           </span><span style="color: #0000BB">STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT</span><span style="color: #007700">,
    ],
]);
</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">);

</span><span style="color: #FF8000">// Conexión usando el transporte de socket tlsv1.2://.
</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">);

</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="migration56.openssl.default-certificate-paths">
  <h3 class="title">Adición de <span class="function"><a href="function.openssl-get-cert-locations.php" class="function">openssl_get_cert_locations()</a></span></h3>

  <p class="para">
   Se ha añadido la función <span class="function"><a href="function.openssl-get-cert-locations.php" class="function">openssl_get_cert_locations()</a></span>, la cual
   devuelve las ubicaciones predeterminadas en las que PHP buscará los paquetes de CA.
  </p>

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

   <p class="simpara">El ejemplo anterior mostrará:</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">Soporte SPKI</h3>

  <p class="para">
   Se ha añadido compatibilidad para generar, extraer y verificar claves públicas y desafíos firmados (SPKAC).
   Las funciones <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> y
   <span class="function"><a href="function.openssl-spki-export.php" class="function">openssl_spki_export()</a></span> se han añadido para crear, verificar y
   exportar tanto la clave pública en formato <abbr title="Privacy-Enhanced Mail">PEM</abbr> como el desafío asociados a un SPKAC generado
   a partir de un elemento <code class="literal">KeyGen</code> de HTML5.
  </p>

  <dl>
   
    <dt><code class="parameter">openssl_spki_new</code></dt>
    <dd>
     <p class="para">
      Genera un nuevo SPKAC usando la clave privada, <span class="type"><a href="language.types.string.php" class="type string">string</a></span> de desafío y
      el algoritmo de hashing.
     </p>

     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$pkey </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_pkey_new</span><span style="color: #007700">();
</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">);

</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">);
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
      </div>

      <p class="simpara">El ejemplo anterior mostrará:</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 el SPKAC proporcionado.
     </p>

     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$pkey </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_pkey_new</span><span style="color: #007700">();
</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">);

</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">);
</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">));
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
      </div>

     </div>
    </dd>
   

   
    <dt><code class="parameter">openssl_spki_export_challenge</code></dt>
    <dd>
     <p class="para">
      Exporta el desafío asociado al SPKAC proporcionado.
     </p>

     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$pkey </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_pkey_new</span><span style="color: #007700">();
</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">);

</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">);
</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">);
echo </span><span style="color: #0000BB">$challenge</span><span style="color: #007700">;
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
      </div>

      <p class="simpara">El ejemplo anterior mostrará:</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 la clave pública RSA en formato <abbr title="Privacy-Enhanced Mail">PEM</abbr> del SPKAC.
     </p>

     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$pkey </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_pkey_new</span><span style="color: #007700">();
</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">);

</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">);
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">);
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
      </div>

      <p class="simpara">El ejemplo anterior mostrará:</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); ?>