2023年11月28日发(作者:)

sqlserverssl安全错误_TLSSSL证书解读(三)

TLS/SSL 证书解读 ()

TLS/SSL 优化

TLS/SSL主要的性能调优简单包括: 启⽤ False Start, 选择合适 cipher suite,

resumption 等. 另外, 如果你追求 fashion, 那么 HTTP/2 也是个不错的选择.

设置 session 缓存

session 缓存设置可以让两次的 RTT, 变为⼀次, 这相当于快了⼀倍(不包括密钥计算等). 不同的 server 设置 session 办法 有很多, 这⾥以

nginx 为例. 在 nginx 中, ⽀持的 Session ID 的形式, 即在 server 中缓存以前 session 的加密内容. 涉及的字段有两

个, ssl_session_cachessl_session_timeout.

ssl_session_cache: 设置 session cache 上限值, 以及是否在多个 worker 之间共享.

ssl_session_timeout: 设置 session cache 存储的时间.

例⼦:

ssl_session_cache shared:SSL:10m;ssl_session_timeout 20m;

表⽰的含义: session cache 会在不同的 worker 之间分享, 假设 1 MB 只能存储 8000 次握⼿的信息. 那么 10 MB ⼀共 可以存储

80000 次握⼿信息. 如果超出, 则不会存储. 缓存信息存在是时长为 20 分钟. 另外, 你也可以开启 session ticket, ST(session ticket)

需要⼀个 sign 参数, 使⽤ openssl 创建即可.

# 创建

nssl rand 48 >

# 在 nginx 中开启ssl_session_ticket on;ssl_session_ticket_key ;

选择合适的 cipher suite

先说明⼀下, 证书的内容和加密套件实际没有任何关系. 这主要还是取决于服务器的⽀持程度以及客户端的⽀持度. 另外, 如果想要启

False Start, 这和套件的选择有很⼤的关系. nginx 中, 主要⽤到两个指令:

ssl_prefer_server_ciphers on;ssl_ciphers xxx;

ssl_prefer_server_ciphers: ⽤来告诉客户端, 要按照我提供的加密套件选择.

ssl_cipher: 具体设置的加密套件内容, 使⽤ : 分隔.

⽀持性最⾼的就是使⽤:

# 让浏览器决定使⽤哪个套件ssl_ciphers HIGH:!aNULL:!MD5;

⼀般情况, 还是应该⾃⼰来决定使⽤哪个套件, 这样安全不安全由⾃⼰说了算. 这⾥简单放⼀个, ⽐较安全的, 下⾯所有的套件都必 须⽀持

Forward Secrey.

RC4: 使⽤已经废弃的 ARCFOUR 算法

DES: 使⽤已经废弃的 Data Encryption 标准

SSLv2: ⽼版本 SSL2.0 的加密套件

MD5: 直接使⽤ MD5 加密⽅式.

False Start

另外, 怎么在 nginx 中开启 False Start 呢? 这其实和服务器并没有多⼤的关系, 关键还是你选择的套件和 NPN/ALPN 协议的 作⽤.

⾸先, 加密套件必须具有 Forward Secrey, 否则开不了.

浏览器需要使⽤ NPN 或者 ALPN 告诉服务器, 该所需的协议版本, 然后再决定开不开启.

那么, nginx中, 我们只要选择好合适的加密套件即可. 这⾥⼀份现成的:

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-G

使⽤ DH 密钥交换

DH 的加密过程, 上⾯已经说过了. DH⾃带两个公共的参数, 所以, 这必须⼿动进⾏创建.

# 创建 DH 参数openssl dhparam 2048 -out

server {