Let’s Encrypt is a free, automated, and open certificate authority (CA), run for the public’s benefit.
It is a service provided by the Internet Security Research Group.
How to enable the use of Letsencrypt certificates on your site and for TLS support in Postfix will be added soon
Update
Things work way faster by using certbot.
The software is to be found in all major Linux distro repositories.
Instead of using the script i posted earlier, it's better to make a cronjob of this:
$ certbot --text --agree-tos --keep --rsa-key-size 4096 certonly --renew-by-default --webroot -w /var/lib/nginx/html/ -m emailaddress@domain.tld -d site.domain.tld -d domain.tld
Notice the 4096bit RSA keysize. I've written how to generate a bigger Diffie-Hellman group key for increased security here. Along with a small portion of an increased security nginx config. More will follow.
Obsolete
Tweaked an added some bits from the initial script found here
You can schedule it via a daily cron job.
What this basically does is download the latest letsencrypt release from github, building an environment in which it'll create the certificates if needed.
When the script is started on the day the certificate expires, it'll renew it.
It will place the necessary files in your webroot, so it won't need to start it's own webserver (and fail, because you're already running one) to validate your domain.
# !/bin/bash
#
# Let's Encrypt automatic certificate request/renewal
#
LE_DIR="/opt/letsencrypt"
LE_MAIL="youremail@domain.tld"
LE_DOM1="short website name eg. google.com"
LE_DOM2="fully qualified name eg. www.google.com"
LE_WEBROOT="/path/to/your/webroot/"
LE_CMD="$LE_DIR/letsencrypt-auto --text --agree-tos --keep --rsa-key-size 2048 certonly --webroot -w $LE_WEBROOT -m $LE_MAIL -d $LE_DOM1 -d $LE_DOM2"
GIT_CMD="git clone https://github.com/letsencrypt/letsencrypt.git $LE_DIR"
SRV_CMD="systemctl"
DEB_WEB_SRV="nginx"
RH_WEB_SRV="httpd.service"
if [ -d "$LE_DIR" ]; then
if [ -d "$LE_DIR/.git" ]; then
cd $LE_DIR
git pull
else
rm -rf $LE_DIR
$GIT_CMD
fi
else
$GIT_CMD
fi
# Determine Linux flavor
if [ -e "/usr/bin/lsb_release" ]; then
RELEASE="$(/usr/bin/lsb_release -i | awk '{print $3}')"
if [ "$RELEASE" == "Debian" ]; then
#$DEB_CMD $DEB_WEB_SRV stop
$LE_CMD
#$DEB_CMD $DEB_WEB_SRV start
$SRV_CMD reload $DEB_WEB_SRV
else
#$RH_CMD stop $RH_WEB_SRV
$LE_CMD
#$RH_CMD start $RH_WEB_SRV
$SRV_CMD reload $RH_WEB_SRV
fi
else
#$RH_CMD stop $RH_WEB_SRV
$LE_CMD
#$RH_CMD start $RH_WEB_SRV
#$RH_CMD reload $RH_WEB_SRV
fi