Mostra la pàginaRevisions anteriorsQuè hi enllaçaExporta a PDFTorna dalt Aquesta pàgina és només de lectura. Podeu veure'n el codi font, però no podeu canviar-la. Consulteu el vostre administrador si penseu que això és degut a algun error. ====== Certificados, certificaciones, Entidades de Certificación ====== /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 de clave privada:<code bash>openssl genrsa -des3 -out CA_privada.key 4096</code> (poner contraseña) - Creación solicitud de certificado:<code bash>openssl req -new -key CA_privada.key -out CA_solicitud.csr</code> - rellenar los campos solicitados - en Organizational y Common Name usar el nombre que se mostrará (aka "certMate") - 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 de clave privada: <code bash>openssl genrsa -out Servidor_privada.key 4096</code> - Creación solicitud de certificado: <code bash>openssl req -new -key Servidor_privada.key -out Servidor_solicitud.csr</code> - rellenar los campos solicitados - Common Name usar la URL del servidor que queremos certificar - 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 ===== - Generación clave privada:<code bash>openssl genrsa -out Cliente_privada.key 4096</code> - 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 - 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 - 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.txt Darrera modificació: 03/12/2021 22:18per mate