Crear los certificados SSL para nuestro servidor web HTTPS con Apache, OpenSSL y Debian Lenny...

20
Crear los certificados SSL para nuestro servidor web HTTPS con Apache, OpenSSL y Debian Lenny Cuando escribimos nuestra contraseña para entrar al panel de administración de WordPress, ésta va en texto plano. En una red WiFi, por ejemplo, cualquiera podría ver muy fácilmente nuestra contraseña sólo con capturar los paquetes de la red mientras nos estamos registrando. Aunque hay soluciones parciales, la solución definitiva, como siempre, pasa por usar HTTPS o, lo que es lo mismo, HTTP sobre SSL. Desde la versión 2.6, WordPress permite usar SSL fácilmente para el panel de administrador. Así que me puse a hacer pruebas para configurar SSL en mi servidor web. Sin embargo, ocurre una cosa muy interesante con el protocolo SSL cuando se usa con HTTP: que no se pueden servir fácilmente múltiples sitios virtuales encriptados con SSL desde una misma IP. En el contexto de los servidores web, hablamos de sitios virtuales cuando servimos páginas de diferentes dominios desde un único servidor, en muchos casos compartiendo la IP y en otros, cada dominio con una IP diferente, posiblemente con interfaces virtuales. Cuando usamos HTTP sin SSL, el servidor sabe qué página en concreto estamos solicitando porque el cliente HTTP (el navegador) lo indica en la cabecera Host: GET /blog/ HTTP/1.1 Host: www.vicente-navarro.com User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Sin embargo, cuando se usa SSL, la negociación entre los extremos y la encriptación ocurre en una capa inferior, antes de que éstos comiencen a usar el protocolo HTTP. Por ello, no es trivial configurar diferentes certificados para diferentes sitios web virtuales. En la configuración típica, sólo podremos usar un certificado compartido para todas las páginas que se sirvan por HTTPS desde un único servidor web, a menos que usemos una IP diferente para cada sitio.

Transcript of Crear los certificados SSL para nuestro servidor web HTTPS con Apache, OpenSSL y Debian Lenny...

Crear los certificados SSL para nuestro servidor web HTTPS con Apache, OpenSSL y Debian LennyCuando escribimos nuestra contrasea para entrar al panel de administracin de WordPress, sta va en texto plano. En una red WiFi, por ejemplo, cualquiera podra ver muy fcilmente nuestra contrasea slo con capturar los paquetes de la red mientras nos estamos registrando. Aunque hay soluciones parciales, la solucin definitiva, como siempre, pasa por usar HTTPS o, lo que es lo mismo, HTTP sobre SSL. Desde la versin 2.6, WordPress permite usar SSL fcilmente para el panel de administrador. As que me puse a hacer pruebas para configurar SSL en mi servidor web. Sin embargo, ocurre una cosa muy interesante con el protocolo SSL cuando se usa con HTTP: que no se pueden servir fcilmente mltiples sitios virtuales encriptados con SSL desde una misma IP. En el contexto de los servidores web, hablamos de sitios virtuales cuando servimos pginas de diferentes dominios desde un nico servidor, en muchos casos compartiendo la IP y en otros, cada dominio con una IP diferente, posiblemente con interfaces virtuales. Cuando usamos HTTP sin SSL, el servidor sabe qu pgina en concreto estamos solicitando porque el cliente HTTP (el navegador) lo indica en la cabecera Host: GET /blog/ HTTP/1.1 Host: www.vicente-navarro.com User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Sin embargo, cuando se usa SSL, la negociacin entre los extremos y la encriptacin ocurre en una capa inferior, antes de que stos comiencen a usar el protocolo HTTP. Por ello, no es trivial configurar diferentes certificados para diferentes sitios web virtuales. En la configuracin tpica, slo podremos usar un certificado compartido para todas las pginas que se sirvan por HTTPS desde un nico servidor web, a menos que usemos una IP diferente para cada sitio. Para este inconveniente hay workarounds (TLS Support for name-based virtual servers) y soluciones definitivas con el Server Name Indication (SNI). Apache 2.2 no soporta SNI, pero el mdulo de Apache mod_gnutls (incluido en Debian Lenny: libapache2-mod-gnutls) nos permitira usarlo. Desafortunadamente, aunque Firefox (>=2), Safari, Chrome y Opera soportan esta extensin del protocolo, Internet Explorer 6 e Internet Explorer 7 para Windows XP no soportan SNI, por lo que no podemos usarla de momento por motivos obvios.

Por todos estos motivos, descubr que con los hostings profesionales no resulta fcil o, mejor dicho, barato, tener un servidor SSL. Es lo que me va a impedir a m poder configurar SSL para el panel de administracin de LHYLE. Sin embargo, podemos seguir estudiando cmo podramos hacerlo si lo que tenemos es un Hosting Casero o si le hemos contratado un servidor dedicado a nuestro proveedor de hosting.

Habilitar el servidor HTTPS en Debian LennySi instalamos los paquetes de Apache 2.2 en un sistema con la recin liberada Debian Lenny, ya tendremos por defecto configurado un servidor HTTPS junto con el tpico HTTP. En Debian Etch no era as, sino que slo se configuraba el servidor HTTP. As, si en Debian Etch el fichero /etc/apache2/sites-available/default era as: NameVirtualHost * ServerAdmin webmaster@localhost DocumentRoot /var/www/ ... Ahora, en Debian Lenny, tenemos un fichero /etc/apache2/ports.conf (que es incluido desde el /etc/apache2/apache2.conf) con este contenido: NameVirtualHost *:80 Listen 80 # SSL name based virtual hosts are not yet supported, therefore no # NameVirtualHost statement here Listen 443 Y ahora, el /etc/apache2/sites-available/default menciona especficamente el puerto 80 en la directiva VirtualHost, para diferenciar las peticiones al puerto 80 (HTTP) de las peticiones al puerto 443 (HTTPS): ServerAdmin webmaster@localhost DocumentRoot /var/www/ ... De modo que ahora hay una nueva configuracin de sitio disponible, en la ruta /etc/apache2/sites-available/default-ssl: ServerAdmin webmaster@localhost

DocumentRoot /var/www/ ... # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # # # # # # A self-signed (snakeoil) certificate can be created by installing the ssl-cert package. See /usr/share/doc/apache2.2-common/README.Debian.gz for more info. If both key and certificate are stored in the same file, only the SSLCertificateFile directive is needed.

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 Como hemos comentado antes, mientras que podemos aadir a la configuracin de Apache tantos ficheros de sitios virtuales para HTTP que comiencen por como queramos, para HTTPS, en el puerto 443, slo podremos tener uno (a menos que configuremos diferentes IPs para los diferentes sitios). Las lneas claves para activar el SSL son stas: SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key Dichos certificados de aceite de serpiente (Wikipedia: Snake oil (cryptography)) los genera el script de post- instalacin del paquete ssl-cert de Debian asociados al hostname del sistema. Aunque recin instalado, el Apache 2.2 de Debian Lenny est preparado para servir contenido HTTPS, an hay que habilitar el sitio y el mdulo de SSL. Para ello usaremos a2ensite y a2enmod: # a2enmod ssl Enabling module ssl. See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates. Run '/etc/init.d/apache2 restart' to activate new configuration! # a2ensite default-ssl Enabling site default-ssl. Run '/etc/init.d/apache2 reload' to activate new configuration! # /etc/init.d/apache2 restart

Ahora ya podramos conectarnos por HTTPS a https://subdominio.dominio.tld. Sin embargo, al estar usando el certificado de aceite de serpiente, lo que nos encontraremos ser con que el navegador nos da una o dos advertencias sobre el dominio. Una segura porque el certificado no est firmado por una autoridad de confianza y tal vez otra porque el dominio, hostname o IP que estamos usando para acceder al sitio no coincida con el que indica el certificado. Por ejemplo, yo he instalado Debian Lenny en un sistema cuyo nombre es telemaco, pero quiero acceder al sitio web seguro https://desarrollo.vicente-navarro.com que he configurado en telemaco. Me encontrara con los errores comentados, uno porque el certificado es para acceder al sitio web https://telemaco, y otro porque el certificado no est firmado por una autoridad reconocida:

Si decidimos seguir adelante y examinamos el certificado, veremos que realmente es un certificado para el sitio telemaco, no para desarrollo.vicente-navarro.com:

Por tanto, si accedemos con https://telemaco, ya slo encontraremos el error de que el certificado no es de fiar, pero no el de que el certificado no es para este sitio:

Necesitamos resolver estos problemas con el certificado que estamos usando.

Crear un Certificado Autofirmado

Veamos primero cmo conseguir un certificado autofirmado asociado a nuestro sitio. Para ello, podemos usar el siguiente comando: # openssl req -new -x509 -nodes -out /etc/ssl/certs/desarrollo.vicentenavarro.com_self.crt -keyout /etc/ssl/private/desarrollo.vicentenavarro.com_self.key Generating a 1024 bit RSA private key ......++++++ ....................................................................++++++ writing new private key to '/etc/ssl/private/desarrollo.vicente-navarro.com_self.key' ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [AU]:ES State or Province Name (full name) [Some-State]:Spain Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:Desarrollo de Lo hice y lo entendi Organizational Unit Name (eg, section) []:El blog de Vicente Navarro Common Name (eg, YOUR name) []:desarrollo.vicente-navarro.com Email Address []:[email protected] Y ahora, apuntando a dicho certificado en la configuracin del sitio: SSLCertificateFile /etc/ssl/certs/desarrollo.vicente-navarro.com_self.crt SSLCertificateKeyFile /etc/ssl/private/desarrollo.vicentenavarro.com_self.key Y tras reiniciar el servidor, al conectarnos al sitio, el navegador nos advertir de que el certificado no es de fiar pero al menos, s que corresponde a la pgina en cuestin. Como es nuestro propio sitio web y, por tanto, seguro que nos vamos a fiar de l, podramos aadir una excepcin que se almacene de forma permanente en nuestro navegador para, finalmente, usar encriptacin sin problemas. En el caso que he expuesto al principio, el mo de querer usar SSL en el interfaz de administracin de WordPress, tener un certificado as es ms que suficiente, ya que nadie ms aparte de m debera de necesitar confiar en el certificado.

La excepcin se almacena en forma de certificado en la pestaa de autoridades reconocidas y en forma de entrada en la pestaa de servidores:

Es necesario tener el servidor explcitamente autorizado en la pestaa de servidores porque si editamos las propiedades del certificado en el navegador, veremos que, por defecto, no sirve para identificar sitios web. Si lo modificramos, no sera necesaria la excepcin de la pestaa de servidores:

Crear un Certificado Firmado por nuestra propia Autoridad CertificadoraSi lo que tenemos entre manos es un proyecto muy serio, y necesitamos crear un certificado SSL firmado de verdad por alguna de las autoridades certificadoras cuyos certificados raz estn ya incluidos en todos los navegadores estndar (p.e. VeriSign), tras hacer la compra y seguir todos los trmites necesarios, tendremos que crear una clave privada y generar una peticin de certificado para firmar y envirsela a la autoridad certificadora. Sin embargo, si estamos en el entorno de la Intranet de una compaa, donde podramos controlar que todos los sistemas incluyeran el certificado raz de la misma, o, simplemente, para estudiar cmo hacerlo, podramos generarnos nuestro propio certificado raz, autoproclamndonos a nosotros mismos como autoridad certificadora. Veamos cmo hacerlo con el script CA.pl de OpenSSL, que en Debian est bajo /usr/lib/ssl/misc/ Creamos un nuevo certificado raz para la autoridad certificadora Super Coco Certification Authority, de la empresa Super Coco Inc.: # ./CA.pl -newca CA certificate filename (or enter to create) Making CA certificate ... Generating a 1024 bit RSA private key .......................................................................................++++++ ......................++++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [AU]:ES State or Province Name (full name) [Some-State]:Spain Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:Super Coco Inc. Organizational Unit Name (eg, section) []:Barrio Sesamo Common Name (eg, YOUR name) []:Super Coco Certification Authority Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok

Certificate Details: Serial Number: bf:8a:98:f2:48:c0:84:68 Validity Not Before: Feb 18 19:02:57 2009 GMT Not After : Feb 18 19:02:57 2012 GMT Subject: countryName = ES stateOrProvinceName = Spain organizationName = Super Coco Inc. organizationalUnitName = Barrio Sesamo commonName = Super Coco Certification Authority emailAddress = [email protected] X509v3 extensions: X509v3 Subject Key Identifier: BD:85:EB:33:B0:0B:06:74:9A:F3:AB:18:95:D5:4B:CB:76:B8:EA:83 X509v3 Authority Key Identifier: keyid:BD:85:EB:33:B0:0B:06:74:9A:F3:AB:18:95:D5:4B:CB:76:B8:EA:83 DirName:/C=ES/ST=Spain/O=Super Coco Inc./OU=Barrio Sesamo/CN=Super Coco Certification Authority/[email protected] serial:BF:8A:98:F2:48:C0:84:68 X509v3 Basic Constraints: CA:TRUE Certificate is to be certified until Feb 18 19:02:57 2012 GMT (1095 days) Write out database with 1 new entries Data Base Updated Ya somos Autoridad Certificadora!! Ahora vamos a generar una clave privada y una peticin de certificado para el sitio web desarrollo.vicente-navarro.com #./CA.pl -newreq Generating a 1024 bit RSA private key .................++++++ .........................++++++ writing new private key to 'newkey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [AU]:ES State or Province Name (full name) [Some-State]:Spain Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:Desarrollo de Lo hice y lo entendi Organizational Unit Name (eg, section) []:El blog de Vicente Navarro Common Name (eg, YOUR name) []:desarrollo.vicente-navarro.com Email Address []:[email protected]

Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Request is in newreq.pem, private key is in newkey.pem Ahora, con la clave privada del certificado raz, firmamos la peticin de certificado, para que ste ya est completo: # ./CA.pl -sign Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: bf:8a:98:f2:48:c0:84:69 Validity Not Before: Feb 18 19:06:09 2009 GMT Not After : Feb 18 19:06:09 2010 GMT Subject: countryName = ES stateOrProvinceName = Spain organizationName = Desarrollo de Lo hice y lo entendi organizationalUnitName = El blog de Vicente Navarro commonName = desarrollo.vicente-navarro.com emailAddress = [email protected] X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 20:7C:02:85:3D:52:2B:88:57:1E:A9:1B:F1:92:CF:70:74:78:00:48 X509v3 Authority Key Identifier: keyid:BD:85:EB:33:B0:0B:06:74:9A:F3:AB:18:95:D5:4B:CB:76:B8:EA:83 Certificate is to be certified until Feb 18 19:06:09 2010 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Signed certificate is in newcert.pem Los nuevos ficheros y directorios que encontraremos en este directorio tras estos tres comandos (CA.pl -newca, CA.pl -newreq y CA.pl -sign) son: # ls -la total 52 drwxr-xr-x 3 root root 4096 2009-02-18 20:06 ./ drwxr-xr-x 4 root root 4096 2009-01-13 18:25 ../ -rwxr-xr-x 1 root root 5875 2009-01-07 19:04 CA.pl* -rwxr-xr-x 1 root root 3784 2009-01-07 19:04 CA.sh* -rwxr-xr-x 1 root root 119 2009-01-07 19:04 c_hash* -rwxr-xr-x 1 root root 152 2009-01-07 19:04 c_info* -rwxr-xr-x 1 root root 112 2009-01-07 19:04 c_issuer*

-rwxr-xr-x 1 root root 110 2009-01-07 19:04 c_name* drwxr-xr-x 6 root root 4096 2009-02-18 20:06 demoCA/ Directorio que contiene el certificado raz y su clave privada (demoCA/cacert.pem es el certificado y demoCA/private/cakey.pem es la clave privada) -rw-r--r-- 1 root root 3532 2009-02-18 20:06 newcert.pem Certificado de desarrollo.vicente-navarro.com firmado por la autoridad certificadora -rw-r--r-- 1 root root 963 2009-02-18 20:05 newkey.pem Clave privada del certificado -rw-r--r-- 1 root root 781 2009-02-18 20:05 newreq.pem Peticin de certificado para firmar Ahora podemos mover el certificado y su clave a /etc/ssl/ # mv newkey.pem /etc/ssl/private/desarrollo.vicente-navarro.com.key # mv newcert.pem /etc/ssl/certs/desarrollo.vicente-navarro.com.crt y cambiar la configuracin del sitio para que lo use: SSLCertificateFile /etc/ssl/certs/desarrollo.vicente-navarro.com.crt SSLCertificateKeyFile /etc/ssl/private/desarrollo.vicente-navarro.com.key Tras lo que tendremos que reiniciar el servidor web. El fichero demoCA/cacert.pem es el certificado raz de la nueva autoridad certificadora. Es un certificado X.509 con formato PEM. Ese fichero tenemos que copiarlo a los sistemas que vayan a acceder a nuestro sistema e importar el certificado en sus navegadores. Es muy importante que a la hora de importar el certificado, le indiquemos al navegador que el certificado sirve para identificar servidores web:

Finalmente, ste es el certificado que el sitio https://desarrollo.vicentenavarro.com presentar, firmado por la autoridad certificadora Super Coco Certification Authority, y que nuestro navegador reconocer, puesto que anteriormente le hemos importado el certificado y le hemos dicho que sirve para identificar sitios web:

En Windows, si al fichero del certificado le cambiamos la extensin a .cer, Windows reconocer el tipo de archivo y podremos hacer doble clic sobre l para importar el certificado en Internet Explorer:

Cuidado con ponerle contrasea a la Clave Privada!! Ahora me gustara hacer un comentario sobre la contrasea que nos pide OpenSSL para ponerle a la clave privada del certificado (no a la del certificado raz). En los ejemplos anteriores nos la ha pedido y le hemos puesto una. En principio, podra ser buena idea ponrsela, pero tenemos que tener en cuenta que si lo hacemos, tendremos que introducirla cada vez que reiniciemos el servidor, incluso en el arranque de la mquina, algo que puede ser muy inconveniente: # apache2ctl stop # apache2ctl start Apache/2.2.9 mod_ssl/2.2.9 (Pass Phrase Dialog) Some of your private key files are encrypted for security reasons. In order to read them you have to provide the pass phrases. Server desarrollo.vicente-navarro.com:443 (RSA) Enter pass phrase: OK: Pass Phrase Dialog successful. De hecho, esto podra confundirnos en ocasiones porque el comando apache2ctl restart simplemente no nos pide la contrasea y no vuelve a arrancar el servidor.

La solucin pasa por generar el certificado (o la peticin del mismo) sin proteccin con contrasea con el comando: # CA.pl -newreq-nodes Fijmonos en que esto mismo ya lo habamos hecho cuando generamos el certificado autofirmado (openssl req -new -x509 -nodes): #./CA.pl -newreq-nodes Generating a 1024 bit RSA private key .............++++++ ..................................++++++ writing new private key to 'newkey.pem' ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [AU]:ES State or Province Name (full name) [Some-State]:Spain Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:Desarrollo de Lo hice y lo entendi Organizational Unit Name (eg, section) []:El blog de Vicente Navarro Common Name (eg, YOUR name) []:desarrollo.vicente-navarro.com Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Request is in newreq.pem, private key is in newkey.pem

Operaciones con el Comando opensslPodemos examinar los certificados con el comando openssl x509 # openssl x509 -noout -text -in /etc/ssl/certs/desarrollo.vicentenavarro.com.crt Certificate: Data: Version: 3 (0x2) Serial Number: bf:8a:98:f2:48:c0:84:69 Signature Algorithm: sha1WithRSAEncryption Issuer: C=ES, ST=Spain, O=Super Coco Inc., OU=Barrio Sesamo, CN=Super Coco Certification Authority/[email protected] Validity Not Before: Feb 18 19:06:09 2009 GMT Not After : Feb 18 19:06:09 2010 GMT

Subject: C=ES, ST=Spain, O=Desarrollo de Lo hice y lo entendi, OU=El blog de Vicente Navarro, CN=desarrollo.vicentenavarro.com/[email protected]...

y podemos ver la clave con el comando openssl rsa # openssl rsa -noout -text -in /etc/ssl/private/desarrollo.vicentenavarro.com.key Tambin podemos usar el comando openssl verify para chequear el certificado contra el certificado raz, pero si no hemos copiado el certificado raz a /etc/ssl/certs/, el comando fallar: # openssl verify desarrollo.vicente-navarro.com.crt desarrollo.vicente-navarro.com.crt: /C=ES/ST=Spain/O=Desarrollo de Lo hice y lo entendi/OU=El blog de Vicente Navarro/CN=desarrollo.vicentenavarro.com/[email protected] error 20 at 0 depth lookup:unable to get local issuer certificate De hecho, no es suficiente slo con copiar el certificado # cp -p /usr/lib/ssl/misc/demoCA/cacert.pem /etc/ssl/certs/supercocoauthority.pem

sino que tambin es necesario obtener su hash: # cd /etc/ssl/certs/ # openssl x509 -in supercocoauthority.pem -noout -hash 628f4309 y crear un enlace al certificado cuyo nombre sea el hash con extensin .0: # ln -s supercocoauthority.pem 628f4309.0 para que el certificado raz sea encontrado automticamente por la herramienta openssl: # openssl verify desarrollo.vicente-navarro.com.crt desarrollo.vicente-navarro.com.crt: OK Con el comando openssl s_client podemos probar que la conexin funciona. Sin embargo, curiosamente, a diferencia de cmo funciona openssl verify, el openssl s_client no encuentra los certificados si no le especificamos el directorio donde buscarlos explcitamente con la opcin -CApath: # openssl s_client -connect desarrollo.vicente-navarro.com:443 CONNECTED(00000003) depth=0 /C=ES/ST=Spain/O=Desarrollo de Lo hice y lo entendi/OU=El blog de Vicente Navarro/CN=desarrollo.vicentenavarro.com/[email protected] verify error:num=20:unable to get local issuer certificate verify return:1

depth=0 /C=ES/ST=Spain/O=Desarrollo de Lo hice y lo entendi/OU=El blog de Vicente Navarro/CN=desarrollo.vicentenavarro.com/[email protected] verify error:num=27:certificate not trusted verify return:1 depth=0 /C=ES/ST=Spain/O=Desarrollo de Lo hice y lo entendi/OU=El blog de Vicente Navarro/CN=desarrollo.vicentenavarro.com/[email protected] verify error:num=21:unable to verify the first certificate verify return:1 ... # openssl s_client -CApath /etc/ssl/certs/ -connect desarrollo.vicentenavarro.com:443 CONNECTED(00000003) depth=1 /C=ES/ST=Spain/O=Super Coco Inc./OU=Barrio Sesamo/CN=Super Coco Certification Authority/[email protected] verify return:1 depth=0 /C=ES/ST=Spain/O=Desarrollo de Lo hice y lo entendi/OU=El blog de Vicente Navarro/CN=desarrollo.vicentenavarro.com/[email protected] verify return:1...

Probar la Conexin con wgetTambin podemos probar la conexin en lnea de comandos con wget. Si hemos copiado el certificado raz en /etc/ssl/certs/ y hemos puesto el enlace con el hash, funcionar sin problemas: # wget https://desarrollo.vicente-navarro.com/blog/wp/wp-login.php --2009-02-22 08:41:25-- https://desarrollo.vicente-navarro.com/blog/wp/wp-login.php Resolving desarrollo.vicente-navarro.com... 127.0.0.1 Connecting to desarrollo.vicente-navarro.com|127.0.0.1|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 3111 (3.0K) [text/html] Saving to: `wp-login.php' 100%[======================================>] 3,111 --.-K/s in 0.001s 2009-02-22 08:41:27 (4.32 MB/s) - `wp-login.php' saved [3111/3111] En otro caso, fallar: $ wget https://desarrollo.vicente-navarro.com/blog/wp/wp-login.php --2009-02-22 07:59:01-- https://desarrollo.vicente-navarro.com/blog/wp/wp-login.php Resolving desarrollo.vicente-navarro.com... 192.168.4.35 Connecting to desarrollo.vicente-navarro.com|192.168.4.35|:443... connected. ERROR: cannot verify desarrollo.vicente-navarro.com's certificate, issued by `/C=ES/ST=Spain/O=Super Coco Inc./OU=Barrio Sesamo/CN=Super Coco Certification Authority/[email protected]': Unable to locally verify the issuer's authority. To connect to desarrollo.vicente-navarro.com insecurely, use `--no-check-certificate'.

Unable to establish SSL connection. por lo que le podramos pasarle el certificado con la opcin --ca-certificate: $ wget --ca-certificate=cacert.pem https://desarrollo.vicentenavarro.com/blog/wp/wp-login.php --2009-02-22 07:58:53-- https://desarrollo.vicente-navarro.com/blog/wp/wp-login.php Resolving desarrollo.vicente-navarro.com... 192.168.4.35 Connecting to desarrollo.vicente-navarro.com|192.168.4.35|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 3111 (3.0K) [text/html] Saving to: `wp-login.php' 100%[======================================>] 3,111 --.-K/s in 0s 2009-02-22 07:58:55 (16.4 MB/s) - `wp-login.php' saved [3111/3111]