当前位置:首页 > TLS(SSL)
? ?
文档首页 英文版文档
本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。
Node.js v4.2.4 手册 & 文档
索引 | 在单一页面中浏览 | JSON格式
目录
?
TLS (SSL) o 客户端初始化的对缓解攻击的重新协商 o NPN 和 SNI
o o o o o o o o o
tls.getCiphers()
tls.createServer(options, [secureConnectionListener]) tls.connect(options, [callback])
tls.connect(port, [host], [options], [callback]) Class: tls.TLSSocket
new tls.TLSSocket(socket, options) tls.createSecurePair([credentials], [isServer], [rejectUnauthorized])
类: SecurePair ? 事件: 'secure'
类: tls.Server ? 事件: 'secureConnection'
? ? ? ? ? ? ? ? ?
[requestCert],
Event: 'clientError'
事件: 'newSession' 事件: 'resumeSession'
server.listen(port, [host], [callback]) server.close() server.address()
server.addContext(hostname, credentials) server.maxConnections server.connections
o
? o
? ? ? ? ? ? ? ? ? ? ?
类: CryptoStream
cryptoStream.bytesWritten
Class: tls.TLSSocket
事件: 'secureConnect'
tlsSocket.authorized
tlsSocket.authorizationError tlsSocket.getPeerCertificate() tlsSocket.getCipher()
tlsSocket.renegotiate(options, callback) tlsSocket.address()
tlsSocket.remoteAddress tlsSocket.remotePort tlsSocket.localAddress tlsSocket.localPort
TLS (SSL)
#稳定度: 3 - 稳定 使用 require('tls') 来访问此模块。
tls 模块使用 OpenSSL 来提供传输层安全协议(Transport Layer Security)和/或安全套接
层(Secure Socket Layer):加密过的流通讯。
TLS/SSL 是一种公钥/私钥架构。每个客户端和服务器都必有一个私钥。一个私钥使用类似的方式创建:
openssl genrsa -out ryans-key.pem 1024 所有服务器和某些客户端需要具备证书。证书是证书办法机构签发或自签发的公钥。获取证书的第一步是创建一个“证书签发申请”(CSR)文件。使用这条命令完成:
openssl req -new -key ryans-key.pem -out ryans-csr.pem 像这样使用 CSR 创建一个自签名证书:
openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem 又或者你可以将 CSR 发送给一个数字证书认证机构请求签名。
(TODO: 对于创建一个CA文档, 感兴趣的用户暂时只能看Node的源代码test/fixtures/keys/Makefile 像这样创建 .pfx 或 .p12:
openssl pkcs12 -export -in agent5-cert.pem -inkey agent5-key.pem \\ -certfile ca-cert.pem -out agent5.pfx ? ? ?
in: certificate inkey: private key
certfile: all CA certs concatenated in one file like cat ca1-cert.pem ca2-cert.pem > ca-cert.pem
客户端初始化的对缓解攻击的重新协商#
TLS协议会令客户端可以重新协商TLS会话的某些方面。但是,会话的重新协商是需要相应量的服务器端资源的,所以导致其变成一个阻断服务攻击(denial-of-service)的潜在媒介。
为了减低这种情况的发生,重新协商被限制在每10分钟三次。如果超过这个数目,那么在tls.TLSSocket实例上就会分发一个错误。这个限制是可设置的:
? ?
tls.CLIENT_RENEG_LIMIT: 重新协商的次数限制,默认为3。
tls.CLIENT_RENEG_WINDOW: 重新协商窗口的秒数,默认为600(10分钟)。
除非你完全理解整个机制和清楚自己要干什么,否则不要改变这个默认值。
要测试你的服务器的话,用命令 openssl s_client -connect 地址:端口连接上服务器,然后敲击R
NPN 和 SNI#
NPN (Next Protocol Negotiation,下一个协议的协商)和SNI (Server Name Indication,服务器名称指示)是TLS握手扩展,它们允许你:
? ?
NPN - 同一个TLS服务器使用多种协议 (HTTP, SPDY)
SNI - 同一个TLS服务器使用多个主机名,与其相应的SSL证书。
tls.getCiphers()#
返回一个数组,其中包含了所支持的SSL加密器的名字。
实例:
var ciphers = tls.getCiphers(); console.log(ciphers); // ['AES128-SHA', 'AES256-SHA', ...] tls.createServer(options, [secureConnectionListener])#
新建一个新的 tls.Server. The connectionListener 参数会自动设置为 secureConnection 事件的监听器. 这个options 对象有这些可能性:
? pfx: 一个String 或Buffer包含了私钥, 证书和CA certs, 一般是 PFX 或者
PKCS12 格式. (Mutually exclusive with the key, cert and ca options.)
? ? ? ?
key: 一个字符串或 Buffer对象,其中包含了PEF格式的服务器的私钥。 (必需) passphrase: 私钥或pfx密码的字符串。
cert: 字符串或者 Buffer,包含PEM格式的服务器证书密码。(必选)
ca: An array of strings or Buffers of trusted certificates. If this is omitted several well
known \
共分享92篇相关文档