GNU/Linux >> Belajar Linux >  >> Linux

Keluarkan sertifikat SSL gratis dan CA yang ditandatangani untuk server web dari LetsEncrypt

Pendahuluan:
Sertifikat SSL menyediakan dua fungsi:
1. Otentikasi
2. Enkripsi

Enkripsi dapat dicapai tanpa otentikasi tetapi, untuk beberapa alasan, seseorang memutuskan untuk menggabungkannya bersama dalam satu sertifikat. Tampaknya masuk akal untuk bank dan situs e-commerce serius yang perlu diautentikasi dengan benar. Oleh karena itu ketika protokol HTTPS dikembangkan, tidak mungkin untuk mengenkripsi hanya aliran HTTP. Situasi ini membuat kami bergantung pada Otoritas Otentikasi Sertifikat untuk mendapatkan sertifikat meskipun kami hanya menginginkan enkripsi. Sekarang beberapa orang jenius di https://letsencrypt.org/ akhirnya menciptakan kemungkinan untuk mendapatkan sertifikat yang membentuk verifikasi otentikasi sederhana, dengan memanggil URL dan mengharapkan respons tertentu, dan jika berhasil mengeluarkan 90 hari gratis yang valid dan CA ditandatangani sertifikat SSL. Untuk administrator sistem, proses meminta dan menginstal sertifikat gratis tersebut menjadi sangat sederhana. Berikut adalah salah satu metode untuk melakukan hal ini di server web Debian/Ubuntu.
Referensi:http://www.admin-magazine.com/Articles/Getting-a-free-TLS-certificate-from-Let- s-Encrypt?utm_source=ADMIN+Newsletter&utm_campaign=ADMIN_Update_Free_Certificates_with_Let%27s_Encrypt_2016-20-07&utm_medium=email

LANGKAH:

Menginstal LetsEncrypt

apt-get update && apt-get install git
cd /usr/local/lib/
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --email [email protected] --agree-tos --help
echo "export PATH=$PATH:/usr/local/lib/letsencrypt" >> /root/.bashrc
. /root/.bashrc

CATATAN: Pastikan situs web yang ingin Anda tambahkan HTTPS sudah dikonfigurasi dan hidup di server web Anda.
Alasannya adalah selama proses meminta sertifikat, LetsEncrypt akan membuat sub-direktori tambahan ({htdocs}/ .well-known/acme-challenge/) dan file sementara khusus di htdocs situs (ditunjuk oleh arahan DocumentRoot di Apache) kemudian panggil file itu di situs dari server LetsEncrypt untuk mengotentikasi URL. Jika URL yang dipanggil tidak valid, itu tidak akan mengeluarkan sertifikat. Untuk alasan ini situs Anda harus aktif dan Anda perlu memberikan jalur htdocs. Setelah proses otentikasi, file sementara akan dihapus tetapi bukan sub direktori. Mereka akan tetap kosong.

Pemecahan masalah:

Peringatan Platform Tidak Aman
Jika Anda mendapatkan pesan kesalahan berikut, maka di Debian Wheezy Anda dapat menyelesaikannya dengan mengimpor SSL ke Python. Lihat di bawah.
InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning

Mengimpor dukungan SSL Python:
python
>>> import ssl
>>> (CTRL-D)

Memperbarui program klien LetsEncrypt

rm -rf /root/.local/share/letsencrypt
rm -rf /usr/local/lib/letsencrypt.old &>/dev/null
mv /usr/local/lib/letsencrypt /usr/local/lib/letsencrypt.old
cd /usr/local/lib/
git clone https://github.com/letsencrypt/letsencrypt

Meminta sertifikat

Misalnya. untuk domain blog.mydomain.com
CATATAN:pada permintaan pertama, skrip akan meminta Anda memberikan alamat email untuk tujuan kontak serta menerima syarat dan ketentuan penggunaan alat ini. Setelah itu tidak akan menanyakan pertanyaan ini kepada Anda.
letsencrypt-auto certonly --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com
Sertifikat dan kunci akan disimpan di /etc/letsencrypt/live/blog.mydomain.com/ as:
cert.pem : Certificate
chain.pem : CA Certificate
privkey.pem : Private key
fullchain.pem : Combination of the certificate and the CA Certificate

Daripada memindahkan sertifikat, cukup konfigurasikan Apache atau server web lain untuk menunjuk ke file sertifikat di mana mereka berada.
Dengan cara ini pekerjaan cron dapat dibuat untuk memperbarui sertifikat secara otomatis tanpa intervensi manual.
Sertifikat hanya berlaku selama 90 Hari; tidak ada pengecualian.
Ini berarti bahwa perintah yang sama di atas perlu dijalankan setiap 3 bulan atau lebih awal dengan tambahan opsi –perbarui secara default .
Batas sertifikat yang dapat Anda minta untuk domain tertentu adalah:saat ini 5 sertifikat / 7 hari.

Memperbarui satu sertifikat:

Untuk memperbarui sertifikat secara otomatis, disarankan untuk menggunakan tugas cron dan menambahkan opsi –perbarui secara default dalam perintah mis. sebagai berikut:
letsencrypt-auto certonly --renew-by-default --webroot -w /www/clients/blog.mydomain.com/htdocs -d blog.mydomain.com

Memperbarui semua menginstal sertifikat Letsencrypt:

/usr/local/lib/letsencrypt/letsencrypt-auto renew
Catatan: Disarankan untuk mengirim output perintah melalui email untuk memverifikasi apakah prosesnya berhasil.

Info Tambahan

Sertifikat LetsEncrypt disimpan di direktori /etc/letsencrypt/ dengan cara yang berbeda. Sangat TIDAK disarankan untuk menghapus salah satu sertifikat, file, atau symlink di direktori ini karena file di direktori 'keys' dan 'csr' tidak diidentifikasi untuk merujuk ke sertifikat tertentu. Jadi hanya menghapus beberapa file tetapi tidak yang lain yang terkait dengan sertifikat yang sama dapat membingungkan perintah klien dan Anda kemudian tidak dapat meminta sertifikat lagi. Pesan kesalahan dari program klien adalah seperti:
letsencrypt TypeError: coercing to Unicode: need string or buffer, NoneType found
Jika Anda pernah mencapai titik non-kembali itu, hapus saja semua direktori:arsip , csr , kunci , langsung dan perpanjangan TAPI bukan akun . Kemudian terbitkan kembali permintaan sertifikat untuk situs yang sudah ada. Sertifikat kemudian akan diperbarui dan Anda juga dapat meminta yang baru.

Untuk informasi lebih lanjut tentang subjek ini, lihat:
https://letsencrypt.readthedocs.org/en/latest/using.html

Skrip yang nyaman

Jika Anda ingin dapat menerbitkan sertifikat dan ingin memperbarui sendiri setelah 80 hari, skrip ini mungkin berguna.
#!/bin/bash
# Purpose: Issue or renew a certificate from LetsEncrypt
# It will also issue an 'at'command which will be responsible to automatically renew the certificate automatically
# This script also issues a new at comand which will do the same in around 3 Months days depending on the settings here
# Syntax: cert_request.sh -s SITE_NAME -d SITE_HTDOCS
# Changes: 30.12.2015 First implementation of the script
# 10.01.2016 Took out the read of wpinstall.cfg config file. Added checks for the letsencrypt and at programs
#--------------------------------------------------------------
. /root/.bashrc
RENEW_DAYS="80"
# Absolute path to this script.
SCRIPT=$(readlink -f $0)
CERTS_DIR="/etc/letsencrypt/live"
# Absolute path this script is in.
scriptdir=$(dirname $SCRIPT)
encryptprgm="/usr/local/lib/letsencrypt/letsencrypt-auto"
atprgm="/usr/bin/at"
EMAIL="[email protected]"
#
# Check the syntax
function usage () {
echo "Usage: cert_request.sh -s SITE_NAME -d SITE_HTDOCS"
echo "-s SITE_NAME Full web site address WITHOUT the 'http://' eg.: www.myblog.com"
echo "-d SITE_HTDOCS The absolute path where WordPress will be installed. eg. /www/sites/www.mysite.com/htdocs"
exit 1
}
#
if [ $# -ne 4 ]; then
echo "ERROR: Wrong number of given argunents."
usage
fi
# Make sure the letsencrypt client prgm is installed
if ! [ -e $encryptprgm ] ; then
echo "ERROR: the letsencrypt program isn not installed. Install it and retry."
echo "See instructions at: //tipstricks.itmatrix.eu/install-new-and-signed-ssl-certificate-for-web-servers"
exit 1
fi
# Make sure the at is installed
if ! [ -e $atprgm ] ; then
echo "ERROR: the 'AT' program isn not installed. Install it and retry."
echo "apt-get install at"
exit 1
fi
# Everything look good so far. Lets start.
# get the command options
while getopts "s:d:" OPTION
do
case $OPTION in
s) SITE_NAME=$OPTARG
;;
d) SITE_HTDOCS=$OPTARG
;;
h|?|*)
echo "ERROR: argument(s) unknown."
usage
;;
esac
done
echo "Requesting certificate at LetsEncrypt"
# Does it exist already, then renew only, otherwise request renewing the cert
if [ -d $CERTS_DIR/${SITE_NAME} ] ; then
echo "The certificate already exists. Requesting a renewal"
RENEW="--renew-by-default"
else
RENEW=""
fi
#
if ($encryptprgm certonly $RENEW --webroot -w $SITE_HTDOCS -d ${SITE_NAME} &>/dev/null); then
# Enable the Apache SSL configuration and restart Apache
(echo "Certificate request successful."
echo "Issuing a renewal of the certificate in 80 days using 'at' command"
service apache2 restart
echo "$SCRIPT -s $SITE_NAME -d $SITE_HTDOCS" | $atprgm now + $RENEW_DAYS days)| tee /tmp/cert_request.sh.log \
| mail -s "Request/Renewal of Certificate for $SITE_NAME" [email protected]
echo -e "------- SITES LIST --------\n$(ls -1 /etc/apache2/sites-enabled/ | egrep -v '^00|^wptest1')\n\n--------- CERTIFICATES LIST ---------$(ls -l /etc/letsencrypt/live/ | cut -c29-)\n\n------- AT Jobs LIST -------\n$(/root/bin/atlist.sh)" | mail -s "Request/Renewal of Certificate request LIST" $EMAIL
cat /tmp/cert_request.sh.log
exit 0
else
(echo "ERROR: The certificate request/renewal FAILED.")| tee /tmp/cert_request.sh.log \
| mail -s "Request/Renewal of Certificate for $SITE_NAME" $EMAIL
cat /tmp/cert_request.sh.log
exit 2
fi

#

Status sertifikat

Berikut adalah skrip berguna yang akan menampilkan informasi berikut:
– Daftar Pekerjaan AT yang siap dimulai pada waktu yang diperlukan
– Daftar sertifikat yang ada dan stempel waktu filenya
Karena setiap letsencrypt hanya berlaku selama 90 hari, ini akan memberi Anda gambaran tentang berapa umur sertifikat saat ini dan kapan permintaan sertifikat akan dilakukan lagi.
#!/bin/bash
# Description: Displays all 'at' jobs and their respective commands
# Systax: atlist.sh
# Changes: 05.11.2016 First inplementation
########################################################################
# Get the short jobs list and expand from there
echo "================ AT Jobs ready to start at the required times ==============="
atq | while read line ; do
jobnr=$(echo $line | awk '{print $1}')
echo $line
# Pickup all the command lines after first line matching '}'.
# This excludes all the environment variables and the at exit line.
# Exclude the matching '}' line and empty lines
# Add an offset of 8 chars to each command line.
# at -c $jobnr | grep -A100 -m1 -e '^\}' | grep -v '^\}' | sed -e '/^$/d' -e 's/^/ /'
at -c $jobnr | at -c $jobnr | sed -e '1,/^\}/d' -e '/^$/d' -e 's/^/ /'
done
echo ; echo
echo "=============== Age of present certificates ====================="
ls -l /etc/letsencrypt/live/*/cert.pem | awk '{print $6" "$7" "$8" "$9}' | sed -e 's|/etc/letsencrypt/live/||' -e 's|/cert.pem||'

Menginstal dan menggunakan CERBOT

Pendahuluan:
Alat Cerbot hanya menambahkan lebih banyak fitur ramah pengguna ke Lestencrypt asli yang terlihat di atas.
Lihat situs ini untuk informasi lebih lanjut:
https://certbot.eff.org/docs/install.html

Gunakan:
Ini dapat membuat permintaan sertifikat ke server Letsencryp dan juga membuat server web sementara untuk memungkinkan verifikasi koneksi HTTP dari situs yang meminta sertifikat. Fitur-fitur ini dapat dipanggil hanya dengan menambahkan opsi pada baris perintah.
Misalnya:Jika saya ingin situs web menjadi SSL saja maka umumnya Host virtual HTTP akan melakukan pengalihan ke HTTPS secara otomatis untuk setiap permintaan HTTP. Dalam hal ini memblokir verifikasi situs web dari server Letsencrypt. Ada 2 cara yang saya ketahui untuk menghindari kesulitan ini.
1) Buat kondisi pada redirection directive di Apache yang tidak redirect ke HTTPS jika URI adalah /.well-known/…..
Pro:Tidak ada downtime dari web server
Con:Kondisi tambahan dalam redirection directive harus dilakukan untuk setiap situs SSL.
2) Hentikan web server. Jalankan cerbot dengan opsi –standalone . Mulai ulang server web.
Solusi ini hanya akan baik untuk lingkungan cluster server web jika Anda tidak ingin memiliki waktu henti di situs Anda.
Pro:Tidak perlu kondisi pengalihan tambahan untuk situs. Sangat bagus untuk server Nginx di mana kondisi re-direction sulit dibuat
Con:Situs mengalami downtime selama prosedur ini yang dapat bertahan lama jika Anda memiliki banyak situs yang membutuhkan pembuatan/perpanjangan sertifikat.

Pemasangan:
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto

Atau jika Anda memiliki Ubuntu 16.04 atau yang lebih baru, perintah berikut juga lebih disukai untuk instalasi:
apt-get install certbot python-certbot-apache
Kemudian untuk mendapatkan bantuan tentang 'certbot'
certbot --help
Contoh 'certbot ' menggunakan server webnya sendiri untuk otentikasi, dengan cara ini menghindari kesulitan karena harus mengganggu Apache/NginX untuk proses otentikasi.
Contoh berikut akan meminta satu sertifikat yang akan valid untuk 4 subdomain ini menggunakan (SAN) mekanisme.
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
Dalam contoh di atas, Anda perlu memastikan Apache/NginX tidak menggunakan port 80. Jika ya, matikan server web sebelum perintah ini dan mulai ulang segera setelahnya. Ini akan menghasilkan downtime akses web yang singkat. Waktu henti ini mungkin dapat diterima tergantung pada apakah Anda memiliki server web di belakang penyeimbang beban atau layanan web dapat mengizinkan waktu henti tersebut.
Contoh:
service apache2 stop
certbot certonly --standalone -d www.mydomain.com -d www.mydomain2.com -d mailman.mydomain.com -d mail.mydomain.com
service apache2 start


Linux
  1. SSL gratis untuk Nginx di Centos oleh Let's encrypt

  2. Cara Menghasilkan Kunci SSL, CSR, dan Sertifikat yang Ditandatangani Sendiri Untuk Apache

  3. Kode untuk malloc dan gratis

  1. Bagaimana Cara Membuat Kunci CSR dan menginstal Sertifikat SSL dari CWP?

  2. Cara menghasilkan Kunci dan CSR di cPanel untuk Sertifikat SSL Anda

  3. Siapkan sertifikat SSL untuk nama host di Panel Web CentOS

  1. Kesalahan peramban sertifikat SSL

  2. Cara Memperbaiki Masalah Protokol SSL TLS Curl dari CLI dan Kode PHP

  3. Daftar semua sertifikat ssl ca yang tersedia