Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中如何从rest请求中检索客户端证书_Java_Http_Jersey_Ssl Certificate_Jetty - Fatal编程技术网

Java中如何从rest请求中检索客户端证书

Java中如何从rest请求中检索客户端证书,java,http,jersey,ssl-certificate,jetty,Java,Http,Jersey,Ssl Certificate,Jetty,我正在使用Jersey作为Java中的REST服务器和Jetty作为web服务器。我有自签名证书。我想从收到的HTTP请求中获取客户端证书详细信息。如何从HttpServletRequest获取信息 一种方法: X509Certificate certs[] = (X509Certificate[])httpRequest.getAttribute("javax.servlet.request.X509Certificate"); 是这样吗?这就导致了例外, Error [Ljava.lang

我正在使用
Jersey
作为
Java
中的
REST
服务器和
Jetty
作为web服务器。我有
自签名
证书。我想从收到的HTTP请求中获取客户端证书详细信息。如何从
HttpServletRequest
获取信息

一种方法:

X509Certificate certs[] = (X509Certificate[])httpRequest.getAttribute("javax.servlet.request.X509Certificate");
是这样吗?这就导致了例外,

Error [Ljava.lang.Object; cannot be cast to [Ljava.security.cert.X509Certificate 
我应该包括任何附加的
JAR
?或者是否有任何方法获取客户端证书详细信息

我也遇到过,

httpRequest.getHeader("ssl_client_cert");

这两种方法似乎对我都不管用。如何获取详细信息?

首先,确保处理SSL/TLS的ServerConnector。 接下来,该ServerConnector应该有一个SslConnectionFactory,其中包含一个已配置的HttpConfiguration对象。 该HttpConfiguration对象应添加SecureRequestCustomizer

用嵌入式码头的说法,它看起来像这样

//SSL上下文工厂
SslContextFactory SslContextFactory=新的SslContextFactory();
setkeystrepath(“/path/to/keystore”);
setKeyStorePassword(“密码”);
sslContextFactory.setKeyManagerPassword(“机密”);
setTrustStorePath(“/path/to/keystore”);
setTrustStorePassword(“密码”);
//SSL HTTP配置
HttpConfiguration https_config=新的HttpConfiguration(http_config);

https_config.addCustomizer(新的SecureRequestCustomizer());//如果不将其强制转换为
X509Certificate
数组,而是将其保留为对象数组,会发生什么?该对象数组是否包含
X509Certificate
?您所做的工作肯定适用于Tomcat。泽西岛/码头可能有所不同。需要检查的一件事是证书类是否在旧包(javax.security.cert.X509Certificate)中。请注意“javax”。
$ cd /path/to/my-jetty-base
$ java -jar /path/to/jetty-home/start.jar --list-config

Java Environment:
-----------------
 java.home = /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre (null)
 java.vm.vendor = Oracle Corporation (null)
 java.vm.version = 25.202-b08 (null)
 java.vm.name = Java HotSpot(TM) 64-Bit Server VM (null)
 java.vm.info = mixed mode (null)
 java.runtime.name = Java(TM) SE Runtime Environment (null)
 java.runtime.version = 1.8.0_202-b08 (null)
 java.io.tmpdir = /var/folders/w5/mmnzpk0n369dntp4nszlc8h40000gn/T/ (null)
 user.dir = /path/to/my-jetty-base (null)
 user.language = en (null)
 user.country = US (null)

Jetty Environment:
-----------------
 jetty.version = 9.4.15.v20190215
 jetty.tag.version = master
 jetty.home = /path/to/jetty-home
 jetty.base = /path/to/my-jetty-base

...(snip lots of output)...

Jetty Active XMLs:
------------------
 ${jetty.home}/etc/jetty-threadpool.xml
 ${jetty.home}/etc/jetty.xml
 ${jetty.home}/etc/jetty-webapp.xml
 ${jetty.home}/etc/jetty-plus.xml
 ${jetty.home}/etc/jetty-annotations.xml
 ${jetty.home}/etc/jetty-deploy.xml
 ${jetty.home}/etc/jetty-http.xml
 ${jetty.home}/etc/jetty-ssl.xml      <-- THIS LINE
 ${jetty.home}/etc/jetty-ssl-context.xml
 ${jetty.home}/etc/jetty-https.xml
 ${jetty.home}/etc/jetty-jaas.xml
 ${jetty.home}/etc/jetty-rewrite.xml
 ${jetty.base}/etc/demo-rewrite-rules.xml
 ${jetty.base}/etc/test-realm.xml