Anteriormente, ya estuvimos hablando de las posibilidades de tener SSL gratis con un auto certificado, con una entidad que te lo facilita gratis, y recientemente utilizando Let’s Encrypt ; un proyecto de código abierto, y gratuito , aunque lo instalamos en Centos 6, con Virtualmin. Ahora vamos a instalarlo en una maquina Centos 6, pero con cPanel.
La instalación la he realizado siguiendo la guia que facilita una persona de cPanel en :
https://forums.cpanel.net/threads/how-to-installing-ssl-from-lets-encrypt.513621/
y que viene a ser lo siguiente.
Instalar repositorios «epel» para Centos 6
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
Instalamos los repositorios de «IusCommunity»
rpm -ivh https://rhel6.iuscommunity.org/ius-release.rpm
Instalamos git y python27 desde «IUS»
yum -y install git python27 python27-devel python27-pip python27-setuptools python27-virtualenv --enablerepo=ius
Ahora ya podemos descargarnos letsencrypt desde los repositorios de git, por ejemplo, en root
cd /root git clone https://github.com/letsencrypt/letsencrypt cd /root/letsencrypt ./letsencrypt-auto --verbose
Ospodeis encontrar conun mensaje del tipo:
No installers are available on your OS yet; try running "letsencrypt-auto certon ly" to get a cert you can install manually
Pero… no os preocupeis. Nosotros vamos a instalar nuestro primer certificado. para ello escribimos:
./letsencrypt-auto --text --agree-tos --email [email protected] certonly --renew-by-default --webroot --webroot-path /home/usuarioCPanel/public_html/ -d miDominio.com -d www.miDominio.com -d mail.miDominio.com -d ftp.miDominio.com
El script comprobara que puede escribir en la ruta indicada en «webroot-path» que ademas es el directorio raiz del dominio; comprobara que el dominio que le indicas es accesible desde internet, y si todo va bien, instalara los certificados
Cuando necesites añadir mas certificados, lo puedes hacer ya desde tu ruta:
cd /root/.local/share/letsencrypt/bin/ ./letsencrypt --text certonly --renew-by-default --webroot --webroot-path /home/otroUsuarioCpanel/public_html/ -d miOtroDominio.com -d www.miOtroDominio.com
En donde ya no indicas la direccion de correo electrónico.
La actualización
Los certificados que obtenemos, caducan a los 90 dias, por lo que, para no tenernos que preocupar, deberemos añadir una tarea al cron, para que cada 60 dias, por ejemplo, nos renueve los certificados. Para eso, prepararemos un script que nos actualice los certificados en cPanel, utilizando la API y que podemos llamar:
/root/installssl.pl
y contiene:
#!/usr/local/cpanel/3rdparty/bin/perl use strict; use LWP::UserAgent; use LWP::Protocol::https; use MIME::Base64; use IO::Socket::SSL; use URI::Escape; my $user = "root"; my $pass = "rootpass"; my $auth = "Basic " . MIME::Base64::encode( $user . ":" . $pass ); my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0, SSL_verify_mode => 'SSL_VERIFY_NONE', SSL_use_cert => 0 }, ); my $dom = $ARGV[0]; my $certfile = "/etc/letsencrypt/live/$dom/cert.pem"; my $keyfile = "/etc/letsencrypt/live/$dom/privkey.pem"; my $cafile = "/etc/letsencrypt/live/bundle.txt"; my $certdata; my $keydata; my $cadata; open(my $certfh, '<', $certfile) or die "cannot open file $certfile"; { local $/; $certdata = <$certfh>; } close($certfh); open(my $keyfh, '<', $keyfile) or die "cannot open file $keyfile"; { local $/; $keydata = <$keyfh>; } close($keyfh); open(my $cafh, '<', $cafile) or die "cannot open file $cafile"; { local $/; $cadata = <$cafh>; } close($cafh); my $cert = uri_escape($certdata); my $key = uri_escape($keydata); my $ca = uri_escape($cadata); my $request = HTTP::Request->new( POST => "https://127.0.0.1:2087/json-api/installssl?api.version=1&domain=$dom&crt=$cert&key=$key&cab=$ca" ); $request->header( Authorization => $auth ); my $response = $ua->request($request); print $response->content;
Crearemos tambien el fichero:
/etc/letsencrypt/live/bundle.txt
Con el siguiente contenido
-----BEGIN CERTIFICATE----- MIIEqDCCA5CgAwIBAgIRAJgT9HUT5XULQ+dDHpceRL0wDQYJKoZIhvcNAQELBQAw PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD Ew5EU1QgUm9vdCBDQSBYMzAeFw0xNTEwMTkyMjMzMzZaFw0yMDEwMTkyMjMzMzZa MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAJzTDPBa5S5Ht3JdN4OzaGMw6tc1Jhkl4b2+NfFwki+3uEtB BaupnjUIWOyxKsRohwuj43Xk5vOnYnG6eYFgH9eRmp/z0HhncchpDpWRz/7mmelg PEjMfspNdxIknUcbWuu57B43ABycrHunBerOSuu9QeU2mLnL/W08lmjfIypCkAyG dGfIf6WauFJhFBM/ZemCh8vb+g5W9oaJ84U/l4avsNwa72sNlRZ9xCugZbKZBDZ1 gGusSvMbkEl4L6KWTyogJSkExnTA0DHNjzE4lRa6qDO4Q/GxH8Mwf6J5MRM9LTb4 4/zyM2q5OTHFr8SNDR1kFjOq+oQpttQLwNh9w5MCAwEAAaOCAZIwggGOMBIGA1Ud EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMH8GCCsGAQUFBwEBBHMwcTAy BggrBgEFBQcwAYYmaHR0cDovL2lzcmcudHJ1c3RpZC5vY3NwLmlkZW50cnVzdC5j b20wOwYIKwYBBQUHMAKGL2h0dHA6Ly9hcHBzLmlkZW50cnVzdC5jb20vcm9vdHMv ZHN0cm9vdGNheDMucDdjMB8GA1UdIwQYMBaAFMSnsaR7LHH62+FLkHX/xBVghYkQ MFQGA1UdIARNMEswCAYGZ4EMAQIBMD8GCysGAQQBgt8TAQEBMDAwLgYIKwYBBQUH AgEWImh0dHA6Ly9jcHMucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcwPAYDVR0fBDUw MzAxoC+gLYYraHR0cDovL2NybC5pZGVudHJ1c3QuY29tL0RTVFJPT1RDQVgzQ1JM LmNybDATBgNVHR4EDDAKoQgwBoIELm1pbDAdBgNVHQ4EFgQUqEpqYwR93brm0Tm3 pkVl7/Oo7KEwDQYJKoZIhvcNAQELBQADggEBANHIIkus7+MJiZZQsY14cCoBG1hd v0J20/FyWo5ppnfjL78S2k4s2GLRJ7iD9ZDKErndvbNFGcsW+9kKK/TnY21hp4Dd ITv8S9ZYQ7oaoqs7HwhEMY9sibED4aXw09xrJZTC9zK1uIfW6t5dHQjuOWv+HHoW ZnupyxpsEUlEaFb+/SCI4KCSBdAsYxAcsHYI5xxEI4LutHp6s3OT2FuO90WfdsIk 6q78OMSdn875bNjdBYAqxUp2/LEIHfDBkLoQz0hFJmwAbYahqKaLn73PAAm1X2kj f1w8DdnkabOLGeOVcj9LQ+s67vBykx4anTjURkbqZslUEUsn2k5xeua2zUk= -----END CERTIFICATE-----
y añadiremos al cron:
0 0 */60 * * /root/.local/share/letsencrypt/bin/letsencrypt --text certonly --renew-by-default --webroot --webroot-path /home/cPanelUser/public_html/ -d domain.com -d www.domain.com; /root/installssl.pl domain.com
para todos los dominios que deseemos
Nota:
Posteriormente,he encontrado tres articulos que que son muy interesantes; cuando tenga un momento, los instalaré en una máquina para probarlos y os lo comentare; mientras tanto,si alquien quiere verlos estan aqui:
- https://tfmm.co/lets-encrypt-on-cpanel-automated/
- https://bitbucket.org/webstandardcss/lets-encrypt-for-cpanel-centos-6.x
- https://github.com/mfgering/letsencrypt-lw