我如何创建一个Gnutls-Client发送它的证书到服务器
How do I create a Gnutls-Client which sends its certificate to the server?
我正在尝试在c++中编写gnutls客户端。不幸的是,没有太多的文档或示例。我像这样设置一个会话:
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 (credentials, cert_callback);
在回调中,您可以选择要发送的证书/密钥:
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
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- OpenSSL TLS服务器-使用客户端证书白名单
- 为什么 gRPC C++ 客户端在没有显式服务器的 SSL 证书的情况下无法工作,就像在示例中一样?
- 在GRPC服务器端呼叫时检索SSL证书
- 证书验证在客户端服务器通信中使用boost :: asio和openssl失败
- 无法使用OpenSSL验证服务器证书
- 如何在 OpenSSL 中使用 SSL 证书与 gsoap,使用 C++ 客户端/服务器
- Microsoft HTTP 服务器 API - 使用 SSL,如何要求客户端证书
- 什么是客户端证书,从哪里获取它,如何使用它连接到服务器?
- QSslSocket代理服务器(https)和证书.握手错误
- 使用WCF和gSOAP向服务器和客户端添加证书
- OpenSSL:服务器无法验证客户端证书
- 我如何创建一个Gnutls-Client发送它的证书到服务器
- 验证SSL_get_peer_certificate返回的服务器证书的客户端程序
- 使用SecureStreamSocket与poco连接TCP服务器时,如何发送证书
- POCO HTTPS请求验证服务器证书
- 服务器证书验证失败.CAfile: ca.pem CRLfile:无
- 使用OPENSSL(使用证书)进行客户端-服务器通信