blog-details

Hầu hết mọi trang web bạn truy cập ngày hôm nay đều được bảo vệ bởi HTTPS. Nếu của bạn chưa có, thì nó nên như vậy. Bảo mật máy chủ của bạn bằng HTTPS cũng có nghĩa là bạn không thể gửi yêu cầu đến máy chủ này từ máy chủ không được bảo vệ bởi HTTPS. Điều này đặt ra một vấn đề cho các nhà phát triển sử dụng môi trường phát triển cục bộ vì tất cả chúng đều chạy trên http: // localhost out-of-the-box.

Tại buổi khởi động mà tôi tham gia, chúng tôi đã quyết định bảo vệ các điểm cuối của Bộ cân bằng tải đàn hồi AWS của mình bằng HTTPS như một phần của động thái tăng cường bảo mật. Tôi đã gặp phải tình huống trong đó các yêu cầu của môi trường phát triển cục bộ của tôi đối với máy chủ bắt đầu bị từ chối.

Tìm kiếm nhanh trên Google sau đó, tôi tìm thấy một số bài viết như thế này, bài này hoặc bài này với hướng dẫn chi tiết về cách tôi có thể triển khai HTTPS trên localhost. Không có hướng dẫn nào trong số những hướng dẫn này dường như hiệu quả ngay cả khi tôi đã tuân theo chúng một cách tôn giáo. Chrome luôn gây ra lỗi NET :: ERR_CERT_COMMON_NAME_INVALID cho tôi.

The problem

Tất cả các hướng dẫn chi tiết tôi đã tìm thấy đều đúng với thời gian chúng được viết. Không còn nữa.

Sau rất nhiều lần sử dụng Google, tôi đã phát hiện ra rằng lý do khiến chứng chỉ cục bộ của tôi bị từ chối là do Chrome đã ngừng hỗ trợ đối sánh commonName trong chứng chỉ, có hiệu lực, yêu cầu phải có subjectAltName kể từ tháng 1 năm 2017.

The solution

Chúng tôi sẽ sử dụng OpenSSL để tạo tất cả các chứng chỉ của mình.

Bước 1: Chứng chỉ SSL gốc

Bước đầu tiên là tạo chứng chỉ Lớp cổng bảo mật gốc (SSL). Sau đó, chứng chỉ gốc này có thể được sử dụng để ký bất kỳ số lượng chứng chỉ nào bạn có thể tạo cho các miền riêng lẻ. Nếu bạn không quen thuộc với hệ sinh thái SSL, bài viết này từ DNSimple thực hiện rất tốt việc giới thiệu chứng chỉ SSL gốc.

Tạo khóa RSA-2048 và lưu vào tệp rootCA.key. Tệp này sẽ được sử dụng làm khóa để tạo chứng chỉ SSL gốc. Bạn sẽ được nhắc nhập cụm từ mật khẩu mà bạn sẽ cần nhập mỗi khi sử dụng khóa cụ thể này để tạo chứng chỉ.

openssl genrsa -des3 -out rootCA.key 2048

Bạn có thể sử dụng khóa bạn đã tạo để tạo chứng chỉ SSL gốc mới. Lưu nó vào một tệp có tênrootCA.pem. Chứng chỉ này sẽ có hiệu lực trong vòng 1.024 ngày. Vui lòng thay đổi nó thành bất kỳ số ngày nào bạn muốn. Bạn cũng sẽ được nhắc về các thông tin tùy chọn khác.

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

Bước 2: Tin tưởng chứng chỉ SSL gốc

Trước khi bạn có thể sử dụng chứng chỉ SSL gốc mới được tạo để bắt đầu cấp chứng chỉ miền, còn một bước nữa. Bạn cần yêu cầu máy Mac tin tưởng vào chứng chỉ gốc của bạn để tất cả các chứng chỉ riêng lẻ do nó cấp cũng được tin cậy.

Mở Truy cập chuỗi khóa trên máy Mac của bạn và chuyển đến danh mục Chứng chỉ trong chuỗi khóa Hệ thống của bạn. Khi đó, hãy nhập rootCA.pem bằng cách sử dụng Tệp> Nhập mục. Nhấp đúp vào chứng chỉ đã nhập và thay đổi menu thả xuống “Khi sử dụng chứng chỉ này:” thành Luôn tin cậy trong phần Tin cậy.

Chứng chỉ của bạn sẽ trông giống như thế này bên trong Keychain Access nếu bạn đã làm theo đúng các hướng dẫn cho đến bây giờ.

Bước 2: Chứng chỉ SSL miền

Chứng chỉ SSL gốc hiện có thể được sử dụng để cấp chứng chỉ dành riêng cho môi trường phát triển cục bộ của bạn tại localhost.

Tạo tệp cấu hình OpenSSL server.csr.cnf mới để bạn có thể nhập các cài đặt này khi tạo chứng chỉ thay vì nhập chúng trên dòng lệnh.

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=US
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
[email protected]
CN = localhost

Create a v3.ext file in order to create a X509 v3 certificate. Notice how we’re specifying subjectAltName here.

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

Create a certificate key for localhost using the configuration settings stored in server.csr.cnf. This key is stored in

server.key.

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )

A certificate signing request is issued via the root SSL certificate we created earlier to create a domain certificate for localhost. The output is a certificate file called server.crt.

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

Sử dụng chứng chỉ SSL mới của bạn

Giờ đây, bạn đã sẵn sàng bảo vệ máy chủ cục bộ của mình bằng HTTPS. Di chuyển các tệp server.key và server.crt đến một vị trí có thể truy cập được trên máy chủ của bạn và đưa chúng vào khi khởi động máy chủ của bạn.

Trong một ứng dụng Express được viết bằng Node.js, đây là cách bạn thực hiện. Đảm bảo rằng bạn chỉ làm điều này cho môi trường địa phương của bạn. Không sử dụng cái này trong sản xuất.

Tôi hy vọng bạn thấy hướng dẫn này hữu ích. Nếu bạn không cảm thấy thoải mái với việc chạy các lệnh do chính mình đưa ra ở đây, tôi đã tạo một tập hợp các tập lệnh hữu ích mà bạn có thể chạy nhanh chóng để tạo chứng chỉ cho bạn. Bạn có thể tìm thêm thông tin chi tiết trên repo GitHub.

Free – Tải về

Đánh giá bài viết