C++ &引用;nghttp2::asio_http2::客户端“;在TLS 1.3中,SSL\u CTX\u set\u cipher\u列表不会在密码套件中添加密码套件

C++ &引用;nghttp2::asio_http2::客户端“;在TLS 1.3中,SSL\u CTX\u set\u cipher\u列表不会在密码套件中添加密码套件,c++,openssl,boost-asio,tls1.3,nghttp2,C++,Openssl,Boost Asio,Tls1.3,Nghttp2,我使用带有TLS 1.3协议的nghttp2 asio_http2_客户端,但当我尝试通过SSL_CTX_get_ciphers函数在密码套件列表中添加其他套件时,我在客户端hello消息中没有看到任何更改。即密码套件列表保持不变 我的代码示例: #include <nghttp2/asio_http2_client.h> #include <iostream> using boost::asio::ip::tcp; using namespace nghttp2:

我使用带有TLS 1.3协议的nghttp2 asio_http2_客户端,但当我尝试通过SSL_CTX_get_ciphers函数在密码套件列表中添加其他套件时,我在客户端hello消息中没有看到任何更改。即密码套件列表保持不变

我的代码示例:

#include <nghttp2/asio_http2_client.h>

#include <iostream>

using boost::asio::ip::tcp;

using namespace nghttp2::asio_http2;
using namespace nghttp2::asio_http2::client;

int main(int argc, char* argv[])
{
    boost::system::error_code ec;
    boost::asio::io_service io_service;

    boost::asio::ssl::context tls(boost::asio::ssl::context::tlsv13_client);
    tls.set_verify_mode(boost::asio::ssl::verify_peer);

    // https://testssl.sh/openssl-iana.mapping.html
    auto rc = SSL_CTX_set_cipher_list(
        tls.native_handle(),
        R"(TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-CHACHA20-POLY1305-OLD:ECDHE-RSA-CHACHA20-POLY1305-OLD:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA)");
    if (rc != 1) {
        std::cout << "no cipher list found " << rc << std::endl;
    }

    auto ciph = SSL_CTX_get_ciphers(tls.native_handle());
    printf("after SSL_CTX_set_ciphersuites()\n");
    for (size_t i = 0; i < sk_SSL_CIPHER_num(ciph); i++)
        printf("%s%s", i != 0 ? ":" : "", SSL_CIPHER_get_name(sk_SSL_CIPHER_value(ciph, i)));


    //    return 1;
    configure_tls_context(ec, tls);

    // connect to
    session sess(io_service, tls, "www.google.com", "443");

    sess.on_connect([&sess](tcp::resolver::iterator endpoint_it) {
        boost::system::error_code ec;

        std::cerr << "Connected!" << std::endl;
    });


    sess.on_error([](const boost::system::error_code& ec) {
        std::cerr << "error: " << ec.message() << std::endl;
    });

    io_service.run();
}
#包括
#包括
使用boost::asio::ip::tcp;
使用名称空间nghttp2::asio_http2;
使用名称空间nghttp2::asio_http2::client;
int main(int argc,char*argv[])
{
boost::system::error_code ec;
boost::asio::io_服务io_服务;
boost::asio::ssl::context tls(boost::asio::ssl::context::tlsv13_客户端);
设置验证模式(boost::asio::ssl::验证对等);
// https://testssl.sh/openssl-iana.mapping.html
自动rc=SSL\u CTX\u set\u cipher\u列表(
tls.native_handle(),
R“(这是一篇关于中国古代宗教信仰的文章,它是一个ChaChaCha20的一个多聚体1305个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个5个6:一:一个:一个:一个:一个:一个:一个:一个是:一个是:一个是:一个是:一个是:一个是:一个是:一个是:一个是:一个是:一个是一个是一个是一个是一个是一个是一个是一个是一个是一个是一个是一个编号:AES128-SHA:AES256-SHA)”;
如果(rc!=1){

std::cout如果您查看文档,它会说明:

SSL_CTX_set_cipher_list()设置可用密码的列表(TLSv1.2 (及以下)

此函数不影响TLSv1.3密码套件。请使用 SSL\u CTX\u set\u ciphersuites()来配置这些

因此,您需要阅读API,因为v1.3密码列表与v1.2密码列表大不相同,而且比v1.2密码列表小得多

    auto rc = SSL_CTX_set_cipher_list(
        tls.native_handle(),
        R"(TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-CHACHA20-POLY1305-OLD:ECDHE-RSA-CHACHA20-POLY1305-OLD:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA)");
    if (rc != 1) {
        std::cout << "no cipher list found " << rc << std::endl;
    }

    auto ciph = SSL_CTX_get_ciphers(tls.native_handle());
    printf("after SSL_CTX_set_ciphersuites()\n");
    for (size_t i = 0; i < sk_SSL_CIPHER_num(ciph); i++)
        printf("%s%s", i != 0 ? ":" : "", SSL_CIPHER_get_name(sk_SSL_CIPHER_value(ciph, i)));