關於443號港口沒有任何魔法;它本質上並不能保證安全。它在功能上與端口442,444,80或任何其他端口相同。 443的唯一特別之處在於按照慣例,HTTPS服務器在該端口上偵聽。
,使HTTPS服務器的安全問題是他們實施TLS protocol。 TLS是一種爲應用程序提供安全通信通道的加密協議。 TLS提供安全性;服務器然後在TLS通道上運行常規HTTP。
TLS並不僅僅侷限於HTTP服務器。任何應用程序均可使用它;它的高級API提供的數據流就像普通的TCP流一樣工作。
幸運的是,節點includes a complete TLS implementation與net
模塊提供的常規TCP流幾乎完全API兼容。因此,而不是:
net.createServer(function(socket) {
socket.write('stuff that gets sent in the clear');
});
這樣做:
tls.createServer({
cert: fs.readFileSync('cert.pem'), // the pem-encoded certificate
key: fs.readFileSync('key.pem'), // the private key that goes with your cert
ca: [] // you may need to include the CA's intermediate certs if applicable
}, function(socket) {
socket.write('stuff that will be encrypted');
});
同樣,客戶端使用tls.connect()
,而不是net.connect()
。
你generate你的私鑰使用OpenSSL,然後提交CSR到Certificate Authority,誰會給你一個將被廣泛接受的證書。您也可以自行簽名,但自簽名證書默認不會被客戶接受。
最後,考慮到你正在寫一個自定義的服務器(而不是HTTP服務器),你不應該在端口443上監聽公約說,HTTPS服務器偵聽端口443,和自定義的協議是不是HTTP 。選擇一個不同的端口,最好是一個isn't already assigned。
你需要做完整的SSL握手。不知道它是否值得。 – Thilo
OMGOMGOMGOMGOMG – user3252291
請不要別想實現'HTTPS'你問這個問題的事實證明,你不知道有足夠的瞭解安全就別想了。 (我不會讓你失望......很少有人應該考慮實施安全系統)。 – Aron