SSL – Puesta en marcha
Autor: Carles
Aubia
Fecha:
27/02/2023
Quizás sea este el último tema a tocar, pues entiendo yo que se ha de
aplicar cuando ya tienes una aplicación lista para la puesta en marcha y
en producción.
Es algo que tenia aparcado por lo comentado y por que no puedes
poner un ejemplo operativo, ya que cada uno de ellos necesita su
propio certificado que va ligado al servidor y la máquina donde lo uses.
Añadir que no es que sea complicado pero para la generación de un
certificado intervienen varios factores desde dominios, routers, ip, … y
puede ser un poco engorroso. Y si a esto le añadimos la parametrización
del firewall, la codificación a tener en cuenta, etc,…. Puede ser un poco
costoso al principio, pero solo se trata de tener en cuenta todos estos
conceptos.
Siempre comento que este es el último paso a hacer en algun proyecto
nuestro. Es bueno hacer pruebas y ver que somos capaces y podemos
llegar a este stage, pero para programar la aplicación, sin el SSL es todo
mas fácil. Al final el concepto es licenciar un proyecto y prepararlo para
que salga de nuestra casa.
Siguiendo la linea del proyecto enfocado en clave Harbour, quiero
seguir haciendo las cosas lo mas fácil posible para el usuario,
intentando aparcar conceptos y temas técnicos para quien mas lo
necesite o quiera inmiscuirse.
Existe mucha literatura que explica muy entendible lo que es el SSL y
por lo que he visto no tendreis problemas en encontrar información
fiable y buena.
Básicamente para entenderlo, cuando vemos en la url https:// y un
candado sabemos que esa url está protegida. Esta protección se basa en
un cifrado de punta a punta (server-cliente) y su contenido es inteligible
si sniffan la transmision, todo está encriptado.
Asi pues resulta comprensible que nuestras aplicaciones necesiten si o
si estos certificados para poder ofrecer garantias a nuestros usuarios.
Dominio
Para nuestra aplicación necesitaremos tambien un dominio. Siguiendo
la linea vamos a usar un servido gratuito para crear nuestros dominios.
Después de probar unos pocos y hablándolo con programadores que
utilizan estos tipos de servicios, me decanto al final
por [Link] por su extrema facilidad de gestionar el
dominio a parte que podemos ir renovándolo de muchas maneras
incluso desde nuestro propio programa en harbour
Para la siguiente prueba creo un domino p.e à [Link]
Certificado
Despues de mirar varias maneras de realizarlo y para hacerlo de una
forma lo mas fácil posible para tener un punto de entrada y poder
experimentar, me decanto por usar certbot
[Link]
Sencillamente porque es muy fácil crear un certificado que nos sirva. Os
aconsejo que os mireis la página, pero a modo resumen os explico como
podeis crear un certificado para windows.
1.- Bajaros el software para crear el certificado
de [Link]
2.- Ejecutar el cmd como administrador
3.- Ejecutamos el siguiente comando:
C:\WINDOWS\system32> certbot certonly –-standalone
Importante: Tener el puerto 80 para tu máquina, abriendo puerto de tu
router
El sistema instala el certificado en este caso en à C:\Certbot\live\
[Link]\
Y eso es todo para crear un certificado. Podeis usar otras herramientas
y experimentar de varias maneras, pero creo que esta es la forma mas
fácil para empezar con vuestra aplicación.
Copiaremos en el directorio raiz de nuestra aplicación:
- [Link] à [Link]
- [Link] à [Link]
App web con Uhttpd2
A continuación se detalla lo que debemos tener en cuenta en nuestra
aplicación para que funcione con SSL
Código
Cuando creemos el servidor en nuestro código, deberemos tener en
cuenta 3 cosas
Acción Código
Indicar el puerto 443 oServer:SetPort( 443 )
Indicar el nombre del certificado y oServer:SetCertificate( <[Link]>,
del fichero de clave privada <[Link]> )
Indicar que la aplicación usara SSL oServer:SetSSL( .T. )
Compilado / Enlazado
Para usar aplicaciones con HTTPS necesitaremos tener estas 2 dll en la
carpeta de nuestra aplicación y las podeis encontrar en la carpeta dll.
- libcrypto-1_1-[Link]
- libssl-1_1-[Link]
Esto implica que el exe las necesitará para poder SSL. Si faltase una nos
daria error.
En el fichero hbp deberemos especificar que use las librerias SSL
-luhttpds2
-lhbssl
-lhbssls
-llibcrypto-1_1-x64
-llibssl-1_1-x64
Observad que la libreria uhttpd pasa a ser la uhttpds2 que es la versión
para compilar y usar SSL
En un ejemplo básico el fichero hbp seria el siguiente
-n
-w1
-es2
-inc
-head=full
-mt
app\[Link]
app\web_basic.prg
-Llib
-luhttpds2
-lhbssl
-lhbssls
-llibcrypto-1_1-x64
-llibssl-1_1-x64
# WAPI_OutputDebugString()
[Link]
[Link]
Test en localhost
Una vez enlazado podemos probar nuestro servidor poniendo en la url
[Link]
Si se ejecuta es que el server se ha ejecutado correctamente.
Test en Internet
Para poder acceder desde internet:
- Debemos abrir el puerto de nuestro router 443 a nuestra
máquina
- Habilitar en nuestro firewall permisos para que esta aplicación
pueda tener paso desde fuera a nuestra máquina
En el caso de que queremos ejecutar el server que tengamos ubicado
en c:\uhttpd2\samples\20-SSL\[Link] podremos definir el firewall de
esta manera.
Se habrá creado una regla de entrada en nuestro firewall
Una vez abierto desde cualquier máquina o nuestro móvil (probadlo con
datos, no con vuestra wifi) especificais vuestro dominio:
[Link]
Si pulsamos en el candado podremos ver que es un certificado válido y
que nuestra aplicación se ejecuta correctamente en SSL.
Y si todo está correcto, esto deberia ser todo lo mínimo necesario para
poder tener nuestras aplicaciones con certificado SSL.