AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 705226
Accepted
TwoFingerRightClick
TwoFingerRightClick
Asked: 2022-06-07 16:46:00 +0800 CST2022-06-07 16:46:00 +0800 CST 2022-06-07 16:46:00 +0800 CST

如何启用非默认 OpenSSL 密码套件

  • 772

我根据 Ubuntu 20.04 安装了 OpenSSL 1.1.1f,我特别希望启用TLS v1.2 套件TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8( )。ECDHE-ECDSA-AES128-CCM8

TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 可用

如何配置 OpenSSL 以允许将该密码套件用于其他使用 OpenSSL 安装的 TLS 应用程序?

关于我的用例的详细信息:我有一个 .NET(6) 应用程序,并且.NET 使用当前的 OpenSSL 1.1.1 或更高版本安装作为Linux 上的底层 TLS 提供程序。因此,当该应用程序使用 OpenSSL 时,需要将 OpenSSL 配置为允许 CCM 密码套件。(它将使用openssl.cnfas per openssl version -d)

我在 OpenSSL 手册的配置部分看到我有兴趣配置的模块是ssl_conf,因此我创建了以下 cnf:

openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
CipherString = ECDHE-ECDSA-AES128-CCM8                                                                                                                                                                                                                                                                                                                                              

但这不允许应用使用 TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8。当我的 TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 独占客户端尝试连接时,它会出现握手 40 失败,因为应用程序内部会抛出一个'Interop.OpenSsl.SslException' in System.Net.Security.dll

但是,我确认此配置文件有效,因为如果我使用以下 cnf 而不是 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 作为密码字符串中的唯一过滤器,那么应​​用程序可以专门使用 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 并且它可以按预期工作(...GCM_SHA256 专用客户端可以连接) :

...
[system_default_sect]
CipherString = ECDHE-RSA-AES128-GCM-SHA256  

如何启用 TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8?

而且我不确定如何确认 CCM 的启用...我希望当我运行openssl ciphers -v(没有密码字符串过滤器)时,我会看到 CCM8 被列出,就像 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 被列出一样。

我阅读了这本烹饪书的配置部分:https ://www.feistyduck.com/library/openssl-cookbook/online/openssl-command-line/configuration.html ,但我认为我需要一些有经验的建议来解释为什么我不能只使用 CCM8。

openssl
  • 1 1 个回答
  • 997 Views

1 个回答

  • Voted
  1. Best Answer
    TwoFingerRightClick
    2022-06-09T12:18:52+08:002022-06-09T12:18:52+08:00

    要“启用”与 .NET 应用程序一起使用的非默认密码套件,必须配置 OpenSSL。许多框架应用程序(例如 .NET 应用程序)在后台使用 OpenSSL,可以创建 OpenSSL 配置,然后将环境变量设置OPENSSL_CONF为配置文件的完整路径。大多数使用 OpenSSL 的应用程序将使用OPENSSL_CONF环境变量来获取使用 OpenSSL 时应使用的配置文件。OpenSSL 将使用openssl.cnf不启用所有密码套件的默认设置,以确保应用程序不会使用安全性较低的密码套件。

    在启用应用程序使用的情况下,TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8可以创建以下配置文件:

    # myCustomOpenSSL.cnf
    openssl_conf = default_conf
    
    [default_conf]
    ssl_conf = ssl_sect
    
    [ssl_sect]
    system_default = system_default_sect
    
    #CipherString is a colon separated list of terms that filter what TLS v1.2 suites OpenSSL will allow use of. 
    [system_default_sect]
    CipherString = ECDHE-ECDSA-AES128-CCM8   
    

    然后在从同一个 shell 实例启动应用程序之前设置OPENSSL_CONF为/example/path/myCustomOpenSSL.cnf(所以OPENSSL_CONF是正确的),或者如果您正在开发应用程序,您可以OPENSSL_CONF在应用程序代码中设置。

    ...

    我的问题是我未能为该应用程序提供 ECDSA 证书。为了使用TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8该应用程序,必须具有 ECDSA 证书 - 即使用 ECDSA 密钥签名。我在 Visual Studio 中工作并通过 WSL 运行我的应用程序。Visual Studio 在/etc/ssl/certs. 这些默认的开发证书是基于 RSA 的,所以虽然应用程序没有抱怨没有证书,但它有一个不兼容的证书,因此是'Interop.OpenSsl.SslException' in System.Net.Security.dll例外。

    因此,我将应用程序配置为使用基于 ECDSA 的证书,而不是默认的基于 RSA 的开发证书,瞧!

    所以我创建的 cnf 文件正在“启用” TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8。

    注意:.NET 不需要使用 OpenSSL cnf 进行密码套件选择,因为您可以创建 CipherSuitePolicy以在代码中定义您的应用程序密码套件。

    • 1

相关问题

  • 带有 -servername 的 openssl -showcerts 给出了错误的锚点/根目录?

  • openssl 'genpkey -algorithm RSA' vs. 'genrsa'

  • 手动验证 S/MIME 消息摘要

  • 如何使用 pv 显示 openssl 加密/解密的进度?

  • 对 openssl 加密文件中的盐感到困惑

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve