====== 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