OpenSSL 라이브러리 (전체 newb)를 사용하는 방법을 배우려고하고 있는데 클라이언트가 올바른 인증서로 서버에 연결하는 방법을 알아내는 데 어려움을 겪고 있으며 인증서가 올바르지 않으면 실패합니다. 내 사용 사례는 중앙 CA가없는 P2P 응용 프로그램을 작성하므로 CA 인증서에 의존 할 수 없습니다. 특히, 서버는 평소와 같이 cert/key를 가지며, 클라이언트는 다른 p2p 노드에게 투표하도록 요청함으로써 서버의 인증서를 결정합니다.OpenSSL은 인증 기관이있는 서버 인증서를 클라이언트에 제공합니까?
내가 두 가지 구체적인 질문이 있습니다 아래의 코드 조각에서
- 을, 나는 클라이언트가 연결되지 기대 나는 을 주석 '암호 목록'아래 선택을하는 경우. 그것은 여전히 작동합니다! 내가 뭔가 빠졌어. 그렇지?
- 클라이언트가 서버 인증서를 사용하고 연결을 여는 데 충분해야합니까? 키가 없어, 아니 캘리포니아?
클라이언트 :
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와 함께 일하고있다.