#dotnet#linode#ubuntu#nginx#ssl#https#déploiement#certificat

Comment déployer .net 5 api sur linux Ubuntu 20.04 (Nginx) -Linode (Partie 2) SSL/HTTPS

Nous allons ajouter un nom de domaine pour notre api dotnet et ajouter un certificat SSL pour activer https. Configuration complète pour passer en production sécurisée.

A la suite de notre tuto Comment déployer .net 5 api sur linux Ubuntu 20.04 (Nginx) -Linode (Partie 1).

Nous allons ajouter un nom de domaine pour notre api dotnet et ajouter un certificat SSL pour activer https.

Let's go…..

Achetons un nom de domaine « testlinode.com » sur Hostinger

J'utilise Hostinger pour acheter les noms de domaine. Je trouve les services de Hostinger rapide, avec un service client très réactif.

Rendez vous sur le site hostinger.

Sur mon Panel je vais sur domaine et je tape « testlinode » ça sera notre nom de domaine pour ce tuto. Nous effectuons le paiement en utilisant notre carte de crédit.

Achat nom de domaine

Configuration du domaine

Ensuite renseignons nos informations pour le nom de domaine

Configuration domaine

Après avoir renseigné nos informations, notre nom de domaine est maintenant disponible.

Domaine disponible

Notre nom de domaine est aussi disponible en ligne.

Revenons sur le dashboard de notre nom de domaine.

Dashboard domaine

Configuration DNS

Configuration DNS

Ajoutons l'adresse IP de notre machine Ubuntu

Ajout IP serveur

Nous pouvons tester maintenant notre serveur nom de domaine sur Hostinger. Il est bien lié à notre machine sur linode.

Test de l'API

Testons l'endpoint http://testlinode.com/actualities

Test API HTTP

Maintenant ajoutons un certificat SSL

HTTPS est un moyen sécurisé d'envoyer des données entre un serveur Web et un navigateur Web.

Commençons par la configuration pour passer de http à https sur notre serveur linode Ubuntu.

Configuration .NET pour HTTPS

D'abord sur notre projet dotnet nous allons effectuer quelques configurations pour passer à HTTPS.

Dans notre fichier Program.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>().UseUrls("https://testlinode.com:5000;http://testlinode.com:5002").UseKestrel();
// webBuilder.UseStartup<Startup>().UseUrls("http://localhost:5000");
});

Ensuite dans notre fichier Startup.cs

app.UseHsts();

Et dans notre fichier appsettings.json

"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://testlinode.com:5002"
},
"Https": {
"Url": "https://testlinode.com:5000"
}}}

Rebuild et transfert

Faisons un rebuild du projet

D:\PROJET\BACK DOTNET\CHRETIEN 2\CHRETIEN2> dotnet build

Maintenant utilisons FileZilla pour le transfert vers notre machine Ubuntu 20. Utilisons une connexion FTP avec le port 22. On supprime d'abord les anciens fichiers.

Transfert FileZilla

Génération du certificat SSL

Générons le certificat pour notre nom de domaine

Activons https avec ufw

sudo ufw allow https

Installation de certificat SSL

epa@localhost:~/chretien$ sudo apt install -y certbot
epa@localhost:~/chretien$ sudo certbot certonly --standalone -d testlinode.com -d www.testlinode.com

ou

sudo certbot certonly --standalone -d www.testlinode.com

ou

sudo certbot certonly --standalone -d testlinode.com

Génération certificat

Configuration Nginx pour HTTPS

Modifions également notre fichier de configuration Nginx

epa@localhost:~/chretien$ sudo vim /etc/nginx/sites-available/default

Remplaçons le contenu par la nouvelle configuration Nginx pour https

server {
listen 80;
server_name testlinode.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name testlinode.com;
ssl_certificate /etc/letsencrypt/live/www.testlinode.com/fullchain.pem;
ssl_certificate_key       /etc/letsencrypt/live/www.testlinode.com/privkey.pem;
ssl on;
ssl_session_cache  builtin:1000 shared:SSL:10m;
ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6].(?!.*SV1)";
location / {
proxy_pass            https://178.79.168.173:5000;
proxy_http_version 1.1;
proxy_set_header   Upgrade $http_upgrade;
proxy_set_header   Connection keep-alive;
proxy_set_header   Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   X-Forwarded-Proto $scheme;
}
}

Redémarrons Nginx

epa@localhost:~$ sudo systemctl restart nginx

Configuration du service systemd

Créons un service pour lancer notre projet en arrière-plan

epa@localhost:~$ sudo vim /etc/systemd/system/CHRETIEN2.service

Ajoutons la configuration suivante

[Unit]
Description= Example .NET Web API App running on Ubuntu
[Service]
WorkingDirectory=/home/epa/chretien
ExecStart=/usr/bin/dotnet /home/epa/chretien/CHRETIEN2.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=CHRETIEN2
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target

Démarrage du service

epa@localhost:~$ sudo systemctl enable CHRETIEN2.service
epa@localhost:~$ sudo systemctl start CHRETIEN2.service

Service démarré

Vérification finale

Enfin nous avons terminé, l'activation d'un certificat ssl sur un projet .net en production.

Maintenant le certificat https est activé.

HTTPS activé

Commandes utiles pour la gestion du service

# Vérifier le statut du service
sudo systemctl status CHRETIEN2.service
# Voir les logs du service
sudo journalctl -u CHRETIEN2.service
# Redémarrer le service
sudo systemctl restart CHRETIEN2.service
# Arrêter le service
sudo systemctl stop CHRETIEN2.service

Renouvellement automatique du certificat

Pour automatiser le renouvellement du certificat SSL, vous pouvez ajouter une tâche cron :

# Éditer la crontab
sudo crontab -e
# Ajouter cette ligne pour vérifier le renouvellement tous les jours à 2h00
0 2 * * * certbot renew --quiet && systemctl reload nginx

Sécurité additionnelle

Configuration de sécurité Nginx améliorée

Pour une sécurité renforcée, ajoutez ces directives dans votre configuration Nginx :

# Ajout d'en-têtes de sécurité
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Masquer la version Nginx
server_tokens off;

Pare-feu UFW

Configurez UFW pour sécuriser votre serveur :

# Autoriser SSH, HTTP et HTTPS
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Bloquer les autres ports
sudo ufw --force enable

Conclusion

Vous avez maintenant une API .NET 5 déployée avec succès sur Ubuntu 20.04 avec :

Nom de domaine personnaliséCertificat SSL/TLS gratuit avec Let's EncryptRedirection automatique HTTP vers HTTPSService systemd pour la haute disponibilitéConfiguration Nginx optimiséeRenouvellement automatique des certificats

Votre API est maintenant prête pour la production avec une sécurité et des performances optimales !


#DotNet #Ubuntu #Nginx #SSL #HTTPS #Linode #Production #Sécurité