求助!!!!!(从客户端浏览器中获取BASE64证书属性)

问题描述

小弟是JAVA初学者,对JAVA是一知半解的现在手头上写了一段代码,想从客户端浏览器出获取客户端的证书信息,并加以赋值输出,其中客户端证书的DN字段中有中文,在程序中如何转码的问题也一直困扰着我(需转成GBK),想看看哪位高手能够给我一个正解,万分感激!importcom.asce.TMOSServlet.TMOSHttpServletRequest;importcom.asce.TMOSServlet.TMOSHttpServletResponse;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.*;importjava.io.UnsupportedEncodingException;importjava.security.cert.CertificateFactory;importjava.security.cert.X509Certificate;importjavax.servlet.http.*;importorg.bouncycastle.asn1.*;importorg.bouncycastle.asn1.x509.*;publicclassabc2extendsHttpServlet{privatestaticfinallongserialVersionUID=1L;publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{TMOSHttpServletRequesttmosreq=(TMOSHttpServletRequest)request;TMOSHttpServletResponsetmosres=(TMOSHttpServletResponse)response;try{Stringclientcert=request.getHeader("SSLClientCert");//StringBuilderclient1=newStringBuilder("-----BEGINCERTIFICATE-----").append(clientcert).append("-----ENDCERTIFICATE-----");//client=client1.toString();if(clientcert!=null){InputStreaminStream=newByteArrayInputStream(client.getBytes());CertificateFactorycf=CertificateFactory.getInstance("X.509");X509CertificatecerCert=(X509Certificate)cf.generateCertificate(inStream);//inStream.close();buf=cerCert.getEncoded();ByteArrayInputStreambIn=newByteArrayInputStream(buf);DERInputStreamdIn=newDERInputStream(bIn);ASN1Sequenceseq=(ASN1Sequence)dIn.readObject();X509CertificateStructurecert=newX509CertificateStructure(seq);//获取客户端证书序列号KOAL_CERT_SN=cert.getSerialNumber().getValue().toString(10);System.out.println(KOAL_CERT_SN);//获取客户端证书起始时间Stringt1=cert.getStartDate().getTime();NOT_BEFORE=t1.substring(0,14);intend=NOT_BEFORE.length();StringBuilderBEFORE=newStringBuilder(NOT_BEFORE);while(end>4){BEFORE.insert(end-2,'-');end-=2;KOAL_NOT_BEFORE=BEFORE.toString();}System.out.println(KOAL_NOT_BEFORE);//获取客户端证书废止时间Stringt2=cert.getEndDate().getTime();System.out.println(t2);NOT_AFTER=t2.substring(0,14);intlast=NOT_AFTER.length();StringBuilderAFTER=newStringBuilder(NOT_AFTER);while(last>4){AFTER.insert(last-2,'-');last-=2;KOAL_NOT_AFTER=AFTER.toString();}System.out.println(KOAL_NOT_AFTER);////获取客户端证书DN内容StringCERT_DN=cert.getSubject().toString();Strings=newString(CERT_DN);Stringa[]=s.split(",");KOAL_CERT_CN=a[0].substring(3);KOAL_CERT_G=a[1].substring(10);KOAL_CERT_ALIAS=a[2].substring(8);KOAL_CERT_C=a[3].substring(2);TelephoneNumber=a[4].substring(16);System.out.println(KOAL_CERT_CN);System.out.println(KOAL_CERT_G);System.out.println(KOAL_CERT_ALIAS);System.out.println(KOAL_CERT_C);System.out.println(TelephoneNumber);System.out.println(CERT_DN);//重新设置DN字符串StringDN=CERT_DN.replaceAll(",","/");StringBufferDN1=newStringBuffer(DN);Stringf="/";DN1.insert(0,f);KOAL_CERT_DN=DN1.toString();System.out.println(KOAL_CERT_DN);//KOAL_CERT_DN字段内容转码BKG//获取客户端证书颁发者信息CERT_ISSUER=cert.getIssuer().toString();System.out.println(CERT_ISSUER);Stringz=newString(CERT_ISSUER);Stringb[]=z.split(",");CERT_ISSUER_CN=b[0].substring(3);CERT_ISSUER_O=b[1].substring(2);System.out.println(CERT_ISSUER_CN);System.out.println(CERT_ISSUER_O);//获取客户端源地址StringKOAL_CLIENT_IP=request.getHeader("x-forwarded-for");if(KOAL_CLIENT_IP==null||KOAL_CLIENT_IP.length()==0||"unknown".equalsIgnoreCase(KOAL_CLIENT_IP))KOAL_CLIENT_IP=request.getHeader("Proxy-Client-IP");if(KOAL_CLIENT_IP==null||KOAL_CLIENT_IP.length()==0||"unknown".equalsIgnoreCase(KOAL_CLIENT_IP))KOAL_CLIENT_IP=request.getHeader("WL-Proxy-Client-IP");if(KOAL_CLIENT_IP==null||KOAL_CLIENT_IP.length()==0||"unknown".equalsIgnoreCase(KOAL_CLIENT_IP))KOAL_CLIENT_IP=request.getRemoteAddr();//将获取到的证书信息插入都Cookie中送往后端Cookiecookie1=newCookie("CERT_ISSUER_O=",CERT_ISSUER_O);Cookiecookie2=newCookie("KOAL_NOT_BEFORE=",KOAL_NOT_BEFORE);Cookiecookie3=newCookie("KOAL_NOT_AFTER=",KOAL_NOT_AFTER);Cookiecookie4=newCookie("KOAL_CERT_DN=",KOAL_CERT_DN);Cookiecookie5=newCookie("TelephoneNumber=",TelephoneNumber);Cookiecookie6=newCookie("KOAL_CERT_C=",KOAL_CERT_C);Cookiecookie7=newCookie("KOAL_CERT_ALIAS=",KOAL_CERT_ALIAS);Cookiecookie8=newCookie("KOAL_CERT_GN=",KOAL_CERT_G);Cookiecookie9=newCookie("KOAL_CERT_CN=",KOAL_CERT_CN);Cookiecookie10=newCookie("KOAL_CERT_SN=",KOAL_CERT_SN);Cookiecookie11=newCookie("KOAL_CERT_SN=",KOAL_CLIENT_IP);tmosres.addCookie(cookie1);tmosres.addCookie(cookie2);tmosres.addCookie(cookie3);tmosres.addCookie(cookie4);tmosres.addCookie(cookie5);tmosres.addCookie(cookie6);tmosres.addCookie(cookie7);tmosres.addCookie(cookie8);tmosres.addCookie(cookie9);tmosres.addCookie(cookie10);tmosres.addCookie(cookie11);}}catch(Exceptione){e.printStackTrace();return;}}publicstaticStringCN="";publicstaticStringOU="";publicstaticStringO="";publicstaticStringKOAL_CERT_SN="";publicstaticStringKOAL_CERT_CN="";publicstaticStringKOAL_CERT_C="";publicstaticStringKOAL_CERT_G="";publicstaticStringKOAL_CERT_ALIAS="";publicstaticStringKOAL_CERT_ISSUER_CN="";publicstaticStringKOAL_CERT_ISSUER_O="";publicstaticStringCERT_SN="";publicstaticStringCERT_CN="";publicstaticStringCERT_C="";publicstaticStringCERT_G="";publicstaticStringCERT_ISSUER="";publicstaticStringCERT_ISSUER_CN="";publicstaticStringCERT_ISSUER_O="";publicstaticStringCERT_DN="";publicstaticStringKOAL_CERT_DN="";publicstaticStringDN="";publicstaticStringDN1="";publicstaticStringTelephoneNumber="";publicstaticStringKOAL_NOT_BEFORE="";publicstaticStringNOT_BEFORE="";publicstaticStringBEFORE="";publicstaticStringKOAL_NOT_AFTER="";publicstaticStringAFTER="";publicstaticStringNOT_AFTER="";publicstaticStringclient="";bytebuf[];}

解决方案

本帖最后由 julian9595 于 2009-08-18 16:51:56 编辑

时间: 2022-11-09

求助!!!!!(从客户端浏览器中获取BASE64证书属性)的相关文章

Win7怎么删除IE浏览器中的错误证书?

  Win7怎么删除IE浏览器中的错误证书?IE浏览器是很多小伙伴日常使用最多的浏览器了,不过在Win7系统内如果要访问一些站点会提醒用户需要安装安全证书,但是下载后的安全证书又会提示错误,因此需要先删掉其他证书,在重新安装.那么要如何删除掉那些错误的证书呢?下面就让小编来告诉你. 1.点击电脑桌面左下角的"开始"按钮,找到"运行",在打开列表中输入"mmc",单击确定后进入控制台. 进入控制台 2.在"控制台"的窗口中单击&

如何在Sql2008中获取表字段属性和注释

  如何在Sql2008中获取表字段属性和注释? select b.[value] from sys.columns a left join sys.extended_properties b on a.object_id=b.major_id and a.column_id=b.minor_id inner join sysobjects c on a.column_id=c.id and a.[name]='列名' and c.[name]='表名' SELECT 表名=case when

怎么从另一个js中获取里面的属性值

问题描述 怎么从另一个js中获取里面的属性值,请高手指教.集 解决方案 解决方案二:说下你用的场景啊,如果是同一个页面的话,定义出来的全局变量都是可以共享的,当然,先加载的js先执行有啥疑问继续回帖吧解决方案三:收说一下情景~~~解决方案四:观注.....解决方案五:楼主能够将问题说具体些,太抽象了...解决方案六:document.getElementbyid("");document.getElementbyName("");

在浏览器中获取当前执行的脚本文件名的代码_javascript技巧

背景 同事提了一个问题,如何在浏览器中动态插入的 JavaScript 文件中,获取当前文件名? 除了服务器输出一个文件名外,在脚本中获取应该只有下面三种做法. 解法A 普遍的解法,只能用于页面静态scripts标签引入或者单个动态加载. 复制代码 代码如下: var scripts = document.getElementsByTagName('script'); var filename = scripts[scripts.length -1].src; 动态插入多个脚本标签的情况: 复制

Android中获取sha1证书指纹数据的方法_Android

前言 在Android开发中,经常要获取sha1证书指纹.例如:在嵌入高德地图的时候,就需要使用这个东东.这个东西在Eclipse中可以直接获取到,但是在Android Studio中,并没有直接提供,需要通过别的手段手动获取. 我们可以使用Java 的一个工具:keytool 来获取这个值.keytool 是jdk提供的一个工具,只要你的java环境变量配置的ok. 直接在命令行输入keytool就可以执行这个命令. 获取sha1的命令为: keytool -list -keystore *.

Android Studio中获取sha1证书指纹数据的方法

高德地图开发申请KEY的时候需要开发者提供SHA1证书指纹数据,在eclipse很容易就找到了,但是Android Studio很久也没找到,只能使用在网上看到的方法了,在Android Studio中的Terminal中使用keytool获取了,具体如下图所示(输入密钥库口令--测试的默认口令为:android,如果使用自己提供的keystore,就是自己的密码了):

求助:关于浏览器中JavaScript非验证身份使用权限问题

问题描述 我想用Cognito暂时获得AWS认证来访问一些资源.找了一下相关的信息,发现虽然官方支持JavaScript,但可能因为主要的用例是移动设备,信息并不完整,尽管这样我还是觉得我找到了正确的开始程序,如下:首先:创建Cognito身份池(包括创建身份验证和非验证角色)然后:运行AWS.CognitoIdentityCredentials.get()第一步失败了,是因为CognitoAWS端点没有响应CORSheaders.这对于移动/桌面app不是问题,但对于浏览器是个障碍,怎么解决这

用C#从IE浏览器中获取HTML文档

  Create a console application in any version of Visual Studio using .Net version 1|2|3|3.5. Add two Com object references which will allow us to manipulate IE. 用 Visual Studio 的任意版本建立一个控制台程序. 添加2个COM对象引用用来操作IE 文档-c"> Note the code sample below do

JavaScript中获取未知对象属性的代码_javascript技巧

这两天尝试写个AjaxToolkit:AsyncFileUpload的Demo, 它有个OnClientUploadComplete属性可以关联客户端JS, 于是可以写OnClientUploadComplete="uploadComplete", 然后定义uploadComplete方法: 复制代码 代码如下: function uploadComplete(sender, e) { //Do something here... } 但是, 怎么从e获得上传文件的信息呢? 除了看Aj