123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- <%@ page language="java" import="java.io.*,java.util.*,crosscert.*" %>
- <%@ page contentType = "text/html; charset=euc-kr" %>
- <%
- /*-------------------------시작----------------------------*/
- request.setCharacterEncoding("euc-kr");
- response.setDateHeader("Expires",0);
- response.setHeader("Prama","no-cache");
- if(request.getProtocol().equals("HTTP/1.1"))
- {
- response.setHeader("Cache-Control","no-cache");
- }
- /*------------------------- 끝----------------------------*/
-
- String signeddata = request.getParameter("signedText"); // 서명된 값
- String getR = request.getParameter("rvalue"); // 사용자 인증서 R값
- String ssn = request.getParameter("ssn"); //DB에서 검색한 사업자 번호
-
- int nRet;
- boolean boolCertChk = true;
- String ErrMsg = "";
- String ErrCode = "";
-
-
- crosscert.Base64 CBase64 = new crosscert.Base64();
- nRet = CBase64.Decode(signeddata.getBytes(), signeddata.getBytes().length);
-
- if(nRet==0)
- {
-
- Verifier CVerifier = new Verifier();
- nRet=CVerifier.VerSignedData(CBase64.contentbuf, CBase64.contentlen);
- if(nRet==0)
- {
- String sOrgData = new String(CVerifier.contentbuf);
- out.println("전자서명 검증 결과 : 성공<br>");
- out.println("원문 : " + sOrgData + "<br>");
- //인증서 정보 추출 결과
- Certificate CCertificate = new Certificate();
- nRet=CCertificate.ExtractCertInfo(CVerifier.certbuf, CVerifier.certlen);
- if(nRet==0)
- {
- out.println("인증서 정보 추출 결과: 성공 <br>");
- out.println("인증서 DN : " + CCertificate.subject +"<br>");
- out.println("==============================================<br>");
- out.println("subject : " + CCertificate.subject +"<br>");
- out.println("from : " + CCertificate.from +"<br>");
- out.println("to : " + CCertificate.to +"<br>");
- out.println("signatureAlgId : " + CCertificate.signatureAlgId +"<br>");
- out.println("pubkey : " + CCertificate.pubkey +"<br>");
- out.println("signature : " + CCertificate.signature +"<br>");
- out.println("issuerAltName : " + CCertificate.issuerAltName +"<br>");
- out.println("subjectAltName : " + CCertificate.subjectAltName +"<br>");
- out.println("keyusage : " + CCertificate.keyusage +"<br>");
- out.println("policy : " + CCertificate.policy +"<br>");
- out.println("basicConstraint : " + CCertificate.basicConstraint +"<br>");
- out.println("policyConstraint : " + CCertificate.policyConstraint +"<br>");
- out.println("distributionPoint : " + CCertificate.distributionPoint +"<br>");
- out.println("authorityKeyId : " + CCertificate.authorityKeyId +"<br>");
- out.println("subjectKeyId : " + CCertificate.subjectKeyId +"<br>");
- out.println("==============================================<br>");
- String policies = "";
-
- // 개인상호연동용(범용) //
- policies +="1.2.410.200004.5.2.1.2" + "|"; // 한국정보인증 개인
- policies +="1.2.410.200004.5.1.1.5" + "|"; // 한국증권전산 개인
- policies +="1.2.410.200005.1.1.1" + "|"; // 금융결제원 개인
- policies +="1.2.410.200004.5.4.1.1" + "|"; // 한국전자인증 개인
- policies +="1.2.410.200012.1.1.1" + "|"; // 한국무역정보통신 개인
- policies +="1.2.410.200004.5.5.1.1" + "|"; // 이니텍 개인
- // 법인상호연동용(범용)
- policies +="1.2.410.200004.5.2.1.1" + "|"; // 한국정보인증 법인
- policies +="1.2.410.200004.5.1.1.7" + "|"; // 한국증권전산 법인, 단체, 개인사업자
- policies +="1.2.410.200005.1.1.5" + "|"; // 금융결제원 법인, 임의단체, 개인사업자
- policies +="1.2.410.200004.5.4.1.2" + "|"; // 한국전자인증 법인, 단체, 개인사업자
- policies +="1.2.410.200012.1.1.3" + "|"; // 한국무역정보통신 법인
- policies +="1.2.410.200004.5.5.1.2" + "|"; // 이니텍 법인
-
- // 개인 용도제한용 인증서정책(OID) 용도 공인인증기관
- policies += "1.2.410.200004.5.4.1.101|"; // 은행거래용/보험용 한국전자인증
- policies += "1.2.410.200004.5.4.1.102|"; // 증권거래용 한국전자인증
- policies += "1.2.410.200004.5.4.1.103|"; // 신용카드용 한국전자인증
- policies += "1.2.410.200004.5.4.1.104|"; // 전자민원용 한국전자인증
- policies += "1.2.410.200004.5.2.1.7.1|"; // 은행거래용/보험용 한국정보인증
- policies += "1.2.410.200004.5.2.1.7.2|"; // 증권거래용/보험용 한국정보인증
- policies += "1.2.410.200004.5.2.1.7.3|"; // 신용카드용 한국정보인증
- policies += "1.2.410.200004.5.1.1.9|"; // 증권거래용/보험용 한국증전산
- policies += "1.2.410.200004.5.1.1.9.2|"; // 신용카드용 한국증전산
- policies += "1.2.410.200005.1.1.4|"; // 은행거래용/보험용 금융결제원
- policies += "1.2.410.200005.1.1.6.2|"; // 신용카드용 금융결제원
- policies += "1.2.410.200012.1.1.101|"; // 은행거래용/보험용 한국무역정보통신
- policies += "1.2.410.200012.1.1.103|"; // 증권거래용/보험용 한국무역정보통신
- policies += "1.2.410.200012.1.1.105|"; // 신용카드용 한국무역정보통신
- // 인증서 검증
- nRet=CCertificate.ValidateCert(CVerifier.certbuf, CVerifier.certlen, policies, 1);
- if(nRet==0)
- {
- out.println("인증서 검증 결과 : 성공<br>") ;
-
- // 식별번호 검증 DB에 저장된 주민/사업자번호와 getR 값을 통한 신원확인
- nRet=CCertificate.VerifyVID(CVerifier.certbuf, CVerifier.certlen, getR.getBytes(), getR.length(), ssn);
- if(nRet==0)
- {
- out.println("식별번호 검증 결과 : 성공<br>") ;
- /*
-
- 인증서 로직 종료
- 사용자 DN DB에 저장 : CCertificate.subject
- 사용자 인증서 주민/사업자번호 : ssn
- */
- }
- else
- {
- boolCertChk = false;
- out.println("식별번호 검증 결과 : 실패<br>") ;
- ErrMsg = "식별번호 검증 실패 [ 에러내용 : " + CCertificate.errmessage + " ]";
- ErrCode = "에러코드 [ " + CCertificate.errcode + " ]";
- out.println("인증서 식별번호 검증 실패");
- }
- }
- else
- {
- boolCertChk = false;
- ErrMsg = "인증서 검증 실패 [ 에러내용 : " + CCertificate.errmessage + " ]";
- ErrCode = "에러코드 [ " + CCertificate.errcode + " ]";
- }// 인증서만 검증if문 끝
-
- }
- else
- {
- boolCertChk = false;
- ErrMsg = "인증서 추출 실패 [ 에러내용 : " + CCertificate.errmessage + " ]";
- ErrCode = "에러코드 [ " + CCertificate.errcode + " ]";
- }
- }//
- else
- {
- boolCertChk = false;
- ErrMsg = "전자서명 검증 결과 실패 [ 에러내용 : " + CVerifier.errmessage + " ]";
- ErrCode = "에러코드 [ " + CVerifier.errcode + " ]";
- }
- }//
- else
- {
- boolCertChk = false;
- ErrMsg = "서명값 Base64 Decode 결과 실패 [ 에러내용 : " + CBase64.errmessage + " ]";
- ErrCode = "에러코드 [ " + CBase64.errcode + " ]";
- } //서명값 Base64 Decode If문 끝...
- if (boolCertChk == false)
- {
- %>
- <SCRIPT LANGUAGE="JavaScript">
- <!--
- alert("<%=ErrMsg%>\n\n<%=ErrCode%>");
- alert("전자서명을 다시 하여 주십시오");
- //-->
- </SCRIPT>
- <%
- }
- else
- {
- out.print("인증서 최종검증 성공<br>");
- out.print("시스템 이용하기");
- }
- %>
|