3
Grizzly 2.3 기반의 JAX-RS 웹 서비스를 실행하는 서버에서 클라이언트 x.509 인증서의 CN 필드를 확인하고 싶습니다. . Grizzly 1에 대한 몇 가지 예를 발견했지만 코드가 크게 변경된 것으로 보입니다. 여기에 코드가 있습니다 :Grizzly 2.3에서 X.509 클라이언트 인증서를 얻는 방법 (클라이언트 인증을 사용할 때)
class Transport {
public static void main(String[] args){
ResourceConfig rc = new PackagesResourceConfig(Transport.class.getPackage().getName());
String url = "http://myhost:8080/myURL";
URI uri = UriBuilder.fromUri(url).build();
HttpServer server = GrizzlyServerFactory.createHttpServer(uri, rc);
SSLContextConfigurator sslContext = new SSLContextConfigurator();
sslContext.setKeyStoreFile("path_to_my_keystore");
sslContext.setKeyStorePass("password");
sslContext.setTrustStoreFile("path_to_my_truststore");
sslContext.setTrustStorePass("password");
sslContext.setSecurityProtocol("TLSv1.2");
SSLEngineConfigurator sslEngineConfigurator = new SSLEngineConfigurator(sslContext);
sslEngineConfigurator.setNeedClientAuth(true);
sslEngineConfigurator.setWantClientAuth(true);
sslEngineConfigurator.setEnabledCipherSuites(new String[]{"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "TLS_RSA_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "TLS_RSA_WITH_AES_128_CBC_SHA"});
sslEngineConfigurator.setClientMode(false);
NetworkListener listener = new NetworkListener("grizzly_ssl", uri.getHost(), 8443);
listener.setSecure(true);
listener.setSSLEngineConfig(sslEngineConfigurator);
server.addListener(listener);
}
@POST
@Produces({ MediaType.APPLICATION_XML })
@Consumes({ MediaType.APPLICATION_XML })
@Path("foo")
public Response receivePayload(MyPayload payload) {
// How can I get the CN of the client x.509 certificate/or the fingerprint of the certificate?
}
}
작품 – Hank