如何在OpenSSL中仅启用指定的12个加密套件?
在OpenSSL中配置指定加密套件的方法
嘿,我来帮你搞定OpenSSL加密套件的配置问题!要只启用你列出的这12个(最后那个套件名称没写完,我先按常见的TLS_RSA_WITH_RC4_128_SHA来补充,要是不对你替换成对应名称就行)加密套件,主要有两种方式:修改全局OpenSSL配置,或者在具体服务里单独指定,下面给你详细说明:
一、修改OpenSSL全局配置文件
首先找到你的OpenSSL配置文件,通常在/etc/ssl/openssl.cnf或者/usr/local/ssl/openssl.cnf路径下,编辑这个文件:
- 定位到配置文件中的
[ssl_defaults]或[system_default_sect]区块(不同OpenSSL版本可能命名略有差异,比如部分版本是[default_conf]下的ssl_conf子区块) - 添加或修改
CipherString指令,把你需要启用的套件用冒号分隔列出——套件顺序会影响协商优先级,靠前的套件会被优先选用,推荐把更安全的ECDHE/DHE套件放在前面:
[ssl_defaults] CipherString = TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA256:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_AES_128_CBC_SHA:TLS_RSA_WITH_RC4_128_SHA
- 如果你用的是OpenSSL 1.1.0及以上版本,建议同时设置最小TLS协议版本,避免老旧协议带来的风险:
MinProtocol = TLSv1.2
- 保存配置文件后,重启所有依赖OpenSSL的服务(比如Web服务器、邮件服务器等),让新配置生效。
二、在特定服务中单独配置(以Nginx和Apache为例)
如果不想修改全局配置,也可以在具体服务的配置文件里直接指定加密套件,这样只会影响该服务:
Nginx配置
编辑你的Nginx站点SSL配置文件,在server区块内添加以下内容:
# 指定允许的加密套件 ssl_ciphers "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA256:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_AES_128_CBC_SHA:TLS_RSA_WITH_RC4_128_SHA"; # 指定支持的TLS协议版本 ssl_protocols TLSv1.2; # 让服务器优先使用自己配置的套件顺序 ssl_prefer_server_ciphers on;
配置完成后,重启Nginx服务:
sudo systemctl restart nginx
Apache配置
编辑Apache的SSL配置文件(比如/etc/httpd/conf.d/ssl.conf或站点专属的SSL配置文件),添加以下内容:
# 指定允许的加密套件 SSLCipherSuite TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA256:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_AES_128_CBC_SHA:TLS_RSA_WITH_RC4_128_SHA # 指定支持的TLS协议版本 SSLProtocol TLSv1.2 # 启用服务器套件顺序优先级 SSLHonorCipherOrder on
保存后重启Apache服务:
sudo systemctl restart httpd
三、验证配置是否生效
配置完成后,你可以用openssl s_client命令快速验证:
openssl s_client -connect your-domain.com:443 -cipher 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA256:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_AES_128_CBC_SHA:TLS_RSA_WITH_RC4_128_SHA'
或者用nmap工具查看完整的套件列表,更直观:
nmap --script ssl-enum-ciphers -p 443 your-domain.com
检查输出结果,确认只有你指定的加密套件被启用即可。
注意:如果最后那个未写完的套件不是TLS_RSA_WITH_RC4_128_SHA,请替换成正确的套件名称,否则配置会失效。
内容的提问来源于stack exchange,提问作者ashwin karanth
相关产品推荐
相关产品推荐

