将RFC名称映射到OpenSSL

时间:2015-09-08 05:40:56

标签: openssl

传递字符串不起作用

我想使用EVP_get_cipherbyname得到一个密码,我有以下

  • RFC名称:TLS_DHE_RSA_WITH_AES_128_GCM_SHA256

应映射到此

  • OpenSSL名称:DHE-RSA-AES128-GCM-SHA256

但是当将此字符串传递给函数时,它无法找到密码。

传递整数没有工作

使用openssl -V我可以看到这是一个受支持的密码,并且它在基数10中的值为0x9e158,我假设这是NID,并尝试使用EVP_get_cipherbynid拨打158,但唉不管怎么办,虽然我不认为这是NID了。

什么有用?

如何将RFC名称映射到OpenSSL将接受的名称?

3 个答案:

答案 0 :(得分:4)

我认为问题在于您会混淆密码套件密码

EVP_get_cipherbyname()没有采用密码套件的名称,它采用密码的名称。 man页面和OpenSSL API的一般文档非常糟糕。但是在this PDF中搜索“EVP_get_cipherbyname”会产生6个结果。最后一个参考文献是关于PEM编码证书的部分。现在我知道这不是你正在做的,但它包含以下引用:

  

以DEK-Info开头的行包含两个逗号   分隔的信息:使用的加密算法名称   通过EVP_get_cipherbyname()和一个8字节的盐编码为一组   十六进制数字。

他们指的是:DEK-Info: DES-EDE3-CBC,3F17F5316E2BAC8

这意味着EVP_get_cipherbyname()确实将DES_3DE3-CBC作为输入,而不是密码套件。对于您的情况,我相信您正在寻找AES-128-GCM来获取正确的密码

NID只代表数字ID。这是用于标识集合列表的通用术语。密码套件没有NID只有RFC分配的代码(感谢@ dave_thompson_085)。这就是为什么当你试图使用NID时它仍然无法找到密码。

答案 1 :(得分:1)

我无法通过IANA密码套件十六进制代码告诉您如何获得密码套件。但也许这个答案仍然有点帮助。

手动使用表格。

懒惰回答:使用方便TestSSL.sh table(已归档here。)

  

[0x9e], DHE-RSA-AES128-GCM-SHA256 ,DH,AESGCM,128, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256

或使用official OpenSSL name mapping table(遗憾地缺少十六进制代码)。

NID不同。

有两种类型的NID 很多很多类型的NID(编辑。详见下面的Dave评论。)如下:

  • (批量)Cipher NID
  • 摘要NID

据我所知,他们是introduced in April 2015

相比之下,official hexcodes in the TLS Cipher Suite Registry  适用于加密构建块的组合(批量密码,摘要,密钥交换,身份验证等),而不适用于各个构建块。

答案 2 :(得分:0)

通过在 ruby​​ 中使用 tls-map 库,有一种简单的方法可以将任何 OpenSSL(或 GnuTLS、NSS 等)密码名称转换为 IANA/标准/RFC 密码名称或十六进制代码点或其他方式:

require 'tls_map'

tm = TLSmap::App.new

# OpenSSL -> IANA
tm.search(:openssl, 'AES128-SHA', :iana) #=> {:iana=>"TLS_RSA_WITH_AES_128_CBC_SHA"}
# Hexadecimal codepoint to all (including OpenSSL & IANA)
tm.search(:codepoint, '1303') #=> {:codepoint=>"1303", :iana=>"TLS_CHACHA20_POLY1305_SHA256", :openssl=>"TLS_CHACHA20_POLY1305_SHA256", :gnutls=>"CHACHA20_POLY1305_SHA256", :nss=>"TLS_CHACHA20_POLY1305_SHA256"}

它也可用作 CLI 工具:

$ tls-map search openssl AES128-SHA -o iana
iana: TLS_RSA_WITH_AES_128_CBC_SHA