问题描述
小弟是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 编辑