如何禁用 openssl 中的特定密码套件?

2024-02-24

我想保护我的服务器免受 FREAK 攻击,因此我想禁用所有使用 Openssl 导出级 RSA 密钥的密码套件。有没有办法禁用 openssl 中的特定密码套件?如果是,我该怎么做?


有没有办法禁用 openssl 中的特定密码套件?如果是,我该怎么做?

要回答禁用特定密码套件的直接问题,请通过将其从传递给的密码套件列表中删除来实现SSL_CTX_set_cipher_list or SSL_CTX_set_cipher_list:

int rc = SSL_CTX_set_cipher_list(ctx, "ALL:!NULL-MD5:!NULL-SHA");
assert(0 != rc);

你可以在SSL* with:

int rc = SSL_set_cipher_list(ssl, "ALL:!NULL-MD5:!NULL-SHA");
assert(0 != rc);

在上文中,NULL-MD5 is SSL_RSA_WITH_NULL_MD5 and NULL-SHA is SSL_RSA_WITH_NULL_SHA。您可以从以下位置获取映射列表openssl ciphers http://linux.die.net/man/1/ciphers命令。


您还可以禁用导出密码!EXP:

int rc = SSL_CTX_set_cipher_list(ctx, "ALL:!EXP");
assert(0 != rc);

你可以在SSL* with:

int rc = SSL_set_cipher_list(ssl, "ALL:!EXP");
assert(0 != rc);

你可以看到什么"ALL:!EXP"相当于 OpenSSL 命令(请注意单引号,这样 shell 就不会捕获 bang):

$ openssl ciphers 'ALL:!EXP'
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:
ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:SRP-DSS-AES-256-CBC-SHA:
SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:DH-DSS-AES256-GCM-SHA384...

您可以使用以下方法计算密码套件的数量:

$ openssl ciphers 'ALL:!EXP' | tr ':' ' ' | wc -w
     124

这告诉你你的ClientHello由于有 124 个密码套件,因此将使用至少 248 个字节。理想情况下,您应该为 16 间左右的套房做广告really want.


您通常使用以下方式配置密码套件"HIGH"仅有的。它排除"MEDIUM", "LOW" and "EXP"。这是我的通话有时的样子:

int rc = SSL_CTX_set_cipher_list(ctx, "HIGH:!ADH:!MD5:!RC4:!SRP:!PSK:!DSS");
assert(0 != rc);

请务必排除匿名装备(!ADH) 因为它默认包含在内。!MD5 and !RC4被使用是因为他们虚弱/受伤。!SRP, !PSK, and !DSS用于进一步修剪密码列表,因为它们通常不被使用。

您也可以对SSL* and SSL_set_cipher_list.

如果你打电话SSL_CTX_set_cipher_list and SSL_set_cipher_list在服务器上,密码套件列表将根据证书中密钥的类型进一步修剪。


在上一个块中,我说过...我的电话有时是什么样子。通常,我喜欢指定要使用的 16 个左右:

string GetCipherSuites()
{
    static string ciphers = ""

#if defined(ALLOW_ECDSA)
    "ECDHE-ECDSA-AES256-GCM-SHA384:"
    "ECDHE-ECDSA-AES128-GCM-SHA256:"
#endif

    "ECDHE-RSA-AES256-GCM-SHA384:"
    "ECDHE-RSA-AES128-GCM-SHA256:"

#if defined(ALLOW_DSA)
    "DHE-DSS-AES256-GCM-SHA384:"
#endif

    "DHE-RSA-AES256-GCM-SHA384:"

#if defined(ALLOW_DSA)
    "DHE-DSS-AES128-GCM-SHA256:"
#endif

    "DHE-RSA-AES128-GCM-SHA256:"

#if defined(ALLOW_DSA)
    "DHE-DSS-AES256-SHA:"
#endif

    "DHE-RSA-AES256-SHA:"

#if defined(ALLOW_DSA)
    "DHE-DSS-AES128-SHA:"
#endif

    "DHE-RSA-AES128-SHA:"

#if defined(ALLOW_DSA)
    "EDH-DSS-DES-CBC3-SHA:"
#endif

    "EDH-RSA-DES-CBC3-SHA:"

#if defined(ALLOW_DSA)
    "DH-DSS-DES-CBC3-SHA:"
#endif

    "DH-RSA-DES-CBC3-SHA:";

    return ciphers;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何禁用 openssl 中的特定密码套件? 的相关文章

  • bash 脚本中带有 PKCS#12 证书的 cURL

    我必须连接到网络服务 其中必须有 pkcs12 证书 这个想法是在 bash 脚本中使用curl 具体来说 在 OS X 下 我了解到 curl 在通信中无法做的少数事情之一是处理 pkcs12 证书 p12 我有什么选择 我读过将证书转换
  • RSA_public_decrypt 和 MS Crypto API 等效项

    我正在尝试开发许可证验证解决方案 许可证使用 OpenSSL 在服务器上进行编码RSA private encrypt功能 对于 Mac OS X 使用RSA public decrypt它就像一个魅力 在 Windows 上 我必须使用非
  • 为什么 PHP 中加密的内容与 Ruby 中加密的相同字符串不匹配?

    这是我的要求 我需要使用 AES 加密 包括随机 iv 对 PHP 中的字符串进行加密 对其进行 Base64 编码 然后对其进行 URL 编码 以便可以将其作为 URL 参数传递 我试图在 PHP 和 Ruby 中获得相同的结果 但我无法
  • Mechanize 收到“Errno::ECONNRESET:连接由对等方重置 - SSL_connect”

    我无法让 Mechanize 加载曾经正常工作的页面 它确实失败了 并显示Errno ECONNRESET Connection reset by peer SSL connect信息 关于我应该尝试什么或我应该查看的细节有什么建议吗 请参
  • 无法验证 SSL 证书

    我想做的事 与以下人员保持干净的联系openssl connect到远程站点 网站似乎是自签名的 What I m getting CONNECTED 00000003 depth 0 CN DC01 home pri verify err
  • 使用 .NET 类进行 OpenSSL 加密

    我希望创建一个使用与 OpenSSL 兼容的 NET 库的类 我知道有一个 OpenSSL Net 包装器 但我希望避免引用第 3 方 非托管代码 我并不是要讨论这是否是正确的选择 但这是有原因的 目前我有以下内容 我认为它应该与 Open
  • 导入错误:无法导入名称 md5

    真的不知道这里发生了什么 我需要在弹性beanstalk上部署我的flask应用程序 但不知何故改变了路径并且无法再运行python application py dotnet info NET Core SDK reflecting an
  • 当 SSL_get_fd 返回 -1 时,这意味着什么?

    我正在使用 frida 分析一个程序 该程序肯定通过 SSL 连接到某个服务器 当我打电话时SSL get fd 它返回 1 从文档中我看到这意味着ssl不包装套接字 BIO 已明确配置 因为我可以通过SSL get rbio openss
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在
  • 如何将 pem 公钥转换为 openssl RSA* 结构

    假设我必须像这样公开 pem 密钥 BEGIN PUBLIC KEY MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o6gJy8UtmIbkcpnk O3Kwc4qsEnSZp TR fQi
  • OpenSSL 真的需要 openssl.conf 的路径吗?

    我想在 PHP 5 x 中创建自签名证书 使用我自己的 替代 openssl 配置 该配置应该由我的 PHP 代码定义 PHP 脚本将在不同的环境 共享托管网络服务器 上运行 官方PHP手册 http php net manual en f
  • 使用 OpenSSL 解码/提取 smime.p7m 文件内容(带有嵌入文件的电子邮件)?

    我们有一个旧的进程 VBScript 它读取一个公共邮箱并将某些电子邮件处理到数据库中 新法规要求所有带附件的邮件都经过数字签名 该进程现在仅提取一个文件 smime p7m 使用基于 GUI 的查看器 我可以查看嵌入的文件并毫无问题地提取
  • Ruby openssl 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有 Ruby 的在线文档openssl图书馆 我能找到的只是博客文章和第三方文章 而 rdoc 本
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • Android 版 Qt 和 BoringSSL

    我正在开发一个基于 Qt 的 Android 应用程序 它使用 QSslSocket 下载数据 由于 Android 从 OpenSSL 转向 BoringSSL 因为依赖 OpenSSL 库的 Marshmallow Qt 程序在 And
  • “未知 ca”,具有自行生成的 CA、证书和客户端/服务器

    我正在编写一个自定义客户端和服务器 我想通过公共互联网安全地进行通信 因此我想使用 OpenSSL 并让两端进行对等验证 以确保我的客户端不会被 MITM 误导 同样未经授权的客户端无法连接到服务器 这是在 SSL connect SSL
  • xampp openssl 调用 openssl_pkey_new() 时出错;

    所以我试图让 openssl 在我的 Windows 安装的 xampp 1 7 3 上工作 它是用 OpenSSL 0 9 8l 构建的 这只是我第二次在 amp 安装上安装 openssl 但第一次进展顺利 这是在同一台机器上的 wam
  • 罕见的自制错误:“未知命令:开关”

    我正在尝试重新启动一些需要使用旧版本 openssl 的遗留项目 我在这个问题上找到了很好的意见here https stackoverflow com a 61086871 921573 它在我的一台机器上工作 但在另一台机器上不起作用
  • 如何解释 openssl 速度输出?

    I ran openssl speed在我的 Ubuntu 计算机上 一些结果 Doing md4 for 3s on 16 size blocks 9063888 md4 s in 3 00s Doing md4 for 3s on 64
  • AES_encrypt/AES_decrypt 仅返回消息的一部分[重复]

    这个问题在这里已经有答案了 我不知道为什么下面的代码会返回 Hello native Th 而不是 Hello native This is from jni load n 有人可以提示一下吗 include helloJNI h incl

随机推荐