问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java通过servlet读ie端的证书即为什么老是得到null值的最终解决

发布网友 发布时间:2022-04-25 14:39

我来回答

2个回答

热心网友 时间:2023-10-09 12:55

问了一下我远标的哥们他说需要解决的问题:
1. Servlet如何读客户端的认证
很多网上的朋友都说
“我用X509Certificate[]certs = (X509Certificate[]) request .getAttribute("javax.servlet.request.X509Certificate");
得到的证书是个null”
几乎没有答案,这边给出解决方案
a. 客户端访问这个servlet,客户端和放这个servlet的j2eeapp必须实现“双向认证”
b. J2ee app端(假设我们这边用TOMCAT实现),在实现双向认证后,其实还不够,需要加一个参数,很多人可能没注意到这个参数,下面给出方案:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
enableLookups="false"disableUploadTimeout="true"
useURIValidationHack="false"
scheme="https"secure="true"
keystoreFile="D:/tomcat/conf/shnlap93.jks"keystorePass="xxxxxxx"
truststoreFile="D:/tomcat/conf/truststore.jks"truststorePass="aaaaaa"
truststoreType="JKS"
clientAuth="true"sslProtocol="TLS" />
看到上面那个标红的地方了吧?就是这个参数没加,因此很多人就算启用了双向认证,你的servlet在拿ie端的证书时还是会得到null值
2. 好,现在客户端的公钥拿到了,怎么拿私钥?
前面说了,我们先做一个简单的,写死的,就是把客户端的私钥放在我们的网站的某个目录下,然后用程序去读出来。
因此我们的过程如下:
a. 客户端通过IE输入他的交易密码
b. 然后点“提交”按钮,POST到我们的这个servlet
c. Servlet先读放在网站某个目录下的该客户的私钥,loadPrivateKey后用私钥对客户提交的form里的密码进行签名。
d. Servlet获得客户端IE里的证书,把公钥拿出来,然后用公钥对签完名的byte[]进行verify, 得到true代表认签成功,false认签失败,下面是我们的servlet
此处需要注意的是我们用openssl签出的private key是不能直接被Java所访问的,因为它含用:
#begin certificate

#end certificate
这样的东西,而JAVA只认#begin…#end当中的那块东西,怎么办:
使用下面这条使用把openssl签出的key转成我们java可以认的rsa的KEY
opensslpkcs8 -topk8 -inform PEM -outform DER -in shnlap93.key -out pkcs8_der.key –nocrypt
下面是我们的servlet的核心片段, 拿客户端IE的公钥,拿网站某个目录摆放的私钥,然后调用标准的JAVA电子签名
private PublicKey getPubKeyFromIE(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("...security receive done..." + request.getScheme());
String issue, after, before, subject;
String serialno, signalg;
int version;
String cipherSuite = "";
PublicKey pk = null;
try {
cipherSuite = (String) request
.getAttribute("javax.servlet.request.cipher_suite");
System.out.println("cipherSuite=====" + cipherSuite);
// response.setContentType("text/plain");
// FileInputStream fis = new FileInputStream("d://paramita.cer ");
PrintWriter out = response.getWriter();
if (cipherSuite != null) {
X509Certificate[] certs = (X509Certificate[]) request .getAttribute("javax.servlet.request.X509Certificate");
/* ibm http server us followings */
// X509Certificate[] certs = (X509Certificate[]) request
// .getAttribute("javax.NET.ssl.peer_certificates");

if (certs != null) {
if (certs.length > 0) {
X509Certificate t = certs[0];
pk = t.getPublicKey();
}
} else {
if ("https".equals(request.getScheme())) {
out.println("This was an HTTPS request, "
+ "but no client certificate is available");
} else {
out.println("This was not an HTTPS request, "
+ "so no client certificate is available");
}
}
}
return pk;
} catch (Exception e) {
throw new ServletException(e);
}
}
希望对你有所帮助!

热心网友 时间:2023-10-09 12:55

到底有没有传证书过来

~~~~~~~~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
和面的和是什么读音? win10 应用打不开。全都打不开。 进入win10打不开软件 win10电脑软件都打不开是什么原因win10突然软件都打不开软件是怎么回事... 软件打不开怎么办win10电脑点不开软件最简单办法 请问下,离厦门市岛内的台湾路的国联大厦最近的建设银行和农业银行... 从巴黎都市到建设银行怎么坐公交车,最快需要多久 东莞万江官桥窖离建设银行哪路车最近? 建行七支分行有那些公交车经过 佛山哪里有飞越丛林拓展 恬家有没有万能遥控器的产品?非手机APP 在网上如何查询企业征信信息? request带哪些属性 16A与10A恬家智能遥控插座区别? asp request.ServerVariables[&quot;Cert_Subject&quot;] request.ClientCertificate(&quot;Subject&quot; 恬家智能插座能当无线路由器用吗?那个WIFI中继是什么意思? 请教SSL握手过程中,为什么抓包找不到pre-master-key 恬家u棒 智能插座区别 WinHttp.SetClientCertificate 使用过程中总是提示 恬家智能遥控插座可以遥控多少电器?各位留意过没? 登录徽商银行时出现SSL server requires client certificate怎么回事 怎么把手机和恬家智能插座进行配置连接? asp request.ServerVariables[&quot;Cert_Subject&quot;] request.ClientCertificate(&quot;Subject&quot;)用法上什么区别呢 企鹅fm下架的节目怎么找 恬家智能插座能远程开关电器吗?比如在办公室开家里的灯什么的 Request对象的语法 除了空调,恬家智能遥控插座还适合什么家电? 查询企业征信,具体怎么查? 哈尔滨银行SSL server requires client certificate 恬家智能遥控插座能遥控多远距离? 查企业征信需要什么资料? 智能插座能不能放厨房用?担心着火问题。 asp中的request的对象有几种方法? 遥控精灵安卓的配件可以学习吗? 在网上交医保 有个代征单位编码怎么填? 请知道的朋友告诉我 谢谢 请用UWP中System.Net.Http的接口HttpClient,用C#写一段从GET中获取COOKI... 国家有关单位征用完了土地,不用,多年后应该属于谁呢 iPhone 6p能不能用遥控精灵遥控空调? iPhone6p能用遥控精灵吗?遥控空调的 合作医疗代征单位代码是什么 回首过去句子 关于怀念过去的句子。 iPhone6下载了一个遥控精灵软件,为什么不能使用? 关于怀念过去的句子有哪些? 关于回顾历史的好词好句有哪些? 装修的时候自来水管有必要安装前置过滤器吗?为什么? 装修的时候自来水管有必要安装前置过滤器吗?你怎么看? 水管之间要安装前置过滤器,它的作用大吗? 家用净水器接水管的那个装置叫什么 保险的派生职能是什么