openssl genrsa -des3 -out CA_privada.key 4096
(poner contraseña)
openssl req -new -key CA_privada.key -out CA_solicitud.csr
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]
openssl genrsa -out Servidor_privada.key 4096
openssl req -new -key Servidor_privada.key -out Servidor_solicitud.csr
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)
openssl genrsa -out Cliente_privada.key 4096
openssl req -new -key Cliente_privada.key -out Cliente_solicitud.csr
openssl x509 -days 3650 -CA CA_certificado.crt -CAkey CA_privada.key -set_serial 02 -in Cliente_solicitud.csr -req -out Cliente_certificado.crt
openssl pkcs12 -export -out Cliente_certificado.pfx -inkey Cliente_privada.key -in Cliente_certificado.crt -certfile CA_certificado.crt
openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes -out domain.key
openssl x509 -in nombre_del fichero_der -inform DER -out nombre_del_fichero_pem -outform PEM
<?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); ?>
<?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); ?>
Listen 443
LoadModule ssl_module modules/mod_ssl.so
mods-enabled
NameVirtualHost *:443
<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>