2016-11-05 29 views
2

我在Ubuntu中使用nodejs。我想要禁用SSL 3.0和TLS v1.0。如何禁用nodejs中的SSL 3.0和TLS 1.0

這裏是我的代碼現在

var constants = require('constants') 
    , https = require('https') 
    , path = require('path') 
    , tls = require('tls') 
    , fs = require('fs'); 
var sslOptions = { 
    key: fs.readFileSync('/etc/ssl/private/private.key'), 
    secureProtocol: 'SSLv23_server_method', 
    secureOptions: constants.SSL_OP_NO_SSLv3, 
    secureOptions: constants.SSL_OP_NO_TLSv1, 
    cert: fs.readFileSync('/etc/ssl/certs/STAR_mycert.crt'), 
    ca: [ 
      fs.readFileSync('/etc/ssl/certs/AddTrustExternalCARoot_1.crt'), 
      fs.readFileSync('/etc/ssl/certs/AddTrustExternalCARoot_2.crt'), 
      fs.readFileSync('/etc/ssl/certs/AddTrustExternalCARoot_3.crt') 
     ], 
    //ca: fs.readFileSync('/etc/ssl/certs/AddTrustExternalCARoot.crt'), 
    requestCert: false, 
    rejectUnauthorized: false 
}; 

當我測試的網站上digicert我得到了以下問題

enter image description here

任何想法如何做到這一點?

回答

4

我對node.js知之甚少,但我認爲你最後的secureOptions只是覆蓋第一個,因爲你不能在字典中多次使用相同的密鑰。由於基礎TLS堆棧(OpenSSL)要求將選項與按位組合,或者嘗試以下代碼:

secureOptions: constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_TLSv1, 
+0

哇,它爲我工作。非常感謝..你能告訴我 constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_TLSv1,什麼是|這裏? –

+0

@AnkitaKashyap:OpenSSL中的選項是位集。 '|'是一個按位或者這意味着結果的位集具有設置在任何輸入集中的所有位集。也https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators見 –

+0

非常感謝。你救了我 –

0

接受的答案是無證的。從Node.js v6.3.0開始,應該使用crypto模塊內部的一個常量屬性documented

... 
const { constants } = require('crypto') 
https.createServer({ 
    secureOptions: constants.SSL_OP_NO_TLSv1 
}, app).listen(443) 
...