Cách tạo tệp .pem cho máy chủ web https


90

Tôi đang sử dụng khung Express trong Node.js để tạo máy chủ web. Tôi muốn vận chuyển dựa trên SSL.

Mã để tạo máy chủ web https như bên dưới.

var app = express.createServer({
  key: fs.readFileSync('./conf/key.pem'),
  cert: fs.readFileSync('./conf/cert.pem')
});
module.exports = app;

Câu hỏi: Làm cách nào để tạo key.pem và cert.pem theo yêu cầu của express?

Câu trả lời:


200

Hai tệp bạn cần là chứng chỉ SSL được mã hóa PEM và khóa cá nhân. Khóa và chứng chỉ được mã hóa PEM là văn bản được mã hóa Base64 với các dấu phân cách đầu / cuối giống -----BEGIN RSA PRIVATE KEY-----hoặc tương tự.

Để tạo chứng chỉ SSL, trước tiên bạn cần tạo khóa cá nhân và yêu cầu ký chứng chỉ hoặc CSR (cũng chứa khóa công khai của bạn) .Bạn có thể thực hiện việc này theo nhiều cách, nhưng đây là cách thực hiện trong OpenSSL.

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

Điều này sẽ khiến bạn nhập lời nhắc tương tác để tạo khóa riêng RSA 2048 bit và CSR có tất cả thông tin bạn chọn nhập tại lời nhắc. ( Lưu ý: Common Name là nơi bạn muốn đặt tên miền mà bạn sẽ sử dụng để truy cập trang web của mình. ) Sau khi hoàn thành việc này, bạn thường sẽ gửi CSR này đến cơ quan cấp chứng chỉ đáng tin cậy và sau khi họ đã xác thực yêu cầu của bạn, bạn sẽ nhận được một chứng chỉ.

Nếu bạn không quan tâm đến việc chứng chỉ của mình được tin cậy (thường là trường hợp dành cho mục đích phát triển), bạn có thể tạo chứng chỉ tự ký. Để làm điều này, chúng ta có thể sử dụng gần như cùng một dòng, nhưng chúng ta sẽ chuyển thêm hai tham số.

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

Điều này sẽ cung cấp cho bạn chứng chỉ (có giá trị trong 10 năm) và cặp khóa mà bạn có thể sử dụng trong đoạn mã bạn đã đăng.


2
những gì về chứng chỉ và khóa khách hàng?
nkint

1
Bài này xong, chạy cả 2 lệnh anh ấy dán để giành key + cert. Máy khách không thiết lập niềm tin, chỉ máy chủ.
Ninjaxor

@paul Bạn có thể vui lòng cho tôi biết khóa .pem và cert này được tạo ở đâu không? Ý tôi là thư mục nào? Tôi đang sử dụng Ubuntu 14
StormTrooper

2
Chúng sẽ ghi vào thư mục làm việc hiện tại của shell của bạn.
Paul Kehrer

1
Lưu ý rằng chứng chỉ tự ký được tạo theo cách này là phiên bản 1, chứa CN, nhưng không có SAN. "Kể từ phiên bản 58, Chrome yêu cầu chứng chỉ SSL sử dụng SAN (Tên thay thế chủ đề) thay vì Tên chung phổ biến (CN), do đó hỗ trợ CN đã bị xóa." [Sửa Chrome 58+ [missing_subjectAltName] với openssl khi sử dụng chứng chỉ tự ký] ( alexanderzeitler.com/articles/... )
Zhiyong

12

Chỉ cần làm theo quy trình sau:

  1. tạo thư mục nơi bạn muốn lưu khóa và chứng chỉ của mình:

    mkdir conf


  1. đi đến thư mục đó:

    cd conf


  1. lấy ca.cnftệp này để sử dụng làm lối tắt cấu hình:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf


  1. tạo một tổ chức phát hành chứng chỉ mới bằng cách sử dụng cấu hình này:

    openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem


  1. bây giờ chúng tôi đã có cơ quan cấp chứng chỉ của mình ca-key.pemca-cert.pem, hãy tạo khóa riêng tư cho máy chủ:

    openssl genrsa -out key.pem 4096


  1. lấy server.cnftệp này để sử dụng làm lối tắt cấu hình:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf


  1. tạo yêu cầu ký chứng chỉ bằng cách sử dụng cấu hình này:

    openssl req -new -config server.cnf -key key.pem -out csr.pem


  1. ký vào yêu cầu:

    openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem

Tôi đã tìm thấy quy trình này ở đây , cùng với thông tin thêm về cách sử dụng các chứng chỉ này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.