Pada bulan Mac 2018 Let's Encrypt menambahkan sokongan untuk sijil wildcard. Sijil wildcard membolehkan anda mengamankan semua subdomain peringkat pertama domain dengan satu sijil. Sijil wildcard hanya boleh didapati melalui ACMEv2, yang merupakan versi terkini dari protokol ACME. Untuk menggunakan ACMEv2 untuk sijil wildcard atau bukan wildcard, anda memerlukan pelanggan yang telah dikemas kini untuk menyokong ACMEv2. Salah satu pelanggannya ialah acme.sh, yang merupakan pelanggan protokol ACME / ACMEv2 yang ditulis semata-mata dalam bahasa shell Shell (Unix) tanpa sebarang kebergantungan. Selanjutnya, domain wildcard mesti disahkan menggunakan jenis cabaran DNS-01. Ini menunjukkan bahawa anda perlu mengubah rekod TXT DNS untuk membuktikan kawalan ke atas domain untuk mendapatkan sijil wildcard.
Di dalam panduan ini, kami akan menerangkan bagaimana untuk mendapatkan dan menggunakan sijil wildcard percuma dari Let's Encrypt pada Ubuntu 19.04 dengan menggunakan acme.shklien, Alat Lexicon untuk manipulasi rekod DNS automatik dengan menggunakan Vultr API dan menyerahkan pensijilan ke pelayan web Nginx.
Keperluan
- Pelayan awan Ubuntu 19.04 Vultr yang baru digunakan.
- Anda mempunyai nama domain berdaftar. Panduan ini digunakan
example.comsebagai domain contoh.
- Pastikan anda telah menetapkan rekod DNS A / AAAA dan CNAME untuk Nama Domain Berkelayakan sepenuhnya (FQDN). Anda mungkin ingin merujuk kepada tutorial Pengenalan kepada Vultr DNS jika anda perlu membiasakan diri dengan konsep DNS.
- Akses API Vultr diaktifkan di panel kawalan akaun Vultr anda.
Sebelum awak bermula
Semak versi Ubuntu.
lsb_release -ds
# Ubuntu 19.04
Buat akaun pengguna baru dengan sudoakses dan nama pengguna pilihan anda dan beralih kepadanya. Kami menggunakan johndoe.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
NOTA : Gantikan johndoedengan nama pengguna anda.
Sediakan zon waktu.
sudo dpkg-reconfigure tzdata
Pastikan sistem Ubuntu anda terkini.
sudo apt update && sudo apt upgrade -y
Pasang pakej yang diperlukan.
sudo apt install -y git wget curl socat
Pasang Nginx
Pasang pelayan web Nginx.
sudo apt install -y nginx
Semak versi.
sudo nginx -v
# nginx version: nginx/1.15.9 (Ubuntu)
Pasang Python dan Lexicon
Sebagai langkah pertama dalam proses mendapatkan sijil wildcard daripada Let's Encrypt menggunakan acme.sh dan Vultr API, anda perlu memasang Python dan Lexicon . Lexicon adalah pakej Python yang menyediakan cara untuk memanipulasi rekod DNS pada beberapa pembekal DNS dengan cara tersendiri.
Pasang Python jika belum dipasang pada sistem anda.
sudo apt install -y python3
Sahkan pemasangan dengan mengesahkan versi.
python3 --version
# Python 3.7.3
Pasang alat Lexicon. Leksikon adalah alat Python yang membolehkan anda memanipulasi rekod DNS pada pelbagai pembekal DNS dengan cara tersendiri.
sudo apt install -y lexicon
Semak versi Lexicon.
lexicon --version
# lexicon 3.0.8
Pasang acme.shpelanggan
Acme.shadalah pelanggan protokol ACME yang ditulis semata-mata dalam bahasa shell Shell (Unix shell) yang mengautomasikan proses mendapatkan sijil yang ditandatangani melalui Let's Encrypt. Ia menyokong ACME v1 dan ACME v2, dan yang paling penting ia menyokong pensijilan wildcard ACME v2. Dalam bahagian ini, kami memasang skrip Acme.sh.
CATATAN: Sebaiknya gunakan rootpengguna untuk memasang acme.sh, walaupun tidak memerlukan root/ sudomengakses.
Beralih kepada rootpengguna dari pengguna biasa jika anda telah menciptanya.
sudo su - root
Muat turun 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
Semak versi.
acme.sh --version
# v2.8.2
Dapatkan sijil wildcard dari Let's Encrypt
Untuk mendapatkan sijil wildcard, kami hanya boleh menggunakan kaedah pengesahan DNS. Kami menggunakan Lexicon dan Vultr DNS API untuk memanipulasi rekod DNS TXT.
Dapatkan sijil 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 API Vultr dengan yang anda miliki.
Setelah menjalankan perintah sebelumnya, sijil dan kunci anda ada di:
- Untuk RSA:
~/.acme.sh/example.comdirektori.
- Untuk ECC / ECDSA:
~/.acme.sh/example.com_eccdirektori.
NOTA : Anda tidak boleh menggunakan fail cert dalam ~/.acme.sh/folder, mereka hanya untuk kegunaan dalaman, struktur direktori mungkin berubah pada masa akan datang.
Untuk menyenaraikan pensijilan anda, anda boleh menjalankan:
acme.sh --list
Buat folder untuk menyimpan sijil anda dalam pengeluaran. Kami menggunakan /etc/letsencryptdirektori.
sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc
Pasang / salinan sijil untuk kegunaan pengeluaran pada pelayan 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 bahawa kami telah berjaya mendapatkan sijil wildcard dari Let's Encrypt, kami perlu mengkonfigurasi pelayan web Nginx. Semua sijil diperbaharui secara automatik setiap 60 hari.
Setelah memperoleh dan memasang sijil ke lokasi pilihan anda, anda boleh keluar dari rootpengguna ke sudopengguna biasa dan terus mengurus pelayan anda dengan menggunakan sudojika diperlukan.
exit
Jalankan sudo vim /etc/nginx/sites-available/example.com.confdan isi fail dengan kandungan berikut. Gantikan semua kejadian 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 menghubungkan fail ke sites-enableddirektori.
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Konfigurasi Nginx ujian.
sudo nginx -t
Muat semula Nginx.
sudo systemctl reload nginx.service
Itu sahaja. Kami menggunakan sertifikat wildcard ke Nginx, menggunakan API acme.sh, Lexicon, dan Vultr. Sijil wildcard boleh berguna apabila anda ingin mendapatkan beberapa subdomain tahap pertama yang dihasilkan secara dinamik.