Skip to content

Blog su Lazarus e il Pascal

Scrivi una volta e compila dove vuoi…

Creare un web server HTTPS

Posted on 18 Maggio 202318 Maggio 2023 By root

Il nostro amato Lazarus permette, attraverso il pacchetto fpWeb, di creare delle applicazioni web con un server http embedded.

Ovviamente sappiamo che il protocollo http viaggia in chiaro e se vogliamo cifrare il traffico di rete è bene adottare il protocollo HTTPS. Quindi questa guida insegna solo come attivare il protocollo HTTPS, non ha la pretesa di insegnare l’utilizzo di fpWeb.

Proviamo a creare un semplice “Hello World”. Per prima cosa apriamo Lazarus e creiamo un nuovo progetto “Applicazione HTTP server”.

Ovviamente diamogli un nome, ad esempio laz_http_server.lpi e salviamo tutte le unit che ci propone di salvare.

A questo punto nella unit1 troviamo il componente FPWebModule1, attraverso l’ispettore oggetti andiamo nella proprietà action e aggiungiamo la voce index

Selezioniamo l’action appena creata e impostiamo i valori come nell’immagine sottostante

Poi andiamo nella sezione eventi e clicchiamo sulla voce OnRequest, come da immagine sottostante

Fino a far comparire la voce indexRequest come da immagine sottostante

Da editor sorgente andiamo a modificare la procedura indexRequest da così

procedure TFPWebModule1.indexRequest(Sender: TObject; ARequest: TRequest;
AResponse: TResponse; var Handled: Boolean);
begin
end;

a così

procedure TFPWebModule1.indexRequest(Sender: TObject; ARequest: TRequest;
AResponse: TResponse; var Handled: Boolean);
begin
AResponse.Contents.Text:=’Hello world’;
Handled := true;
end;

Poi andiamo nel file con estensione .lpr (nel nostro caso laz_http_server.lpr) e compiliamolo come nel codice qui sotto

program laz_http_server;

{$mode objfpc}{$H+}

uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
opensslsockets,
fphttpapp, sysutils,unit1;

var
application_path : string;
begin

application_path := ExtractFilePath(paramStr(0));

Application.Title :=’laz_http_server’;
Application.Port := 8080;
Application.Threaded := True;
Application.UseSSL := True;
Application.LegacyRouting := True;
Application.HTTPhandler.HTTPServer.CertificateData.Certificate.FileName := application_path + ‘certificate.crt’;
Application.HTTPhandler.HTTPServer.CertificateData.PrivateKey.FileName := application_path + ‘privateKey.key’;
writeln(‘https://localhost:’, Application.Port, ‘/TFPWebModule1/index’);
Application.Initialize;
Application.Run;
end.

Dal codice potete notare che l’eseguibile attiva il protocollo SSL e per fare questo necessita del programma openssl o installato o inserendo gli eseguibili nella stessa cartella dove verrà localizzato il file eseguibile generato dal progetto lazarus. L’immagine che segue è un esempio di come dovrebbe risultare su windows

Ovviamente avrete notato che cerca anche i file certificate.crt e privateKey.key nella stessa cartella, per generare questi file bisogna usare sempre OpenSSL. Su linux/mac è semplice e basta lanciare il seguente comando dalla console (e dopo esserci posizionati nella cartella dove risiede l’eseguibile laz_http_server

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

Mentre su windows bisogna lanciare il seguente comando (sempre dalla cartella in cui risiede l’eseguibile laz_http_server.exe)

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

A questo punto il nostro esempio dovrebbe essere funzionante e dovrebbe bastare lanciare l’eseguibile creato, ottenendo un risultato simile all’immagine seguente

Ovviamente è l’url che bisogna copiare e incollare nel browser.

Il browser vi segnalerà che esiste un potenziale rischio per la sicurezza, questo perchè si tratta di un certificato autofirmato (non distribuito da un ente certificatore, se ve ne serve uno potete adottare l’ottimo LetsEncrypt). Voi comunque accettate il rischio e continuate. Otterrete un’immagine simile a quella seguente

Ovviamente l’esempio è davvero minimale, ma questo apre la strada alla realizzazione di servizi ben più complessi.

Nel mio esempio ho usato la versione openssl-1.0.2o-x64-VC2017.zip di openssl che potete trovare al seguente indirizzo url: https://indy.fulgan.com/SSL/Archive/

EDIT: l’utente DragoRosso del forum https://www.lazaruspascal.it/ segnala anche un altro repository (quello di Indy – con binari testati e funzionanti), la 1.0.2u è l’ultima versione della release 1.0, supporta fino a TLS 1.2

https://github.com/IndySockets/OpenSSL-Binaries

Lazarus ed il Web Tags:WEB SERVER EMBEDDED HTTPS

Navigazione articoli

Previous Post: Assegnazioni e confronto
Next Post: Risoluzione del “timing” sotto Windows.

Archivi

  • Giugno 2023
  • Maggio 2023
  • Marzo 2023
  • Maggio 2022
  • Aprile 2022
  • Marzo 2022
  • Febbraio 2022
  • Gennaio 2022
  • Dicembre 2021

Categorie

  • Android
  • Installazione alternativa di Lazarus e Free Pascal Compiler (FPC)
  • Installazioni
  • Lazarus ed il Web
  • Lazarus, l'IDE ed i suoi strumenti
  • Sintassi e concetti base
  • Strutture dati
  • Tutorial
Vai al forum Italiano

Articoli recenti

  • Risoluzione del “timing” sotto Windows.
  • Creare un web server HTTPS
  • Assegnazioni e confronto
  • Maggiore minore e uguale
  • Operatori logici: OR / AND

Commenti recenti

  1. DragoRosso su Installazione di Lazarus e Free Pascal – su Linux – tramite package manager a linea di comando

Copyright © 2023 Blog su Lazarus e il Pascal.

Powered by PressBook WordPress theme