def assertSecurityMtls(self, client_security: grpc_channelz.Security, server_security: grpc_channelz.Security): self.assertEqual(client_security.WhichOneof('model'), 'tls', msg='(mTLS) Client socket security model must be TLS') self.assertEqual(server_security.WhichOneof('model'), 'tls', msg='(mTLS) Server socket security model must be TLS') server_tls, client_tls = server_security.tls, client_security.tls # Confirm regular TLS: server local cert == client remote cert self.assertNotEmpty(client_tls.remote_certificate, msg="(mTLS) Client remote certificate is missing") if self.check_local_certs: self.assertNotEmpty( server_tls.local_certificate, msg="(mTLS) Server local certificate is missing") self.assertEqual( server_tls.local_certificate, client_tls.remote_certificate, msg="(mTLS) Server local certificate must match client's " "remote certificate") # mTLS: server remote cert == client local cert self.assertNotEmpty(server_tls.remote_certificate, msg="(mTLS) Server remote certificate is missing") if self.check_local_certs: self.assertNotEmpty( client_tls.local_certificate, msg="(mTLS) Client local certificate is missing") self.assertEqual( server_tls.remote_certificate, client_tls.local_certificate, msg="(mTLS) Server remote certificate must match client's " "local certificate")
def assertSecurityTls(self, client_security: grpc_channelz.Security, server_security: grpc_channelz.Security): self.assertEqual(client_security.WhichOneof('model'), 'tls', msg='(TLS) Client socket security model must be TLS') self.assertEqual(server_security.WhichOneof('model'), 'tls', msg='(TLS) Server socket security model must be TLS') server_tls, client_tls = server_security.tls, client_security.tls # Regular TLS: server local cert == client remote cert self.assertNotEmpty(client_tls.remote_certificate, msg="(TLS) Client remote certificate is missing") if self.check_local_certs: self.assertNotEmpty( server_tls.local_certificate, msg="(TLS) Server local certificate is missing") self.assertEqual( server_tls.local_certificate, client_tls.remote_certificate, msg="(TLS) Server local certificate must match client " "remote certificate") # mTLS must not be used self.assertEmpty( server_tls.remote_certificate, msg="(TLS) Server remote certificate must be empty in TLS mode. " "Is server security incorrectly configured for mTLS?") self.assertEmpty( client_tls.local_certificate, msg="(TLS) Client local certificate must be empty in TLS mode. " "Is client security incorrectly configured for mTLS?")
def debug_sock_certs(cls, security: grpc_channelz.Security): if security.WhichOneof('model') == 'other': return f'other: <{security.other.name}={security.other.value}>' return (f'local: <{cls.debug_cert(security.tls.local_certificate)}>, ' f'remote: <{cls.debug_cert(security.tls.remote_certificate)}>')