2012-03-01 37 views
21

Tôi đang viết proxy hỗ trợ proxy HTTPS-HTTPS. Trước khi tôi sử dụng Python làm ngôn ngữ lập trình chính, nhưng bây giờ tôi quan tâm đến node.js, vì vậy tôi chuẩn bị di chuyển.Nút nodej có thể tạo chứng chỉ SSL không?

Vấn đề lớn nhất mà tôi đang gặp phải là tôi không biết cách tạo CA và các chứng chỉ máy chủ khác trong node.js. Trong Python, có pyOpenSSL là tuyệt vời. Tôi không tìm thấy một cái gì đó tương tự trong node.js cho đến bây giờ.

Có lẽ tôi nên sử dụng phương thức openssl-fork? Nhưng làm thế nào để xử lý các hoạt động tương tác trong openssl.

Cảm ơn bạn.

Trả lời

16

Trong trường hợp ai đó thực hiện muốn tạo CSR từ program.js, tôi có created a nodejs module sử dụng openssl để tạo khóa riêng và CSR.

Chỉnh sửa: Sử dụng pem để thay thế. Nó hoàn chỉnh hơn nhiều và có lẽ đáng tin cậy hơn.

Edit2: Trên thực tế, pem cũng chỉ là một trình bao bọc đơn giản trên openssh. Để triển khai thực hiện thuần túy js, hãy xem xét forge

+1

Bạn có thể yêu cầu CSR ký chứng chỉ chính xác không? – ayanamist

+2

Mô-đun của tôi hiện không được dùng nữa. Tôi chỉ xuất bản nó bởi vì tôi không biết về pem: https://www.npmjs.org/package/pem –

+0

pem chỉ sinh ra openssl. – andrewrk

28

Sử dụng vỏ cấp giấy chứng nhận:

openssl genrsa -out server-key.pem 1024 
openssl req -new -key server-key.pem -out server-csr.pem 
openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem 

Sau đó sử dụng chúng trong Node.js

var https = require('https'); 
https.createServer({ 
    key: fs.readFileSync('server-key.pem'), 
    cert: fs.readFileSync('server-cert.pem') 
}, 
function (req,res) { 
     ... 
}) 

EDIT:

Bạn cũng có thể cung cấp cho một cố gắng để dự án này trong NPM: https://npmjs.org/package/openssl-wrapper

Tôi thấy nó tìm kiếm repo NPM: https://npmjs.org/search?q=openssl

Tôi đã không tự mình thử hoặc kiểm tra, nhưng nó giống như một cách để tạo chứng chỉ bằng nút, đó là câu hỏi gốc.

var openssl = require('openssl-wrapper'); 
var password = 'github'; 

return openssl.exec('genrsa', {des3: true, passout: 'pass:' + password, '2048': false}, function(err, buffer) { 
    console.log(buffer.toString()); 
}); 

Tôi muốn được một phản hồi quan tâm. ;)

5

giả mạo nút cho phép điều đó. Không có gì để nói nhiều hơn. KHÔNG sử dụng lệnh openssl shell trong nội bộ.

https://github.com/digitalbazaar/forge#x509

+0

Điều này thật tuyệt. Và quan trọng nhất, nó không phụ thuộc vào "open-ssl" –

+0

Tôi cũng đã sử dụng nó cho mã sản xuất và nó hoạt động như một sự quyến rũ. – Joppe

Các vấn đề liên quan