标签: mutual-authentication

Grpc Java SSL相互认证

我想知道需要在GrpcSslContext中设置什么才能让Grpc Client与服务器进行SSL身份验证?

目前,以下代码适用于从服务器到客户端的常规单向SSL身份验证.

在服务器上,

SslContext sslContext = GrpcSslContexts.forServer(new File(pathToOwnCertPemFile), new File(pathToOwnPrivateKeyPemFile)).trustManager(new File(pathToClientCertPemFile)).build();

ServerImpl server = NettyServerBuilder
        .forPort(port)
        .sslContext(sslContext)
        .addService(MyGrpc.bindService(new MyGrpcService()))
        .build().start();
Run Code Online (Sandbox Code Playgroud)

在客户端,

SslContext sslContext = GrpcSslContexts.forClient().trustManager(new File(pathToServerCertPemFile)).keyManager(new File(pathToOwnCertPemFile), new File(pathToOwnPrivateKeyPemFile)).build();

ChannelImpl channel = NettyChannelBuilder.forAddress(host, port)
                .negotiationType(NegotiationType.TLS)
                .sslContext(sslContext).build();

blockingStub = MyGrpc.newBlockingStub(channel);
asyncStub = MyGrpc.newStub(channel);
Run Code Online (Sandbox Code Playgroud)

根据gRPC在https://github.com/grpc/grpc-java/blob/master/SECURITY.md,

如果需要相互认证,也可以通过创建适当的SslContext来支持.

我想知道我是否正确初始化了GrpcSslContexts?

任何建议/意见表示赞赏.

[更新]

在进一步故障排除后,我注意到CertificateRequest消息(如https://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake中所述)从未发送到客户端以启动客户端身份验证.

我的服务器日志摘录如下:......

*** ECDH ServerKeyExchange
Signature Algorithm SHA512withRSA
Server key: Sun EC public key, 256 bits
public x coord: 81392923578261760187813715443713168545877454618233337093852615933913992434989
public y coord: 26389586381130695169212775668808794166799180199461581135201001980310825571555
parameters: secp256r1 NIST P-256, …
Run Code Online (Sandbox Code Playgroud)

java ssl mutual-authentication grpc

3
推荐指数
2
解决办法
2860
查看次数

提升asio SSL双向认证

我需要一段代码,用于我正在编写的程序Boost Asio SSL.我有一个由两个客户组成的系统,它们相互连接.我要求他们进行相互身份验证,因此,在handshake()命令结束时,两个客户端都可以确定其他客户端具有其提供的证书的私钥.两个客户端有一个context对象,让我们打电话给他们ctx1,并ctx2和每个客户端有一个公共的证书和私钥.

是否可以设置上下文对象,当我调用socket.handshake()客户端时将执行双向身份验证.如果没有,那么实现目标的正确方法是什么?

c++ ssl boost boost-asio mutual-authentication

2
推荐指数
1
解决办法
4050
查看次数

从 Go gRPC 处理程序中的客户端证书获取主题 DN

我正在使用带有相互 tls 的 Golang gRPC。是否可以从 rpc 方法获取客户端的证书主题 DN?

// ...
func main() {
    // ...
    creds := credentials.NewTLS(&tls.Config{
        ClientAuth:   tls.RequireAndVerifyClientCert,
        Certificates: []tls.Certificate{certificate},
        ClientCAs:    certPool,
        MinVersion:   tsl.VersionTLS12,
    })
    s := NewMyService()
    gs := grpc.NewServer(grpc.Creds(creds))
    RegisterGRPCZmqProxyServer(gs, s)
    er := gs.Serve(lis)
    // ...
}

// ...
func (s *myService) Foo(ctx context.Context, req *FooRequest) (*FooResonse, error) {
    $dn := // What should be here?
    // ...
}
Run Code Online (Sandbox Code Playgroud)

是否可以?

ssl-certificate go mutual-authentication grpc tls1.2

1
推荐指数
1
解决办法
1450
查看次数

发送客户端证书如何避免客户端被冒充

好吧,为了方便沟通,我将参考这张图片TLS 相互认证的描述

好的,服务器发送一个公钥,客户端用它来加密自己的证书信息并发回服务器。我不明白的是为什么攻击者无法拦截步骤 4 中的数据包,然后使用它发送到服务器来冒充客户端。他们不必知道里面的信息或解密它。如果攻击者获得该数据包并保存它,那么当服务器请求客户端证书时,他们可以将这些确切的字节发送到服务器。我不确定这种加密方法如何防止此类攻击。话又说回来,当涉及到套接字级加密时,我完全是个菜鸟,所以我可能会错过一些重要的东西。谢谢!

sockets authentication ssl certificate mutual-authentication

1
推荐指数
1
解决办法
2781
查看次数