导航菜单

页面标题

页面副标题

fieldd v4.2.4 - TlsServerHandshakerSocketFactory.java 源代码

正在查看: fieldd v4.2.4 应用的 TlsServerHandshakerSocketFactory.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package io.grpc.okhttp;

import io.grpc.Attributes;
import io.grpc.Grpc;
import io.grpc.InternalChannelz;
import io.grpc.SecurityLevel;
import io.grpc.internal.GrpcAttributes;
import io.grpc.okhttp.HandshakerSocketFactory;
import io.grpc.okhttp.SslSocketFactoryServerCredentials;
import io.grpc.okhttp.internal.ConnectionSpec;
import io.grpc.okhttp.internal.Protocol;
import java.io.IOException;
import java.net.Socket;
import java.util.Arrays;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

final class TlsServerHandshakerSocketFactory implements HandshakerSocketFactory {
    private final ConnectionSpec connectionSpec;
    private final PlaintextHandshakerSocketFactory delegate = new PlaintextHandshakerSocketFactory();
    private final SSLSocketFactory socketFactory;

    public TlsServerHandshakerSocketFactory(SslSocketFactoryServerCredentials.ServerCredentials serverCredentials) {
        this.socketFactory = serverCredentials.getFactory();
        this.connectionSpec = serverCredentials.getConnectionSpec();
    }

    @Override
    public HandshakerSocketFactory.HandshakeResult handshake(Socket socket, Attributes attributes) throws IOException {
        HandshakerSocketFactory.HandshakeResult handshake = this.delegate.handshake(socket, attributes);
        Socket createSocket = this.socketFactory.createSocket(handshake.socket, (String) null, -1, true);
        if (!(createSocket instanceof SSLSocket)) {
            throw new IOException("SocketFactory " + this.socketFactory + " did not produce an SSLSocket: " + createSocket.getClass());
        }
        SSLSocket sSLSocket = (SSLSocket) createSocket;
        sSLSocket.setUseClientMode(false);
        this.connectionSpec.apply(sSLSocket, false);
        Protocol protocol = Protocol.HTTP_2;
        String negotiate = OkHttpProtocolNegotiator.get().negotiate(sSLSocket, null, this.connectionSpec.supportsTlsExtensions() ? Arrays.asList(protocol) : null);
        if (!protocol.toString().equals(negotiate)) {
            throw new IOException("Expected NPN/ALPN " + protocol + ": " + negotiate);
        }
        return new HandshakerSocketFactory.HandshakeResult(createSocket, handshake.attributes.toBuilder().set(GrpcAttributes.ATTR_SECURITY_LEVEL, SecurityLevel.PRIVACY_AND_INTEGRITY).set(Grpc.TRANSPORT_ATTR_SSL_SESSION, sSLSocket.getSession()).build(), new InternalChannelz.Security(new InternalChannelz.Tls(sSLSocket.getSession())));
    }
}