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