我想了解如何使用OpenSSL库(总newb),并且在确定如何让客户端连接到具有正确证书的服务器时遇到一些问题,并且如果证书不正确,将会失败。我的用例是建立一个没有中央CA的p2p应用程序,所以我不能依赖CA证书。具体来说,服务器像往常一样拥有证书/密钥,客户端将通过要求其他P2P节点投票来确定服务器的证书。OpenSSL向证书颁发机构颁发服务器证书给客户端?
我有两个具体的问题:
- 在下面的代码片段,我希望客户端无法连接,如果我 评论如下“密码列表”选择。它仍然有效!我错过了什么,对吧?
- 有没有办法让客户端使用服务器证书,并有足够的开放连接?即没有钥匙,没有CA?
客户端:
ctx = SSL_CTX_new(DTLSv1_client_method());
SSL_CTX_set_cipher_list(ctx, "HIGH:!DSS:[email protected]");
// If I comment out below stuff, client still connects happily!?
if (!SSL_CTX_use_certificate_file(ctx, "certs/server-cert.pem", SSL_FILETYPE_PEM))
printf("\nERROR: no certificate found!");
if (!SSL_CTX_use_PrivateKey_file(ctx, "certs/server-key.pem", SSL_FILETYPE_PEM))
printf("\nERROR: no private key found!");
if (!SSL_CTX_check_private_key (ctx))
printf("\nERROR: invalid private key!");
服务器:
SSL_CTX_set_cipher_list(ctx, "HIGH:!DSS:[email protected]"); // high strength ciphers
SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
if (!SSL_CTX_use_certificate_file(ctx, "certs/server-cert.pem", SSL_FILETYPE_PEM))
printf("\nERROR: no certificate found!");
if (!SSL_CTX_use_PrivateKey_file(ctx, "certs/server-key.pem", SSL_FILETYPE_PEM))
printf("\nERROR: no private key found!");
if (!SSL_CTX_check_private_key (ctx))
printf("\nERROR: invalid private key!");
我的代码是在https://github.com/a34729t/exp/tree/master/tun2udp/dtls;它由Robin Seggelmann的DTLS示例构建而成。具体来说,我正在使用server3_oo.c。