Node.js TLS请求与特定的密码
我有一个Node.js应用程序需要检查外部资源的TLS兼容性。 我需要限制Node.js在进行外部TLS请求时使用的特定密码。 我正在寻找示例代码来实现这一点。
更多信息:Apple在iOS 9中要求所有出站连接都要encryption ,并且允许的密码列表是有限的。
接受的密码是:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
我的目标是build立一个服务,检查以确保外部服务器符合苹果的要求。
您可以使用该密码列表连接到每个资源。 如果连接成功,那么你知道这些密码之一正在使用,因此检查。 密码的专用列表可以通过ciphers
属性设置。 例如:
var ciphers = ['TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384', 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA', 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA', 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256', 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384', 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256', 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA'].join(':'); tls.connect({ host: 'example.com', port: 443, ciphers: ciphers }, function() { // Success! }).on('error', function(err) { // Unsuccessful! You may check `err` to make sure it wasn't an unexpected // error like ECONNREFUSED });
您还可以通过设置secureProtocol
属性来限制使用的协议。 例如,要使用TLSv1.2:
var ciphers = ['TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384', 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA', 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA', 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256', 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384', 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256', 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA'].join(':'); tls.connect({ host: 'example.com', port: 443, ciphers: ciphers, secureProtocol: 'TLSv1_2_method' }, function() { // Success! }).on('error', function(err) { // Unsuccessful! You may check `err` to make sure it wasn't an unexpected // error like ECONNREFUSED });
- 如何在Node.js中closureshttpsstream
- 使用HTTPS的Apache反向代理到node.js应用程序无法正常工作
- 在node / express上安装RapidSSL证书
- 如何监控类似于Chrome / Firefox开发人员工具的node.js上的networking?
- 在HTTPS中从节点JS调用Java REST API(在Tomcat上)
- 如何创build一个从HTTP / HTTPS API获取数据的Alexa Skill(在AWS Lambda上使用Node.js的“Alexa技能工具包”)
- 如何使用node.js https的http代理?
- 在nodejs中使用GoDaddy的HTTPS证书:cert.crt和sf_bundle-g1-g2.crt
- Express(node.js)使用HTTPS和HTTP