Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
linux:certificados:cayotros [30/08/2013 05:23] – [Creación certificado usuario] matelinux:certificados:cayotros [03/12/2021 22:18] (actual) – [Certificados, certificaciones, Entidades de Certificación] mate
Línia 1: Línia 1:
 ====== Certificados, certificaciones, Entidades de Certificación ====== ====== Certificados, certificaciones, Entidades de Certificación ======
 /vía: [[http://www.rinconastur.com/php/php21.php]] /vía: [[http://www.rinconastur.com/php/php21.php]]
 +  * [[web:security:openssl|]]
 +===== todo =====
 +  * si no es https, redirección a https
 +  * si no tiene certificado de CA ficticea, llevar a página donde descargar
  
 ===== Creación entidad certificadora ===== ===== Creación entidad certificadora =====
-  - Creación de clave privada:''openssl genrsa -des3 -out CA_privada.key 2048 '' (poner contraseña) +  - Creación de clave privada:<code bash>openssl genrsa -des3 -out CA_privada.key 4096</code> (poner contraseña) 
-  - Creación solicitud de certificado: ''openssl req -new -key CA_privada.key -out CA_solicitud.csr ''+  - Creación solicitud de certificado:<code bash>openssl req -new -key CA_privada.key -out CA_solicitud.csr</code>
     - rellenar los campos solicitados     - rellenar los campos solicitados
     - en Organizational y Common Name usar el nombre que se mostrará (aka "certMate")     - en Organizational y Common Name usar el nombre que se mostrará (aka "certMate")
-  - Creación certificado: ''openssl x509 -days 3650 -signkey CA_privada.key -in CA_solicitud.csr -req -out CA_certificado.crt '' (pedirá la contraseña del CA_privado.key)+  - Creación certificado:<code bash>openssl x509 -days 3650 -signkey CA_privada.key -in CA_solicitud.csr -req -out CA_certificado.crt</code> (pedirá la contraseña del CA_privado.key) 
 + 
 +se puede quitar la contraseña a una KEY con: <code bash>openssl rsa -in [original.key] -out [new.key]</code>
  
 ===== Creación certificado servidor ===== ===== Creación certificado servidor =====
-  - Creación de clave privada: ''openssl genrsa -out Servidor_privada.key 2048 '' +  - Creación de clave privada: <code bash>openssl genrsa -out Servidor_privada.key 4096</code> 
-  - Creación solicitud de certificado: ''openssl req -new -key Servidor_privada.key -out Servidor_solicitud.scr ''+  - Creación solicitud de certificado: <code bash>openssl req -new -key Servidor_privada.key -out Servidor_solicitud.csr</code>
     - rellenar los campos solicitados     - rellenar los campos solicitados
     - Common Name usar la URL del servidor que queremos certificar     - Common Name usar la URL del servidor que queremos certificar
-  - Creación certificado: ''openssl x509 -days 3650 -CA CA_certificado.crt -CAkey CA_privada.key -set_serial 01 - in Servidor_solicitud.csr -req -out Sevidor_certificado.crt '' (pedirá la contraseña del CA_privado.key)+  - Creación certificado: <code bash>openssl x509 -days 3650 -CA CA_certificado.crt -CAkey CA_privada.key -set_serial 01 -in Servidor_solicitud.csr -req -out Servidor_certificado.crt</code> (pedirá la contraseña del CA_privado.key)
 ===== Creación certificado cliente ===== ===== Creación certificado cliente =====
-  - Generación clave privada: ''openssl genrsa -out Cliente_privada.key 2048 '' +  - Generación clave privada:<code bash>openssl genrsa -out Cliente_privada.key 4096</code> 
-  - Generación solitud de certificado: ''openssl req -new -key Cliente_privada.key -out Cliente_solicitud.csr ''+  - Generación solitud de certificado:<code bash>openssl req -new -key Cliente_privada.key -out Cliente_solicitud.csr</code>
     - en organizational y common name usar el nombre del usuario     - en organizational y common name usar el nombre del usuario
-  - Generación certificado: ''openssl x509 -days 3650 -CA CA_certificado.crt -CAkey CA_privada.key - set_serial 02 -in Cliente_solicitud.csr -req -out Cliente_certificado.crt ''+  - Generación certificado:<code bash>openssl x509 -days 3650 -CA CA_certificado.crt -CAkey CA_privada.key -set_serial 02 -in Cliente_solicitud.csr -req -out Cliente_certificado.crt</code>
     - los //set_serial// establecen un número de orden apra el control de los certificados de la CA     - los //set_serial// establecen un número de orden apra el control de los certificados de la CA
-  - exportación a pkcs12 (para importar en el navegador): ''openssl pkcs12 -export -out Cliente_certificado.pfx -inkey Cliente_privada.key -in Cliente_certificado.crt -certfile CA_certificado.crt+  - exportación a pkcs12 (para importar en el navegador):<code bash>openssl pkcs12 -export -out Cliente_certificado.pfx -inkey Cliente_privada.key -in Cliente_certificado.crt -certfile CA_certificado.crt</code> 
 + 
 +== .pfx to apache 
 +  * <code bash>openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer</code> 
 +  * <code bash>openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key</code> 
 + 
 +/via: [[https://stackoverflow.com/questions/8774574/how-can-i-convert-a-pfx-certificate-file-for-use-with-apache-on-a-linux-server]] 
 + 
 +===== formatos de los certificados ===== 
 +  * DER: formato binario (Java, Macintosh) 
 +  * PEM: formato BASE64 
 +  * convertir de DER a PEM:<code bash>openssl x509 -in nombre_del fichero_der -inform DER -out nombre_del_fichero_pem -outform PEM</code> 
 +  * Certificados de DNIe: [[http://www.dnie.es/seccion_integradores/certs.html]] 
 + 
 +===== funciones PHP acceso certificados ===== 
 +<code php> 
 +<?php  
 +/* empezamos leyendo el fichero que contiene el certificado y recogiendo su contenido en una  
 +variable que llamaremos $cert */  
 +$f = fopen("juan_certificado.cer", "r");  
 + $cert = fread($f, 8192);  
 + fclose($f);  
 + /* la funcion openssl_x509_parse nos extrae los datos y los convierte en un array */  
 + $datos = openssl_x509_parse($cert,0);  
 +?>  
 +</code> 
 +<code php> 
 +<?php  
 +/* empezamos comprobando si la petición se hizo en modo seguro o no. La variable de entorno HTTPS recoge es condición.  
 +   Si estamos en modo seguro recogerá en la variable cert el valor transferido en la peticion  
 +   y en caso contrario leería el fichero de ejemplo que tenemos en el directorio cursophp y al que se accede en modo no seguro */  
 + 
 +if (getenv('HTTPS')=='on'){  
 +   $cert=$_SERVER['SSL_CLIENT_CERT'];  
 + }else{  
 +   $f = fopen("juan_certificado.cer", "r");  
 + $cert = fread($f, 8192);  
 + fclose($f);  
 + }  
 + 
 +/* Extraemos los datos del certificado usando nombres cortos para los índices */  
 + 
 + $datos = openssl_x509_parse($cert,0);  
 +?> 
 +</code> 
 + 
 +===== verificación validez DNIe ===== 
 + 
 +===== modificaciones apache ===== 
 +  * en httpd.conf o ports.conf o apache2.conf: 
 +    * añadir '' Listen 443 '' 
 +    * añadir o activar '' LoadModule ssl_module modules/mod_ssl.so '' 
 +      * también puede activarse en ''mods-enabled'' 
 +    * añadir '' NameVirtualHost *:443 '' 
 +  * en definición de nuevo VirtualHost: <code apache sslvirtualhost.conf><VirtualHost *:443> 
 +        SSLEngine On 
 +        SSLOptions +StdEnvVars +ExportCertData 
 +        SSLCertificateFile /etc/apache2/certificados/Server_Certificado.crt 
 +        SSLCertificateKeyFile /etc/apache2/certificados/Server_Private.key 
 +        SSLCACertificateFile /etc/apache2/certificados/CertificadosRaiz.crt 
 +        DocumentRoot /home/www/ssl.intranet.havasww.es/public 
 +        ErrorLog /home/www/logs/ssl.intranet.havasww.es-error.log 
 +        CustomLog /home/www/logs/ssl.intranet.havasww.es-access.log common 
 +        LogLevel warn 
 +        <Directory "/home/www/ssl.intranet.havasww.es/public"> 
 +                AllowOverride All 
 +                Options -Indexes 
 +        </Directory> 
 + 
 +        <Directory "/home/www/ssl.intranet.havasww.es/public/solocerts"> 
 +                SSLVerifyClient require 
 + 
 +                SSLVerifyDepth 2 
 +                # para DNIe, son CA subordinadas de otra CA 
 + 
 +                SSLRequire ( %{SSL_CLIENT_V_REMAIN}>="0"
 +                # certificado vigente 
 +        </Directory> 
 +</VirtualHost></code> 
 +    * SSLOptions +ExportCertData -> nos permite acceder a datos del certificado 
 +    * SSLOptions +StdEnvVars -> nos permite acceder a variables relacionadas (<?php print getenv('SSL_CLIENT_S_DN');?> 
 +    * SSLCACertificateFile <path> -> nos permite incorporar certificados de CA (reales o ficticias) 
 +    * SSLVerifyClient require -> obliga a seleccionar un certificado para acceder (en este caso, al directorio solocerts) 
 +    * SSLVerifyDepth <n> -> por si la CA ha delegado en otras subs-CA la certificación (como en DNIe) 
 +    * SSLRequire ( %{SSL_CLIENT_V_REMAIN}>="0" ) -> certificado no caducado 
 +      * se pueden concatener varios requisitos con AND y OR
  • linux/certificados/cayotros.1377865394.txt.gz
  • Darrera modificació: 30/08/2013 05:23
  • per mate