In the previous document I created an Http Server without SSL.
In this time, I explain to how to get ssl cert from let's encrypt.
Install certbot
I used certbot to communicate Let'sEncrypt.
$ apt-get install certbot -y
HttpServer For Certbot
Certbot's generate a file for acme-challege under '${WebRoot}/.well-known/acme-challenge/' folder.
and get request 'http://${HOST}/.well-known/acme-challenge/xxx'
- bin/main.dart
Write a Code at Dart.
import 'dart:io' as io;
const String cerbotWebRootPath = "/var/www/html";
void main(List<String> arguments) async {
try {
print("start bind");
var httpServer = await io.HttpServer.bind("0.0.0.0", 80);
print("binded");
await for (var request in httpServer) {
try {
print("receive requested ${request.uri}");
if (request.uri.path.startsWith("/.well-known/")) {
var acmeChallengeFilePath = "" +
cerbotWebRootPath +
request.uri.path.replaceAll(RegExp("\\?.*"), "");
acmeChallengeFilePath = acmeChallengeFilePath.replaceAll("/..", "/");
var acmeChallengeFile = io.File(acmeChallengeFilePath);
var acmeChallengeData = await acmeChallengeFile.readAsString();
request.response.write(acmeChallengeData);
request.response.close();
}
request.response.write("Hello");
request.response.close();
} catch (e, s) {
print("${e}");
print("${s}");
}
}
} catch (e, s) {
print("${e}");
print("${s}");
}
}
update server
$ dart2native ./bin/main.dart
$ mv bin/main.exe /opt/main.exe
$ systemctl restart darthelloserver
and, execute certbot at webroot mode
$ certbot certonly --webroot -w /var/www/html -d tetorica.net -m kyorohiro@gmail.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for tetorica.net
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/tetorica.net/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/tetorica.net/privkey.pem
Your cert will expire on 2021-07-02. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
all code
https://github.com/kyorohiro/hao_dart_server_and_systemd/tree/dev02
Top comments (1)
if you are interesting about certbot in action.
check here . so minimum acme implements.
github.com/diafygi/acme-tiny