Tôi đã cài đặt và vận hành mã hóa như thế nào trên CentOS


Đặng Thiệu Bảo
4 năm trước
Hữu ích 4 Chia sẻ Viết bình luận 0
Đã xem 4746

Bạn đọc thân mến,

CẢNH BÁO: Ở đây có đồ công nghệ. Chỉ là phàm nhân, bước đi nhẹ nhàng.

Dịch: Tôi không chịu trách nhiệm nếu bạn vòi trang web của bạn cố gắng thực hiện những gì tôi mô tả ở đây.

Web đã được tặng một món quà tuyệt vời với tên là Cách mã hóa miễn phí để nhận chứng chỉ SSL cho trang web của bạn. Nhiều dịch vụ lưu trữ đã kết hợp Let Encrypt trong bảng điều khiển của họ. Sẽ sớm không có lý do chính đáng cho mọi trang web không được mã hóa.

Mã hóa so với xác minh

Trước khi tôi đi xa hơn, hãy nói về hai điều mà chứng chỉ SSL có thể cung cấp cho trang web của bạn.

Mã hóa

Điều đầu tiên mà chứng chỉ SSL mang lại cho bạn là mã hóa. Đối với người không quen, điều này có nghĩa là trước khi máy chủ của bạn gửi một byte nội dung, nó sẽ đàm phán một kênh bảo mật với máy khách. Sau đó, nó sẽ gửi nội dung. Đây là những gì Let Encrypt hướng tới, bảo mật web.

Trước đây, bạn phải mua chứng chỉ SSL để được mã hóa. Cấp, giá đã giảm trong vài năm qua. Cái cuối cùng tôi thực sự mua là cho Voices of the ElePHPant và nó chỉ có 8 đô la một năm! Tuy nhiên, đó là một rào cản đối với một số người. Vì vậy, Let's Encrypt cung cấp một cách để mọi người có được các trang web được mã hóa miễn phí.

xác minh

Một điều khác mà một số chứng chỉ SSL thương mại làm là cung cấp xác minh. Để có được một trong những chứng chỉ SSL đắt tiền hơn, ví dụ như không phải là 8 đô la / năm, bạn phải chứng minh bạn là ai hoặc doanh nghiệp của bạn. Công ty cấp chứng chỉ SSL sẽ hỏi bạn rất nhiều câu hỏi, thậm chí bạn có thể phải cung cấp DUNS để được xác minh. Điều này giúp ngăn ngừa gian lận trên web và rất quan trọng đối với các trang web thương mại điện tử, trang web ngân hàng và bất kỳ trang web nào bạn muốn đảm bảo người dùng rằng họ đang xem trang web của công ty mà họ nghĩ là họ.

Let Encrypt không cung cấp Xác minh. Nếu xác minh là quan trọng đối với người dùng của bạn, đừng sử dụng Let Encrypt. Mặt khác, xác minh không thực sự quan trọng đối với các trang web như blog này, vì vậy, Encrypt là một lựa chọn tuyệt vời.

Làm việc

Let Encrypt cung cấp tài liệu tuyệt vời và rất nhiều tự động hóa nếu bạn đang chạy Debian. Nếu bạn không giống như tôi, hoặc nếu bạn có một thiết lập Apache không chuẩn, thì bạn phải thực hiện thêm một vài bước.

Vì vậy, tôi sẽ mô tả những gì tôi làm khi thiết lập chứng chỉ SSL mới từ Let Encrypt và cách tôi tự động gia hạn chúng.

Giả định sau đây bạn đã cài đặt Let Encrypt trên máy chủ của mình. Tôi chỉ đơn giản là nhân bản repo Let Encrypt GitHub để tôi có thể cập nhật. Người theo dõi Twitter Nick Le Mouton cũng chỉ ra rằng Let Encrypt cũng là EPEL và bạn cũng có thể sử dụng yum để cài đặt nó.

Bước 1: Nhận chứng chỉ

Tôi có một kịch bản để quản lý điều này cho tôi. Tôi tự chỉnh sửa nó trước khi chạy mỗi lần, thay đổi tên miền. Vì tôi không mua nhiều hơn một tên miền mỗi tháng trong những ngày này.

Tập lệnh chứng chỉ

#!/bin/bash
#
# makeCert.sh
# This script requests a cert the first time. This is not the auto renew script.
#
# Set DOMAIN before running
#
DOMAIN=example.com
SITE=$DOMAIN

#
# Make sure this is set correctly
#
ENCRYPTDIR=/opt/letsencrypt

#
# Once it is working, you shoudn't have to change anything below here.
#
cd $ENCRYPTDIR


#
# How many dots are in the $SITE. If more than 1 then it is a subdomain 
# so don't register www as well.
#
FILESEPS=$(echo $SITE | awk 'BEGIN { FS="."} {print NF}')

if [ $FILESEPS -le 2 ]; then
 DOMAIN="$SITE -d www.$SITE "
else
 DOMAIN="$SITE"
fi

#
# Requst the cert
#
./letsencrypt-auto certonly \
 --agree-tos \
 -d $DOMAIN \
 -a webroot \
 --webroot-path /var/www/$SITE/public_html \
 --server https://acme-v01.api.letsencrypt.org/directory


Tất cả các trang web của tôi ngồi /var/wwwtrên máy chủ của tôi. Nếu bạn có một sơ đồ khác, bạn sẽ phải điều chỉnh.

Cập nhật Apache

Ok, nhận được chứng chỉ SSL ban đầu của tôi. Vì tôi không thể sử dụng bất kỳ tự động hóa nào, tôi phải cập nhật thủ công các tệp apache conf của mình. Làm thế nào bạn làm điều này là tùy thuộc vào bạn. Vì bạn đang đọc điều này bởi vì bạn có một thiết lập không chuẩn, tôi không thể nói cho bạn biết chính xác những gì bạn cần làm. Thành thật mà nói, nếu bạn không biết, có lẽ bạn không nên đọc nó ở nơi đầu tiên. Phần quan trọng là bạn thêm các dòng này vào tệp apache conf của trang web của bạn, bất cứ khi nào có thể.

Phần quan trọng là bạn thêm các dòng này vào tệp apache conf của trang web của bạn, bất cứ khi nào có thể.


 SSLEngine on
 SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
 SSLCACertificateFile /etc/letsencrypt/live/example.com/chain.pem 


Một khi bạn đã làm điều đó, khởi động lại apache.

Bước 2: Nhận đổi mới

Hãy mã hóa chứng chỉ SSL chỉ tốt trong 90 ngày. Vì vậy, bạn sẽ phải gia hạn chúng ít nhất một lần một quý. Rất may, đổi mới không khó. Tôi có một kịch bản bash mà tôi chạy một lần một buổi sáng. Tôi sẽ không nói cho bạn biết khi nào nhưng chọn một giờ và phút không chuẩn để tất cả chúng ta không nhấn vào lúc 1:15 sáng.

Bạn chạy nó một lần một ngày vì một vài lý do.

Đầu tiên, chúng tôi không gia hạn certs mỗi ngày, chúng tôi chỉ kiểm tra xem họ có cần gia hạn không. Đó là một cú chạm nhẹ hơn nhiều và thậm chí không liên quan đến việc nhấn API của họ trừ khi bạn thực sự cần phải gia hạn.

Thứ hai, nếu bạn chạy nó một lần trong 90 ngày và nó không thành công, certs của bạn sẽ hết hạn trước lần chạy tiếp theo. Thậm chí cứ sau 30 ngày là một rủi ro. Nếu bạn chạy nó mỗi ngày và bạn có chứng chỉ sắp hết hạn, nếu vì lý do nào đó bạn không thể đạt được API vào ngày 1, bạn sẽ có nhiều cơ hội hơn.

Kịch bản đổi mới

#!/bin/bash
#
# renewCerts.sh
# This script checks every cert on this server and if necessary, renews it.
#

#
# Configure
#
ROOTDIR=/etc/letsencrypt/live
WEBROOT=/var/www
ENCRYPTDIR=/opt/letsencrypt

#
# Loop and renew
#
cd $ENCRYPTDIR

for SITE in $(ls -1 $ROOTDIR); do

 FILESEPS=$(echo $SITE | awk 'BEGIN { FS="."} {print NF}')

 if [ $FILESEPS -le 2 ]; then
 DOMAIN="$SITE -d www.$SITE "
 else
 DOMAIN="$SITE"
 fi

 ./letsencrypt-auto certonly \
 --agree-tos \
 --keep-until-expiring \
 -d $DOMAIN \
 -a webroot \
 --webroot-path $WEBROOT/$SITE/public_html \
 --server https://acme-v01.api.letsencrypt.org/directory
done


#
# Restart Apache
#
systemctl restart httpd

Kịch bản ở trên rất có thể sẽ được chạy dưới dạng root hoặc bằng cách sử dụng sudo vì nó phải tự động khởi động lại Apache.

Thay đổi lớn là --keep-until-expiring.Điều này báo cho kịch bản Let Encrypt kiểm tra chứng chỉ và nếu ngày hết hạn quá 30 ngày, đừng bận tâm đến nó. Nếu dưới 30 ngày, tập lệnh sẽ tiếp tục và yêu cầu chứng chỉ SSL mới.

Gotchas

Chỉ có một gotcha tôi đã tìm thấy khi làm mọi thứ theo cách này. Nếu bạn có nhiều hơn 3 tên miền phụ và bạn có certs cho tất cả các tên miền riêng lẻ như tôi làm, bạn chỉ có thể yêu cầu 3 chứng chỉ SSL mỗi khoảng thời gian 24 giờ cho bất kỳ tên miền nào. Câu trả lời cho điều này thực sự rất dễ dàng, sắp xếp lại ngày tháng trên chứng chỉ của bạn. Bạn có thể có bao nhiêu tùy thích miễn là hơn 3 trong số chúng không hết hạn trong cùng một ngày.

Gói lại

Tôi đã phát triển các tập lệnh này ngay khi bản beta công khai Encrypt được mở. Khi dự án đáo hạn, tất cả những điều này có thể không cần thiết. Trước khi triển khai các tập lệnh này, hãy kiểm tra tài liệu Let Encrypt để xem mọi thứ đã thay đổi.

ps tôi ghét phải nói điều này nhưng tôi sẽ Thay đổi example.com trong tất cả các tập lệnh trên thành tên miền của bạn. Chứng chỉ SSL cho example.com sẽ không giúp bạn nhiều. :)

Hữu ích 4 Chia sẻ Viết bình luận 0
Đã xem 4746