Spanish [B4J][Tutorial] Como crear certificado ssl con Let’s Encrypt.

dar2o3

Active Member
Licensed User
Longtime User
Hola, voy a tratar de explicar como podéis crear certificados ssl con Let’s Encrypt.

Todo lo que voy a explicar está enfocado a instalarlo en la raspberry pi, aunque tendría que funcionar en cualquier servidor linux (centos, debian, etc...)

****No soy ni mucho menos ningún entendido en linux, solo trato de explicar como lo hago basado en manuales que hay en la red.

* ¿A quien le sirve esto?
A cualquiera que implemente un servidor ( en b4j , apache o cualquier otro) y quiera ofrecer ssl.

*¿Que es Let's encrypt?
Se trata de un generador de certificados SSL automático muy fácil de usar, que contará con CA gratis, y por supuesto de código abierto.
https://letsencrypt.org/

1 entramos en el directorio donde queramos descargar letsencrypt

B4X:
$ cd /path/to/somewhere

2 Clonamos el proyecto desde su repositorio.

B4X:
$ sudo git clone https://github.com/letsencrypt/letsencrypt

3 Entramos en el directorio recién creado.

B4X:
$ cd letsencrypt

4 Ejecutamos letsencrypt con la opción de certonly ( existen varias opciones, en este caso solo queremos el certificado, para mas info buscar en la web hay miles de páginas sobre el tema.) durante el proceso, este te pedirá que introduzcas el nombre de tu dominio y la contraseña para el certificado, de contraseña puedes poner la que quieras pero asegúrate de apuntártela por ahí, te hará falta mas adelante.


B4X:
sudo ./letsencrypt-auto certonly

5 No voy a explicar nada, solo tenéis que sustituir ${PASSWORD} por vuestra contraseña y ${DOMAIN} por vuestro dominio, por cierto yo el nombre del dominio lo pongo sin las "www"

B4X:
sudo openssl pkcs12 -export -password pass:${PASSWORD} -inkey /etc/letsencrypt/live/${DOMAIN}/privkey.pem -in /etc/letsencrypt/live/${DOMAIN}/fullchain.pem -out /tmp/cert.p12

6 El archivo que nos crea por defecto letsencrypt es un .pem, este archivo lo puede usar apache directamente, pero en mi caso (yo uso b4j) a Jetty (el servidor que usa b4j) le hace falta un archivo .jks yo uso el típico que viene en los ejemplos "keystore.jks." Acordaros de sustituir ${PASSWORD} por vuestra contraseña.

B4X:
sudo keytool -importkeystore -srckeystore /tmp/cert.p12 -srcstoretype PKCS12 -destkeystore /tmp/keystore.jks -srcstorepass ${PASSWORD} -deststorepass ${PASSWORD} -noprompt


7 Por último copiamos el archivo keystore.jks a /home/pi/Desktop/carpetadekeys.

B4X:
sudo rm /tmp/cert.p12
sudo mv /tmp/keystore.jks /home/pi/Desktop/carpetadekeys


YA TENEMOS SSL EN NUESTRO SERVIDOR!!! Y GRATIS!!!


En el proyecto de servidor que estemos haciendo solo tenemos que añadir en el AppStart

B4X:
ConfigureSSL(443)

y en el mismo main

B4X:
Private Sub ConfigureSSL (SslPort As Int)
    'example of SSL connector configuration
  
    Dim ssl As SslConfiguration
    ssl.Initialize
    ssl.SetKeyStorePath("/home/pi/Desktop/carpetadekeys", "keystore.jks") 'path to keystore file

  
    ssl.KeyStorePassword = "tupassword"
    ssl.KeyManagerPassword = "tupassword"
    srvr.SetSslConfiguration(ssl, SslPort)
  
     srvr.AddFilter("/*", "HttspFilter", False)
End Sub


De regalo la clase httpfilter.

B4X:
'Filter class
Sub Class_Globals
  
End Sub

Public Sub Initialize
  
End Sub

'Return True to allow the request to proceed.
Public Sub Filter(req As ServletRequest, resp As ServletResponse) As Boolean
  
     If req.Secure Then
     Return True
   Else
     resp.SendRedirect(req.FullRequestURI.Replace("http:", "https:") _
       .Replace(Main.srvr.Port, Main.srvr.SslPort))
     Return False
   End If
  
End Sub
 

Don Oso

Active Member
Licensed User
Longtime User
Excelente tutorial , yo de hecho pensaba subir el mismo jaja... agregando información a este tutorial , pueden usar la herramienta para linux llamada cerbot los mini tutoriales estan en https://certbot.eff.org/

Como funciona Let's Encrypt , bueno , ellos se basan en que el certificado es emitido a el dueño del dominio (EJ: midominio.com) que está instalado en la ip donde donde esta apuntando el dominio , es decir el registro A de tu dominio "midominio.com" , para entregarte el certificado se usa un cliente que se conecta a Letsencrypt y hace esta verificación y ellos te mandan los archivos que forman el certificado mediante la aplicacion cliente, estos archivos quedan en el directorio /etc/letsencrypt , hay varias herramientas para generar los certificados en el caso de Cerbot esta te configura automáticamente apache . Otra cosa importante es que los certificados son emitidos por 3 meses y debes renovarlos.

Este Bash script te permite generar las llaves para usar con un servidor jetty/http creado con B4j .

mediante este comando crea tu archivo para crear las llaves , copia , pega y modifica

nano llaves.sh

para ejecutar sh llaves.sh

en este ejemplo Keystore.p12 equivale a la "keystore.jks" de este ejemplo , en keystore.pw se almacena la clave que usaron en el ejemplo de arriba ( creas un archivo con el la clave asi de simple)

www.crickam.com remplazalo por tu dominio.
/opt/crickam/ por la carpeta donde quieres dejar los certificados para tu app en b4j

B4X:
#!/bin/sh
set -e
set -x

(
  cd /etc/letsencrypt/live/www.crickam.com
  openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out /opt/crickam/keystore.p12 -name crickam -CAfile chain.pem -caname root -password file:/opt/crickam/keystore.pw
  chmod a+r /opt/crickam/keystore.p12
)
 
Last edited:
Top