Cuando tienes pocas IPs y muchas maquinas una de las opciones que tienes para preservar IPs es usar proxy_http de apache, pero ¿qué ocurre cuando quieres proxyear conexiones https?
Lo lógico ha sido crear el certificado en la máquina que contiene el servicio bajo ssl, hasta aquí todo OK, pero se complicaba la cosa al tratar de hacerlo pasar por el servidor que hace de proxy apache.
Vamos a ver como lo he hecho, no es exactamente como quería, pero la cosa es que funciona :P
Para recopilar un poco y como ha habido cambios en la web startssl voy a poner el paso a paso, además que el post que tengo es un poco viejuno ya!
Vamos a generar pues el certificado para cloud.capa8.net
root@electra-owncloud:/etc/ssl# mkdir capa8 root@electra-owncloud:/etc/ssl# cd capa8 root@electra-owncloud:/etc/ssl/capa8# openssl req -nodes -newkey rsa:2048 -keyout cloud.capa8.net.key -out cloud.capa8.net.csr Generating a 2048 bit RSA private key .........................+++ ...............+++ writing new private key to 'cloud.capa8.net.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]:Barcelona Locality Name (eg, city) []:Barcelona Organization Name (eg, company) [Internet Widgits Pty Ltd]:Capa8 Asistencial, S.L. Organizational Unit Name (eg, section) []:Cloud Common Name (e.g. server FQDN or YOUR name) []:cloud.capa8.net Email Address []:info@capa8.net Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: root@electra-owncloud:/etc/ssl/capa8# ls -lh total 8.0K -rw-r--r-- 1 root root 1.7K Mar 18 22:30 cloud.capa8.net.key -rw-r--r-- 1 root root 1.1K Mar 18 22:30 cloud.capa8.net.csr root@electra-owncloud:/etc/ssl/capa8# openssl x509 -req -in cloud.capa8.net.csr -signkey cloud.capa8.net.key -out cloud.capa8.net.crt Signature ok subject=/C=ES/ST=Barcelona/L=Barcelona/O=Capa8 Asistencial, S.L./OU=Cloud/CN=cloud.capa8.net/emailAddress=info@capa8.net Getting Private key root@electra-owncloud:/etc/ssl/capa8# ls cloud.capa8.net.crt cloud.capa8.net.csr cloud.capa8.net.key
Ahora nos vamos a la web de startssl y si no tenemos cuenta le damos a sign-up, ponemos el país y nuestro correo electrónico. A los pocos segundos nos llega el código de verificación y lo introducimos.
A continuación tenemos que validar nuestro dominio desde la pestaña “validations wizard”, será preciso disponer de acceso a la cuenta postmaster@tudominio.com o otra cuenta administrativa. Recibirás ahí la clave y podrás validar tu dominio.
Ahora vamos a lo que nos interesa, generar un certificado gratuito de estos que duran un año.
Vamos a la pestaña “Certificates Wizard” y escogemos “Web Server SSL/TLS Certificate”, le damos a continue y en la caja de texto introducimos el (o los, hasta 5) dominios que queremos generar el certificado y en el checkbox de abajo, escogemos “Generated by Myself” e introducimos el contenido completo del fichero .csr que hemos generado hace unos segundos.
Le damos a submit y en “Tool box” > “Certificate List” aparece el subdominio con un botón que pone “Retrieve”.
Aquí nos permite descargar un .zip con los certificados generados para distintos servidores de páginas web.
Ahora volvemos a nuestro querido servidor. Este paso es necesario si el servidor va a disponer de IPv6 o es accesible por cualquier otra red, como podría ser la de guifi. En mi caso, el servidor va a estar accesible sólo por IPV6 y el proxy http lo voy a usar sobre la red nateada para el IPv4.
Así que vamos al servidor de owncloud y descomprimos el .zip, cogemos los certificados que nos interesan y el resto de morralla nos la cargamos :)
root@electra-owncloud:/etc/ssl/capa8# mkdir startssl root@electra-owncloud:/etc/ssl/capa8# cd startssl/ root@electra-owncloud:/etc/ssl/capa8/startssl# ls cloud.capa8.net.zip root@electra-owncloud:/etc/ssl/capa8/startssl# unzip cloud.capa8.net.zip Archive: cloud.capa8.net.zip inflating: IISServer.zip inflating: ApacheServer.zip inflating: NginxServer.zip inflating: OtherServer.zip root@electra-owncloud:/etc/ssl/capa8/startssl# ls ApacheServer.zip cloud.capa8.net.zip IISServer.zip NginxServer.zip OtherServer.zip root@electra-owncloud:/etc/ssl/capa8/startssl# unzip ApacheServer.zip Archive: ApacheServer.zip inflating: 2_cloud.capa8.net.crt inflating: 1_root_bundle.crt root@electra-owncloud:/etc/ssl/capa8/startssl# rm *.zip root@electra-owncloud:/etc/ssl/capa8/startssl# ls 1_root_bundle.crt 2_cloud.capa8.net.crt
Ahora en el fichero /etc/apache2/sites-available/cloud-capa8.conf definimos el virtualhost correspondiente:
< VirtualHost *:80> ServerName cloud.capa8.net ServerAlias *.cloud.capa8.net cloud.capa8.cat *.cloud.capa8.cat ServerAdmin ***@*** DocumentRoot /var/www/owncloud/ # Si activo esto hace un bucle de redirección y tampoco puedo deshabilitar este virtualhost... #RewriteEngine On #RewriteCond %{HTTPS} !=on #RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] < /VirtualHost> < IfModule mod_ssl.c> < VirtualHost *:443> ServerAdmin ***@*** DocumentRoot /var/www/owncloud/ ServerName cloud.capa8.net ServerAlias *.cloud.capa8.net cloud.capa8.cat *.cloud.capa8.catHeader always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn ErrorLog ${APACHE_LOG_DIR}/cloud-capa8-ssl_error_log TransferLog ${APACHE_LOG_DIR}/cloud-capa8-ssl_access_log SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL SSLCertificateFile /etc/ssl/capa8/startssl/2_cloud.capa8.net.crt SSLCertificateKeyFile /etc/ssl/capa8/cloud.capa8.net.key SSLCertificateChainFile /etc/ssl/capa8/startssl/1_root_bundle.crt CustomLog ${APACHE_LOG_DIR}/cloud-capa8-ssl_request "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" RewriteEngine On RewriteOptions inherit < /VirtualHost> < /IfModule>
Cuidadín al copiar el fichero a saco, he tenido que añadir un espacio después de < porque sino el wordpress se vuelve loco y me muestra lo que le da la gana :P Ahora nos vamos al servidor cabecera que está recibiendo las peticiones http y https que tiene la IP pública y en su /etc/hosts le añadimos la IP que tiene el servidor de cloud
root@electra-http:~# vi /etc/hosts 192.168.1.3 electra-http 192.168.1.4 cloud.capa8.net cloud.capa8.cat
Copiamos los ficheros de certificado del otro servidor a éste.
Y Añadimos un nuevo fichero de configuración de virtualhost con éste contenido
< VirtualHost *:80> ServerName cloud.capa8.net ServerAlias *.cloud.capa8.net cloud.capa8.cat *.cloud.capa8.cat ServerAdmin ***@*** RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] < /VirtualHost> < VirtualHost *:443> ServerName cloud.capa8.net ServerAlias *.cloud.capa8.net cloud.capa8.cat *.cloud.capa8.catHeader always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" ServerAdmin ***@*** < Proxy *> Require all granted < /Proxy> SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL SSLCertificateFile /etc/ssl/capa8/startssl/2_cloud.capa8.net.crt SSLCertificateKeyFile /etc/ssl/capa8/cloud.capa8.net.key SSLCertificateChainFile /etc/ssl/capa8/startssl/1_root_bundle.crt CustomLog ${APACHE_LOG_DIR}/cloud-capa8-ssl_request "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" ProxyRequests Off ProxyPreserveHost On ProxyPass / http://cloud.capa8.net/ ProxyPassReverse / http://cloud.capa8.net/ < /VirtualHost>
Habilitamos el sitio, los módulos necesarios y reiniciamos apache
root@electra-http:~# a2enmod rewrite proxy_http root@electra-http:~# a2ensite cloud.capa8 root@electra-http:~# service apache2 restart
Y ahora accedemos a la url http://cloud.capa8.net y tendría que redirigir a https://cloud.capa8.net con un certificado firmado.
Y listos! :)
Se aceptan propuestas de mejora :P
Yu-kai Chou | View Comments | tweetmeme_style = 'compact'; New to Gamification? Check out my posts What is Gamification as well as my Gamification FrameworkI recently stumbled upon some Gamification Research