核心是显式声明强算法白名单并覆盖默认配置:SSH需在sshd_config中顶格配置Ciphers、MACs、KexAlgorithms三参数,禁用CBC/SHA1/弱DH;Nginx需在server块中严格限定ssl_ciphers和ssl_protocols;Windows则通过注册表设置WeakSHA1AllFlags等策略。

要让服务器禁止弱加密算法认证,核心不是“过滤”或“黑名单”,而是**主动声明并强制只使用强算法**。不同服务(SSH、HTTPS/TLS、Windows证书验证等)机制不同,但逻辑一致:在配置中**显式列出允许的强算法,覆盖默认列表**,系统就会拒绝所有未列出的协商请求。 下面分三类主流场景说明关键操作和避坑要点:
SSH服务禁用弱加密算法
OpenSSH 通过 sshd_config 的三个顶格参数控制握手过程:Ciphers(加密)、MACs(消息认证)、KexAlgorithms(密钥交换)。必须全部配置,缺一不可。
- 先查本机支持项:
ssh -Q cipher、ssh -Q mac、ssh -Q kex,剔除含cbc、3des、arcfour、blowfish、sha1(无etm@openssh.com后缀)、group1、group14的条目 - 在
/etc/ssh/sshd_config末尾顶格写入(不能缩进,逗号后不加空格):Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256
- 同步关闭配套风险项:
Protocol 2、删掉所有HostKey中含rsa的行(改用ed25519和ecdsa)、PasswordAuthentication no、PermitRootLogin no - 验证再生效:
sudo sshd -t无输出 →sudo systemctl reload sshd→ 新终端执行ssh -vv localhost查看协商日志
Nginx(HTTPS)禁用弱加密套件
Nginx 在 TLS 握手阶段由 ssl_ciphers 和 ssl_protocols 控制。关键是不依赖客户端提议,而由服务端强制选择。
- 在
server { listen 443 ssl; }块中配置:ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305; ssl_prefer_server_ciphers on;
- 确保不含
RC4、3DES、DES、MD5、SHA1、CBC字样;ssl_ciphers必须是完整列表,不能只删弱项 - 重载:
nginx -s reload;用nmap --script ssl-enum-ciphers -p 443 yourdomain.com验证输出中不再出现3DES_EDE_CBC或SHA1
Windows 系统证书验证禁用弱算法
适用于 TLS 连接、代码签名等场景下的证书链校验,通过注册表策略实现“拒绝签发者使用弱算法的证书”。
- 打开注册表编辑器,定位到:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CertDllCreateCertificateChainEngine\Config - 新建
REG_DWORD值,例如:-
WeakSHA1AllFlags=1(拒绝对所有证书使用 SHA1 签名) -
WeakRSAAllMinBitLength=2048(要求 RSA 密钥至少 2048 位) -
WeakMD5AllFlags=1(禁用 MD5)
-
- 修改后需重启或运行
certutil -setreg chain\ChainCacheResyncFiletime @now刷新证书链缓存 - 启用日志可辅助排错:新建
WeakSHA1AllLogEnabled=1,日志默认写入%SystemRoot%\System32\logfiles\
不复杂但容易忽略。关键就三点:**查清当前支持什么、只留强的、验证是否真生效**。











