首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenSSL 1.1通过IANA获得密码套件

OpenSSL 1.1通过IANA获得密码套件
EN

Stack Overflow用户
提问于 2020-08-19 16:56:33
回答 1查看 635关注 0票数 1

在OpenSSL 1.0.2中,我们使用在s3_lib.c中找到的ssl3_get_cipher_by_id()函数来使用IANA获得密码套件(SSL_CIPHER*)。

例如,ID 0x00,0x2F会将TLS_RSA_WITH_AES_128_CBC_SHA密码套件作为SSL_CIPHER结构提供给我们。

但是,OpenSSL文档中没有列出此函数,1.0.2及更高版本,虽然该函数在1.1.1中仍然可用,但它似乎不适用于较新的密码套件,例如,对这两种密码都返回NULL:

代码语言:javascript
复制
0xC0,0x2F TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
0xC0,0x14 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

我的问题:是否有一种现代的方法来获得密码套件(SSL_CIPHER或更新的结构)?

我见过this related question,但它不回答如何从IANA十六进制ID中获取密码套件对象。

注:我所说的IANA ID是指页数上的第一个十六进制栏,如:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 21:41:37

您可以使用SSL_CIPHER_find(),其中

...返回一个将密码ID存储在ptr中的SSL_CIPHER结构。ptr参数是char的两个元素数组,它以网络字节顺序存储两个字节的TLS密码ID (由IANA分配)。

请参阅https://www.openssl.org/docs/man1.1.1/man3/SSL_CIPHER_find.html

C程序

两个示例的C代码可能如下所示:

代码语言:javascript
复制
#include <stdio.h>
#include <openssl/err.h>
#include <openssl/ssl.h>

static void print_name(unsigned char iana[], const SSL_CIPHER *cipher);

int main(void) {
    SSL_CTX *ctx = SSL_CTX_new(TLS_client_method());
    SSL *ssl = SSL_new(ctx);
    if (ssl == NULL) {
        ERR_print_errors_fp(stderr);
        exit(1);
    }

    unsigned char iana1[] = {0xC0, 0x2F};
    const SSL_CIPHER *cipher = SSL_CIPHER_find(ssl, iana1);
    if (cipher) {
        print_name(iana1, cipher);
    }

    unsigned char iana2[] = {0xC0, 0x14};
    cipher = SSL_CIPHER_find(ssl, iana2);
    if (cipher) {
        print_name(iana2, cipher);
    }
    SSL_free(ssl);
    SSL_CTX_free(ctx);
    return 0;
}

static void print_name(unsigned char iana[], const SSL_CIPHER *cipher) {
    const char *name = SSL_CIPHER_standard_name(cipher);
    if (name == NULL)
        name = "?";
    printf("0x%02X,0x%02X -> %s\n", iana[0], iana[1], name);
}

测试

如果运行上述程序,将在调试控制台上获得以下输出:

代码语言:javascript
复制
0xC0,0x2F -> TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
0xC0,0x14 -> TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63491644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档