gpt4 book ai didi

c++ - 如何创建一个将其证书发送到服务器的 Gnutls-Client?

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:39 25 4
gpt4 key购买 nike

我正在尝试用 C++ 编写 Gnutls 客户端代码。不幸的是,没有太多的文档或示例。我设置了一个这样的 session :

gnutls_certificate_allocate_credentials (&x509_cred);
gnutls_certificate_set_x509_key_file (x509_cred, certfile.c_str(), keyfile.c_str(),GNUTLS_X509_FMT_PEM);
gnutls_certificate_set_verify_function (x509_cred, _verify_certificate_callback);
gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, x509_cred);

但是我的服务器没有收到证书。如果我使用 gnutls-cli 程序,它会起作用,所以我认为它应该在上面的代码中。

我做错了什么?

希望有遮阳棚,

斯巴达克斯

最佳答案

按照我上面引用的讨论提示[1],我可以让 GnuTLS 客户端发送证书:

服务器必须要求证书,否则客户端不会发送任何东西。

gnutls_certificate_server_set_request (mSession, GNUTLS_CERT_REQUEST);

客户端自动仅发送与服务器信任的 CA 相匹配的证书。

如果你想覆盖它,你必须在客户端的证书请求上安装一个回调:

gnutls_certificate_client_set_retrieve_function(凭证,cert_callback);

在回调中,您可以选择要发送的证书/ key :

static int cert_callback (gnutls_session_t session,
const gnutls_datum_t * req_ca_rdn,
int nreqs,
const gnutls_pk_algorithm_t * sign_algos, int sign_algos_length,
gnutls_retr_st * st) {
// Check CA's requested by server
// Check Algorithms accepted by server

// Putting in our key / cert, even if not trusted by the sever
st->cert.x509 = &myCert;
st->ncerts = 1;
st->key.x509 = myKey;
st->deinit_all = 0;
return 0; // no error
}

有关 cert_callback 的更多完整源代码,请查看 gnutls-cli 中的 cli.c。

来源:[1] http://comments.gmane.org/gmane.network.gnutls.general/145

关于c++ - 如何创建一个将其证书发送到服务器的 Gnutls-Client?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com