OpenSSLライブラリ(total newb)の使用方法を学習しようとしていますが、クライアントが正しい証明書を使用してサーバーに接続する方法を理解するのに少し問題があり、証明書が正しくない場合は失敗します。私のユースケースは、中央CAを使用せずにp2pアプリケーションを構築することであるため、CA証明書に依存することはできません。具体的には、サーバーには通常どおり証明書/キーがあり、クライアントは他のp2pノードに投票を依頼することでサーバーの証明書を決定します。
私は2つの特定の質問があります:
- 以下のコードスニペットでは、「暗号リスト」の下の選択をコメントアウトすると、クライアントが接続しないことを期待しています。それはまだ動作します!何かが足りないですよね?
- クライアントにサーバー証明書を使用させる方法はありますか?それで接続を開くのに十分ですか?つまり、キーもCAもありませんか?
クライアント:
ctx = SSL_CTX_new(DTLSv1_client_method());
SSL_CTX_set_cipher_list(ctx, "HIGH:!DSS:!aNULL@STRENGTH");
// 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:!aNULL@STRENGTH"); // 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にあります; これは、RobinSeggelmannのDTLSの例で構成されています。具体的には、server3_oo.cを使用しています。