====== 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:openssl genrsa -des3 -out CA_privada.key 4096 (poner contraseña) - Creación solicitud de certificado:openssl req -new -key CA_privada.key -out CA_solicitud.csr - rellenar los campos solicitados - 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) se puede quitar la contraseña a una KEY con: openssl rsa -in [original.key] -out [new.key] ===== Creación certificado servidor ===== - Creación de clave privada: openssl genrsa -out Servidor_privada.key 4096 - Creación solicitud de certificado: openssl req -new -key Servidor_privada.key -out Servidor_solicitud.csr - rellenar los campos solicitados - 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 Servidor_certificado.crt (pedirá la contraseña del CA_privado.key) ===== Creación certificado cliente ===== - Generación clave privada:openssl genrsa -out Cliente_privada.key 4096 - Generación solitud de certificado:openssl req -new -key Cliente_privada.key -out Cliente_solicitud.csr - 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 - 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 == .pfx to apache * openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer * openssl pkcs12 -in domain.pfx -nocerts -nodes -out domain.key /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:openssl x509 -in nombre_del fichero_der -inform DER -out nombre_del_fichero_pem -outform PEM * Certificados de DNIe: [[http://www.dnie.es/seccion_integradores/certs.html]] ===== funciones PHP acceso certificados ===== ===== 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: 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 AllowOverride All Options -Indexes SSLVerifyClient require SSLVerifyDepth 2 # para DNIe, son CA subordinadas de otra CA SSLRequire ( %{SSL_CLIENT_V_REMAIN}>="0" ) # certificado vigente * SSLOptions +ExportCertData -> nos permite acceder a datos del certificado * SSLOptions +StdEnvVars -> nos permite acceder a variables relacionadas ( * SSLCACertificateFile -> 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 -> 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