如何配置简单框架以要求SSL客户端身份验证? [英] How can I configure Simple Framework to require SSL client authentication?

查看:94
本文介绍了如何配置简单框架以要求SSL客户端身份验证?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用简单框架编写HTTP服务器,并希望要求客户端出示有效证书由我的证书颁发机构签名以建立连接。

I am writing an HTTP server using the Simple Framework and would like to require clients to present a valid certificate signed by my certificate authority in order to establish a connection.

我编写了以下裸服务器。如何修改此代码以要求所有SSL连接都需要客户端证书身份验证?

I have the following bare-bones server written. How can I modify this code to require client certificate authentication for all SSL connections?

public static void main(String[] args) throws Exception {
    Container container = createContainer();

    Server server = new ContainerServer(container);
    Connection connection = new SocketConnection(server);
    SocketAddress address = new InetSocketAddress(8443);

    KeyManagerFactory km = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    KeyStore serverKeystore = KeyStore.getInstance(KeyStore.getDefaultType());
    try(InputStream keystoreFile = new FileInputStream(SERVER_KEYSTORE_PATH)) {
        serverKeystore.load(keystoreFile, "asdfgh".toCharArray());
    }
    km.init(serverKeystore, SERVER_KS_PASSWORD.toCharArray());

    TrustManagerFactory tm = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    KeyStore caKeystore = KeyStore.getInstance(KeyStore.getDefaultType());
    try(InputStream caCertFile = new FileInputStream(CA_CERT_PATH)) {
        caKeystore.load(caCertFile, CA_KS_PASSWORD.toCharArray());
    }
    tm.init(caKeystore);

    SSLContext sslContext = SSLContext.getInstance("TLS");
    sslContext.init(km.getKeyManagers(), tm.getTrustManagers(), null);

    connection.connect(address, sslContext);
}


推荐答案

尝试一下

public class MyServer implements org.simpleframework.transport.Server {

   private Server delegateServer;

   public MyServer(Server delegateServer){
      this.delegateServer = delegateServer;
   }

   public void process(Socket socket){
     socket.getEngine().setNeedClientAuth(true);
     delegateServer.process(socket);
   }
}

这篇关于如何配置简单框架以要求SSL客户端身份验证?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆