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
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
2 Clonamos el proyecto desde su repositorio.
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
3 Entramos en el directorio recién creado.
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
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.
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
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"
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
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.
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
7 Por último copiamos el archivo keystore.jks a /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
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
y en el mismo main
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
De regalo la clase httpfilter.
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
			
			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