verifyGetR.jsp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <%@ page language="java" import="java.io.*,java.util.*,crosscert.*" %>
  2. <%@ page contentType = "text/html; charset=euc-kr" %>
  3. <%
  4. /*-------------------------시작----------------------------*/
  5. request.setCharacterEncoding("euc-kr");
  6. response.setDateHeader("Expires",0);
  7. response.setHeader("Prama","no-cache");
  8. if(request.getProtocol().equals("HTTP/1.1"))
  9. {
  10. response.setHeader("Cache-Control","no-cache");
  11. }
  12. /*------------------------- 끝----------------------------*/
  13. String signeddata = request.getParameter("signedText"); // 서명된 값
  14. String getR = request.getParameter("rvalue"); // 사용자 인증서 R값
  15. String ssn = request.getParameter("ssn"); //DB에서 검색한 사업자 번호
  16. int nRet;
  17. boolean boolCertChk = true;
  18. String ErrMsg = "";
  19. String ErrCode = "";
  20. crosscert.Base64 CBase64 = new crosscert.Base64();
  21. nRet = CBase64.Decode(signeddata.getBytes(), signeddata.getBytes().length);
  22. if(nRet==0)
  23. {
  24. Verifier CVerifier = new Verifier();
  25. nRet=CVerifier.VerSignedData(CBase64.contentbuf, CBase64.contentlen);
  26. if(nRet==0)
  27. {
  28. String sOrgData = new String(CVerifier.contentbuf);
  29. out.println("전자서명 검증 결과 : 성공<br>");
  30. out.println("원문 : " + sOrgData + "<br>");
  31. //인증서 정보 추출 결과
  32. Certificate CCertificate = new Certificate();
  33. nRet=CCertificate.ExtractCertInfo(CVerifier.certbuf, CVerifier.certlen);
  34. if(nRet==0)
  35. {
  36. out.println("인증서 정보 추출 결과: 성공 <br>");
  37. out.println("인증서 DN : " + CCertificate.subject +"<br>");
  38. out.println("==============================================<br>");
  39. out.println("subject : " + CCertificate.subject +"<br>");
  40. out.println("from : " + CCertificate.from +"<br>");
  41. out.println("to : " + CCertificate.to +"<br>");
  42. out.println("signatureAlgId : " + CCertificate.signatureAlgId +"<br>");
  43. out.println("pubkey : " + CCertificate.pubkey +"<br>");
  44. out.println("signature : " + CCertificate.signature +"<br>");
  45. out.println("issuerAltName : " + CCertificate.issuerAltName +"<br>");
  46. out.println("subjectAltName : " + CCertificate.subjectAltName +"<br>");
  47. out.println("keyusage : " + CCertificate.keyusage +"<br>");
  48. out.println("policy : " + CCertificate.policy +"<br>");
  49. out.println("basicConstraint : " + CCertificate.basicConstraint +"<br>");
  50. out.println("policyConstraint : " + CCertificate.policyConstraint +"<br>");
  51. out.println("distributionPoint : " + CCertificate.distributionPoint +"<br>");
  52. out.println("authorityKeyId : " + CCertificate.authorityKeyId +"<br>");
  53. out.println("subjectKeyId : " + CCertificate.subjectKeyId +"<br>");
  54. out.println("==============================================<br>");
  55. String policies = "";
  56. // 개인상호연동용(범용) //
  57. policies +="1.2.410.200004.5.2.1.2" + "|"; // 한국정보인증 개인
  58. policies +="1.2.410.200004.5.1.1.5" + "|"; // 한국증권전산 개인
  59. policies +="1.2.410.200005.1.1.1" + "|"; // 금융결제원 개인
  60. policies +="1.2.410.200004.5.4.1.1" + "|"; // 한국전자인증 개인
  61. policies +="1.2.410.200012.1.1.1" + "|"; // 한국무역정보통신 개인
  62. policies +="1.2.410.200004.5.5.1.1" + "|"; // 이니텍 개인
  63. // 법인상호연동용(범용)
  64. policies +="1.2.410.200004.5.2.1.1" + "|"; // 한국정보인증 법인
  65. policies +="1.2.410.200004.5.1.1.7" + "|"; // 한국증권전산 법인, 단체, 개인사업자
  66. policies +="1.2.410.200005.1.1.5" + "|"; // 금융결제원 법인, 임의단체, 개인사업자
  67. policies +="1.2.410.200004.5.4.1.2" + "|"; // 한국전자인증 법인, 단체, 개인사업자
  68. policies +="1.2.410.200012.1.1.3" + "|"; // 한국무역정보통신 법인
  69. policies +="1.2.410.200004.5.5.1.2" + "|"; // 이니텍 법인
  70. // 개인 용도제한용 인증서정책(OID) 용도 공인인증기관
  71. policies += "1.2.410.200004.5.4.1.101|"; // 은행거래용/보험용 한국전자인증
  72. policies += "1.2.410.200004.5.4.1.102|"; // 증권거래용 한국전자인증
  73. policies += "1.2.410.200004.5.4.1.103|"; // 신용카드용 한국전자인증
  74. policies += "1.2.410.200004.5.4.1.104|"; // 전자민원용 한국전자인증
  75. policies += "1.2.410.200004.5.2.1.7.1|"; // 은행거래용/보험용 한국정보인증
  76. policies += "1.2.410.200004.5.2.1.7.2|"; // 증권거래용/보험용 한국정보인증
  77. policies += "1.2.410.200004.5.2.1.7.3|"; // 신용카드용 한국정보인증
  78. policies += "1.2.410.200004.5.1.1.9|"; // 증권거래용/보험용 한국증전산
  79. policies += "1.2.410.200004.5.1.1.9.2|"; // 신용카드용 한국증전산
  80. policies += "1.2.410.200005.1.1.4|"; // 은행거래용/보험용 금융결제원
  81. policies += "1.2.410.200005.1.1.6.2|"; // 신용카드용 금융결제원
  82. policies += "1.2.410.200012.1.1.101|"; // 은행거래용/보험용 한국무역정보통신
  83. policies += "1.2.410.200012.1.1.103|"; // 증권거래용/보험용 한국무역정보통신
  84. policies += "1.2.410.200012.1.1.105|"; // 신용카드용 한국무역정보통신
  85. // 인증서 검증
  86. nRet=CCertificate.ValidateCert(CVerifier.certbuf, CVerifier.certlen, policies, 1);
  87. if(nRet==0)
  88. {
  89. out.println("인증서 검증 결과 : 성공<br>") ;
  90. // 식별번호 검증 DB에 저장된 주민/사업자번호와 getR 값을 통한 신원확인
  91. nRet=CCertificate.VerifyVID(CVerifier.certbuf, CVerifier.certlen, getR.getBytes(), getR.length(), ssn);
  92. if(nRet==0)
  93. {
  94. out.println("식별번호 검증 결과 : 성공<br>") ;
  95. /*
  96. 인증서 로직 종료
  97. 사용자 DN DB에 저장 : CCertificate.subject
  98. 사용자 인증서 주민/사업자번호 : ssn
  99. */
  100. }
  101. else
  102. {
  103. boolCertChk = false;
  104. out.println("식별번호 검증 결과 : 실패<br>") ;
  105. ErrMsg = "식별번호 검증 실패 [ 에러내용 : " + CCertificate.errmessage + " ]";
  106. ErrCode = "에러코드 [ " + CCertificate.errcode + " ]";
  107. out.println("인증서 식별번호 검증 실패");
  108. }
  109. }
  110. else
  111. {
  112. boolCertChk = false;
  113. ErrMsg = "인증서 검증 실패 [ 에러내용 : " + CCertificate.errmessage + " ]";
  114. ErrCode = "에러코드 [ " + CCertificate.errcode + " ]";
  115. }// 인증서만 검증if문 끝
  116. }
  117. else
  118. {
  119. boolCertChk = false;
  120. ErrMsg = "인증서 추출 실패 [ 에러내용 : " + CCertificate.errmessage + " ]";
  121. ErrCode = "에러코드 [ " + CCertificate.errcode + " ]";
  122. }
  123. }//
  124. else
  125. {
  126. boolCertChk = false;
  127. ErrMsg = "전자서명 검증 결과 실패 [ 에러내용 : " + CVerifier.errmessage + " ]";
  128. ErrCode = "에러코드 [ " + CVerifier.errcode + " ]";
  129. }
  130. }//
  131. else
  132. {
  133. boolCertChk = false;
  134. ErrMsg = "서명값 Base64 Decode 결과 실패 [ 에러내용 : " + CBase64.errmessage + " ]";
  135. ErrCode = "에러코드 [ " + CBase64.errcode + " ]";
  136. } //서명값 Base64 Decode If문 끝...
  137. if (boolCertChk == false)
  138. {
  139. %>
  140. <SCRIPT LANGUAGE="JavaScript">
  141. <!--
  142. alert("<%=ErrMsg%>\n\n<%=ErrCode%>");
  143. alert("전자서명을 다시 하여 주십시오");
  144. //-->
  145. </SCRIPT>
  146. <%
  147. }
  148. else
  149. {
  150. out.print("인증서 최종검증 성공<br>");
  151. out.print("시스템 이용하기");
  152. }
  153. %>