Pada bulan Maret 2018 Let's Encrypt menambahkan dukungan untuk sertifikat wildcard. Sertifikat wildcard memungkinkan Anda mengamankan semua subdomain tingkat pertama dari suatu domain dengan satu sertifikat. Sertifikat wildcard hanya dapat diperoleh melalui ACMEv2, yang merupakan versi terbaru dari protokol ACME. Untuk menggunakan ACMEv2 untuk sertifikat wildcard atau non-wildcard, Anda akan memerlukan klien yang telah diperbarui untuk mendukung ACMEv2. Salah satu klien tersebut adalah acme.sh, yang merupakan klien protokol ACME / ACMEv2 yang ditulis murni dalam bahasa Shell (Unix shell) tanpa ketergantungan. Selain itu, domain wildcard harus divalidasi menggunakan tipe tantangan DNS-01. Itu menyiratkan bahwa Anda perlu memodifikasi catatan TXT DNS untuk membuktikan kontrol atas domain untuk mendapatkan sertifikat wildcard.
Dalam panduan ini, kami menjelaskan cara mendapatkan dan menggunakan sertifikat wildcard gratis dari Let's Encrypt di Ubuntu 19.04 dengan menggunakan acme.shklien, alat Lexicon untuk manipulasi otomatis catatan DNS dengan mengonsumsi Vultr API dan menyebarkan sertifikat ke server web Nginx.
Persyaratan
- Ubuntu 19.04 Vultr cloud server yang baru saja dikerahkan.
- Anda memiliki nama domain terdaftar. Panduan ini digunakan
example.comsebagai domain contoh.
- Pastikan Anda telah menetapkan data DNS A / AAAA dan CNAME untuk FQDN Anda. Anda mungkin ingin berkonsultasi dengan Pengantar tutorial DNS Vultr jika Anda perlu membiasakan diri dengan konsep DNS.
- Akses API Vultr diaktifkan di panel kontrol akun Vultr Anda.
Sebelum kamu memulai
Periksa versi Ubuntu.
lsb_release -ds
# Ubuntu 19.04
Buat akun pengguna baru dengan sudoakses dan nama pengguna pilihan Anda dan beralihlah ke sana. Kami menggunakan johndoe.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
CATATAN : Ganti johndoedengan nama pengguna Anda.
Siapkan zona waktu.
sudo dpkg-reconfigure tzdata
Pastikan sistem Ubuntu Anda mutakhir.
sudo apt update && sudo apt upgrade -y
Instal paket yang diperlukan.
sudo apt install -y git wget curl socat
Instal Nginx
Instal server web Nginx.
sudo apt install -y nginx
Periksa versinya.
sudo nginx -v
# nginx version: nginx/1.15.9 (Ubuntu)
Instal Python dan Leksikon
Sebagai langkah pertama dalam proses memperoleh sertifikat wildcard dari Let's Encrypt menggunakan acme.sh dan Vultr API, Anda perlu menginstal Python dan Lexicon . Lexicon adalah paket Python yang menyediakan cara untuk memanipulasi catatan DNS pada beberapa penyedia DNS dengan cara standar.
Instal Python jika belum diinstal pada sistem Anda.
sudo apt install -y python3
Konfirmasikan penginstalan dengan memverifikasi versi.
python3 --version
# Python 3.7.3
Instal alat Lexicon. Leksikon adalah alat Python yang memungkinkan Anda untuk memanipulasi catatan DNS pada berbagai penyedia DNS dengan cara standar.
sudo apt install -y lexicon
Periksa versi Leksikon.
lexicon --version
# lexicon 3.0.8
Instal acme.shklien
Acme.shadalah klien protokol ACME yang ditulis murni dalam bahasa Shell (Unix shell) yang mengotomatiskan proses mendapatkan sertifikat yang ditandatangani melalui Let's Encrypt. Ini mendukung ACME v1 dan ACME v2, dan yang paling penting mendukung ACME v2 sertifikat wildcard. Di bagian ini, kami memasang skrip Acme.sh.
CATATAN: Disarankan untuk menggunakan rootpengguna untuk menginstal acme.sh, meskipun tidak memerlukan root/ sudoakses.
Beralih ke rootpengguna dari pengguna biasa jika Anda telah membuatnya.
sudo su - root
Unduh dan pasang acme.sh.
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail "[email protected]"
source ~/.bashrc
cd
Periksa versinya.
acme.sh --version
# v2.8.2
Dapatkan sertifikat wildcard dari Let's Encrypt
Untuk mendapatkan sertifikat wildcard, kami hanya dapat menggunakan metode validasi DNS. Kami menggunakan Lexicon dan Vultr DNS API untuk memanipulasi data DNS TXT.
Dapatkan sertifikat wildcard RSA dan ECC untuk domain Anda.
# Configure your API key and username
export PROVIDER=vultr
export LEXICON_VULTR_USERNAME="[email protected]"
export LEXICON_VULTR_TOKEN="XXXXXXXXXXXXXXX"
# RSA 2048
acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength 2048
# ECC 256
acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength ec-256
CATATAN : Jangan lupa ganti example.comdengan nama domain Anda, dan ganti nilai placeholder Vultr API dengan milik Anda.
Setelah menjalankan perintah sebelumnya, sertifikat dan kunci Anda ada di:
- Untuk RSA:
~/.acme.sh/example.comdirektori.
- Untuk
~/.acme.sh/example.com_eccdirektori ECC / ECDSA:.
CATATAN : Anda tidak boleh menggunakan file cert dalam ~/.acme.sh/folder, mereka hanya untuk penggunaan internal, struktur direktori dapat berubah di masa depan.
Untuk daftar sertifikat Anda, Anda dapat menjalankan:
acme.sh --list
Buat folder untuk menyimpan sertifikat Anda dalam produksi. Kami menggunakan /etc/letsencryptdirektori.
sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc
Instal / salin sertifikat untuk penggunaan produksi di server Anda.
# RSA
acme.sh --install-cert -d example.com \
--cert-file /etc/letsencrypt/example.com/cert.pem \
--key-file /etc/letsencrypt/example.com/private.key \
--fullchain-file /etc/letsencrypt/example.com/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx.service"
# ECC/ECDSA
acme.sh --install-cert -d example.com --ecc \
--cert-file /etc/letsencrypt/example.com_ecc/cert.pem \
--key-file /etc/letsencrypt/example.com_ecc/private.key \
--fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx.service"
Sekarang kita telah berhasil memperoleh sertifikat wildcard dari Let's Encrypt, kita perlu mengkonfigurasi server web Nginx. Semua sertifikat diperbarui secara otomatis setiap 60 hari.
Setelah mendapatkan dan menginstal sertifikat ke lokasi pilihan Anda, Anda dapat keluar dari rootpengguna ke sudopengguna biasa dan terus mengelola server Anda dengan menggunakan sudojika diperlukan.
exit
Jalankan sudo vim /etc/nginx/sites-available/example.com.confdan isi file dengan konten berikut. Ganti semua kemunculan example.comdengan nama domain Anda sendiri.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com *.example.com;
root /var/www/example.com;
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com/private.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/private.key;
}
Aktifkan example.com.confkonfigurasi baru dengan menautkan file ke sites-enableddirektori.
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Uji konfigurasi Nginx.
sudo nginx -t
Muat ulang Nginx.
sudo systemctl reload nginx.service
Itu dia. Kami menyebarkan sertifikat wildcard ke Nginx, menggunakan acme.sh, Lexicon, dan Vultr API. Sertifikat wildcard dapat berguna ketika Anda ingin mengamankan beberapa subdomain tingkat pertama yang dihasilkan secara dinamis.