24 #include <gmock/gmock.h>
25 #include <gtest/gtest.h>
42 #define CA_CERT_PATH "src/core/tsi/test_creds/ca.pem"
43 #define CLIENT_CERT_PATH "src/core/tsi/test_creds/multi-domain.pem"
44 #define SERVER_CERT_PATH_0 "src/core/tsi/test_creds/server0.pem"
45 #define SERVER_KEY_PATH_0 "src/core/tsi/test_creds/server0.key"
46 #define SERVER_CERT_PATH_1 "src/core/tsi/test_creds/server1.pem"
47 #define SERVER_KEY_PATH_1 "src/core/tsi/test_creds/server1.key"
62 grpc_slice ca_slice_1, ca_slice_0, cert_slice_1, key_slice_1, cert_slice_0,
95 const char* expected_error_msg =
static_cast<const char*
>(
arg);
96 if (expected_error_msg ==
nullptr) {
147 RootAndIdentityCertsObtainedWhenCreateChannelSecurityConnector) {
149 MakeRefCounted<grpc_tls_certificate_distributor>();
154 MakeRefCounted<TlsTestCertificateProvider>(distributor);
156 MakeRefCounted<grpc_tls_credentials_options>();
157 options->set_certificate_provider(provider);
158 options->set_watch_root_cert(
true);
159 options->set_watch_identity_pair(
true);
163 MakeRefCounted<TlsCredentials>(
options);
184 SystemRootsWhenCreateChannelSecurityConnector) {
187 MakeRefCounted<grpc_tls_credentials_options>();
189 MakeRefCounted<TlsCredentials>(root_options);
193 nullptr, &root_new_args);
202 SystemRootsAndIdentityCertsObtainedWhenCreateChannelSecurityConnector) {
204 MakeRefCounted<grpc_tls_certificate_distributor>();
208 MakeRefCounted<TlsTestCertificateProvider>(distributor);
211 MakeRefCounted<grpc_tls_credentials_options>();
216 MakeRefCounted<TlsCredentials>(root_options);
220 nullptr, &root_new_args);
235 RootCertsObtainedWhenCreateChannelSecurityConnector) {
237 MakeRefCounted<grpc_tls_certificate_distributor>();
242 MakeRefCounted<TlsTestCertificateProvider>(distributor);
245 MakeRefCounted<grpc_tls_credentials_options>();
250 MakeRefCounted<TlsCredentials>(root_options);
254 nullptr, &root_new_args);
267 CertPartiallyObtainedWhenCreateChannelSecurityConnector) {
269 MakeRefCounted<grpc_tls_certificate_distributor>();
272 MakeRefCounted<TlsTestCertificateProvider>(distributor);
276 MakeRefCounted<grpc_tls_credentials_options>();
277 options->set_certificate_provider(provider);
278 options->set_watch_root_cert(
true);
279 options->set_watch_identity_pair(
true);
283 MakeRefCounted<TlsCredentials>(
options);
305 DistributorHasErrorForChannelSecurityConnector) {
307 MakeRefCounted<grpc_tls_certificate_distributor>();
312 MakeRefCounted<TlsTestCertificateProvider>(distributor);
314 MakeRefCounted<grpc_tls_credentials_options>();
315 options->set_certificate_provider(provider);
316 options->set_watch_root_cert(
true);
317 options->set_watch_identity_pair(
true);
321 MakeRefCounted<TlsCredentials>(
options);
347 CreateChannelSecurityConnectorFailNoTargetName) {
349 MakeRefCounted<grpc_tls_credentials_options>();
351 MakeRefCounted<TlsCredentials>(
options);
360 CreateChannelSecurityConnectorFailNoCredentials) {
363 nullptr, MakeRefCounted<grpc_tls_credentials_options>(),
nullptr,
370 MakeRefCounted<grpc_tls_credentials_options>();
372 MakeRefCounted<TlsCredentials>(
options);
375 credential,
nullptr,
nullptr,
kTargetName,
nullptr,
nullptr);
384 ChannelSecurityConnectorWithSyncExternalVerifierSucceeds) {
388 MakeRefCounted<grpc_tls_credentials_options>();
389 options->set_verify_server_cert(
true);
390 options->set_certificate_verifier(core_external_verifier.
Ref());
391 options->set_check_call_host(
false);
393 MakeRefCounted<TlsCredentials>(
options);
406 "grpc", strlen(
"grpc"),
414 VerifyExpectedErrorCallback,
nullptr, grpc_schedule_on_exec_ctx);
415 tls_connector->
check_peer(peer,
nullptr, &auth_context, on_peer_checked);
420 ChannelSecurityConnectorWithSyncExternalVerifierFails) {
424 MakeRefCounted<grpc_tls_credentials_options>();
425 options->set_verify_server_cert(
true);
426 options->set_certificate_verifier(core_external_verifier.
Ref());
427 options->set_check_call_host(
false);
429 MakeRefCounted<TlsCredentials>(
options);
442 "grpc", strlen(
"grpc"),
448 const char* expected_error_msg =
449 "Custom verification check failed with error: UNAUTHENTICATED: "
450 "SyncExternalVerifier failed";
453 VerifyExpectedErrorCallback,
const_cast<char*
>(expected_error_msg),
454 grpc_schedule_on_exec_ctx);
455 tls_connector->
check_peer(peer,
nullptr, &auth_context, on_peer_checked);
460 CompareChannelSecurityConnectorSucceedsOnSameCredentials) {
462 MakeRefCounted<grpc_tls_certificate_distributor>();
465 MakeRefCounted<TlsTestCertificateProvider>(distributor);
466 auto options = MakeRefCounted<grpc_tls_credentials_options>();
467 options->set_certificate_provider(provider);
468 options->set_watch_root_cert(
true);
471 MakeRefCounted<TlsCredentials>(
options);
484 CompareChannelSecurityConnectorFailsOnDifferentChannelCredentials) {
486 MakeRefCounted<grpc_tls_certificate_distributor>();
489 MakeRefCounted<TlsTestCertificateProvider>(distributor);
490 auto options = MakeRefCounted<grpc_tls_credentials_options>();
491 options->set_certificate_provider(provider);
492 options->set_watch_root_cert(
true);
495 MakeRefCounted<TlsCredentials>(
options);
499 auto other_options = MakeRefCounted<grpc_tls_credentials_options>();
500 other_options->set_certificate_provider(provider);
501 other_options->set_watch_root_cert(
true);
503 other_options->set_watch_identity_pair(
true);
505 MakeRefCounted<TlsCredentials>(other_options);
515 CompareChannelSecurityConnectorFailsOnDifferentCallCredentials) {
517 MakeRefCounted<grpc_tls_certificate_distributor>();
520 MakeRefCounted<TlsTestCertificateProvider>(distributor);
521 auto options = MakeRefCounted<grpc_tls_credentials_options>();
522 options->set_certificate_provider(provider);
523 options->set_watch_root_cert(
true);
526 MakeRefCounted<TlsCredentials>(
options);
542 CompareChannelSecurityConnectorFailsOnDifferentTargetNames) {
544 MakeRefCounted<grpc_tls_certificate_distributor>();
547 MakeRefCounted<TlsTestCertificateProvider>(distributor);
548 auto options = MakeRefCounted<grpc_tls_credentials_options>();
549 options->set_certificate_provider(provider);
550 options->set_watch_root_cert(
true);
553 MakeRefCounted<TlsCredentials>(
options);
566 ChannelSecurityConnectorWithAsyncExternalVerifierSucceeds) {
568 auto* core_external_verifier =
570 auto options = MakeRefCounted<grpc_tls_credentials_options>();
571 options->set_verify_server_cert(
true);
572 options->set_certificate_verifier(core_external_verifier->Ref());
573 options->set_check_call_host(
false);
575 MakeRefCounted<TlsCredentials>(
options);
588 "grpc", strlen(
"grpc"),
596 VerifyExpectedErrorCallback,
nullptr, grpc_schedule_on_exec_ctx);
597 tls_connector->
check_peer(peer,
nullptr, &auth_context, on_peer_checked);
599 core_external_verifier->Unref();
603 ChannelSecurityConnectorWithAsyncExternalVerifierFails) {
605 auto* core_external_verifier =
607 auto options = MakeRefCounted<grpc_tls_credentials_options>();
608 options->set_verify_server_cert(
true);
609 options->set_certificate_verifier(core_external_verifier->Ref());
610 options->set_check_call_host(
false);
612 MakeRefCounted<TlsCredentials>(
options);
625 "grpc", strlen(
"grpc"),
631 const char* expected_error_msg =
632 "Custom verification check failed with error: UNAUTHENTICATED: "
633 "AsyncExternalVerifier failed";
636 VerifyExpectedErrorCallback,
const_cast<char*
>(expected_error_msg),
637 grpc_schedule_on_exec_ctx);
638 tls_connector->
check_peer(peer,
nullptr, &auth_context, on_peer_checked);
640 core_external_verifier->Unref();
644 ChannelSecurityConnectorHostnameVerifierSucceeds) {
646 MakeRefCounted<grpc_tls_credentials_options>();
647 options->set_verify_server_cert(
true);
648 options->set_certificate_verifier(hostname_certificate_verifier_.Ref());
649 options->set_check_call_host(
false);
651 MakeRefCounted<TlsCredentials>(
options);
664 "grpc", strlen(
"grpc"),
688 VerifyExpectedErrorCallback,
nullptr, grpc_schedule_on_exec_ctx);
689 tls_connector->
check_peer(peer,
nullptr, &auth_context, on_peer_checked);
694 ChannelSecurityConnectorHostnameVerifierFails) {
696 MakeRefCounted<grpc_tls_credentials_options>();
697 options->set_verify_server_cert(
true);
698 options->set_certificate_verifier(hostname_certificate_verifier_.Ref());
700 MakeRefCounted<TlsCredentials>(
options);
713 "grpc", strlen(
"grpc"),
735 const char* expected_error_msg =
736 "Custom verification check failed with error: UNAUTHENTICATED: Hostname "
741 VerifyExpectedErrorCallback,
const_cast<char*
>(expected_error_msg),
742 grpc_schedule_on_exec_ctx);
743 tls_connector->
check_peer(peer,
nullptr, &auth_context, on_peer_checked);
752 RootAndIdentityCertsObtainedWhenCreateServerSecurityConnector) {
754 MakeRefCounted<grpc_tls_certificate_distributor>();
759 MakeRefCounted<TlsTestCertificateProvider>(distributor);
761 MakeRefCounted<grpc_tls_credentials_options>();
762 options->set_certificate_provider(provider);
763 options->set_watch_root_cert(
true);
764 options->set_watch_identity_pair(
true);
768 MakeRefCounted<TlsServerCredentials>(
options);
790 IdentityCertsObtainedWhenCreateServerSecurityConnector) {
792 MakeRefCounted<grpc_tls_certificate_distributor>();
797 MakeRefCounted<TlsTestCertificateProvider>(distributor);
800 MakeRefCounted<grpc_tls_credentials_options>();
805 MakeRefCounted<TlsServerCredentials>(identity_options);
824 CertPartiallyObtainedWhenCreateServerSecurityConnector) {
826 MakeRefCounted<grpc_tls_certificate_distributor>();
830 MakeRefCounted<TlsTestCertificateProvider>(distributor);
834 MakeRefCounted<grpc_tls_credentials_options>();
835 options->set_certificate_provider(provider);
836 options->set_watch_root_cert(
true);
837 options->set_watch_identity_pair(
true);
841 MakeRefCounted<TlsServerCredentials>(
options);
859 DistributorHasErrorForServerSecurityConnector) {
861 MakeRefCounted<grpc_tls_certificate_distributor>();
866 MakeRefCounted<TlsTestCertificateProvider>(distributor);
868 MakeRefCounted<grpc_tls_credentials_options>();
869 options->set_certificate_provider(provider);
870 options->set_watch_root_cert(
true);
871 options->set_watch_identity_pair(
true);
875 MakeRefCounted<TlsServerCredentials>(
options);
898 CreateServerSecurityConnectorFailNoCredentials) {
900 nullptr, MakeRefCounted<grpc_tls_credentials_options>());
906 MakeRefCounted<grpc_tls_credentials_options>();
908 MakeRefCounted<TlsServerCredentials>(
options);
910 credential,
nullptr);
915 CompareServerSecurityConnectorSucceedsOnSameCredentials) {
917 MakeRefCounted<grpc_tls_certificate_distributor>();
921 MakeRefCounted<TlsTestCertificateProvider>(distributor);
922 auto options = MakeRefCounted<grpc_tls_credentials_options>();
923 options->set_certificate_provider(provider);
924 options->set_watch_identity_pair(
true);
927 MakeRefCounted<TlsServerCredentials>(
options);
938 CompareServerSecurityConnectorFailsOnDifferentServerCredentials) {
940 MakeRefCounted<grpc_tls_certificate_distributor>();
944 MakeRefCounted<TlsTestCertificateProvider>(distributor);
945 auto options = MakeRefCounted<grpc_tls_credentials_options>();
946 options->set_certificate_provider(provider);
947 options->set_watch_identity_pair(
true);
950 MakeRefCounted<TlsServerCredentials>(
options);
954 MakeRefCounted<TlsServerCredentials>(
options);
967 ServerSecurityConnectorWithSyncExternalVerifierSucceeds) {
971 MakeRefCounted<grpc_tls_credentials_options>();
973 options->set_certificate_verifier(core_external_verifier.
Ref());
977 options->set_watch_identity_pair(
true);
978 auto credentials = MakeRefCounted<TlsServerCredentials>(
options);
979 auto connector = credentials->create_security_connector(
nullptr);
984 "grpc", strlen(
"grpc"),
992 VerifyExpectedErrorCallback,
nullptr, grpc_schedule_on_exec_ctx);
993 connector->check_peer(peer,
nullptr, &auth_context, on_peer_checked);
997 ServerSecurityConnectorWithSyncExternalVerifierFails) {
1001 MakeRefCounted<grpc_tls_credentials_options>();
1003 options->set_certificate_verifier(core_external_verifier.
Ref());
1007 options->set_watch_identity_pair(
true);
1008 auto credentials = MakeRefCounted<TlsServerCredentials>(
options);
1009 auto connector = credentials->create_security_connector(
nullptr);
1014 "grpc", strlen(
"grpc"),
1020 const char* expected_error_msg =
1021 "Custom verification check failed with error: UNAUTHENTICATED: "
1022 "SyncExternalVerifier failed";
1025 VerifyExpectedErrorCallback,
const_cast<char*
>(expected_error_msg),
1026 grpc_schedule_on_exec_ctx);
1027 connector->check_peer(peer,
nullptr, &auth_context, on_peer_checked);
1031 ServerSecurityConnectorWithAsyncExternalVerifierSucceeds) {
1033 auto* core_external_verifier =
1035 auto options = MakeRefCounted<grpc_tls_credentials_options>();
1037 options->set_certificate_verifier(core_external_verifier->Ref());
1041 options->set_watch_identity_pair(
true);
1042 auto credentials = MakeRefCounted<TlsServerCredentials>(
options);
1043 auto connector = credentials->create_security_connector(
nullptr);
1048 "grpc", strlen(
"grpc"),
1056 VerifyExpectedErrorCallback,
nullptr, grpc_schedule_on_exec_ctx);
1057 connector->check_peer(peer,
nullptr, &auth_context, on_peer_checked);
1058 core_external_verifier->Unref();
1062 ServerSecurityConnectorWithAsyncExternalVerifierFails) {
1064 auto* core_external_verifier =
1067 MakeRefCounted<grpc_tls_credentials_options>();
1069 options->set_certificate_verifier(core_external_verifier->Ref());
1073 options->set_watch_identity_pair(
true);
1074 auto credentials = MakeRefCounted<TlsServerCredentials>(
options);
1075 auto connector = credentials->create_security_connector(
nullptr);
1080 "grpc", strlen(
"grpc"),
1086 const char* expected_error_msg =
1087 "Custom verification check failed with error: UNAUTHENTICATED: "
1088 "AsyncExternalVerifier failed";
1091 VerifyExpectedErrorCallback,
const_cast<char*
>(expected_error_msg),
1092 grpc_schedule_on_exec_ctx);
1093 connector->check_peer(peer,
nullptr, &auth_context, on_peer_checked);
1094 core_external_verifier->Unref();