package itn.let.uat.uia.web; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Map; import java.util.Random; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import org.springframework.ui.ModelMap; import com.icert.comm.secu.IcertSecuManager; import itn.let.cert.phone.service.CertPhoneService; import itn.let.cert.phone.service.MberCertPhoneVO; import itn.let.uat.uia.service.AuthCertVO; import itn.let.uss.umt.service.MberManageVO; @Component("KmcCertChecker") public class KmcCertChecker { @Resource(name = "CertPhoneService") private CertPhoneService certPhoneService; //회원가입 시 인증수단을 휴대폰 본인인증만 했을 경우 사용 public AuthCertVO authCertCheck( MberCertPhoneVO mberCertPhoneVO , HttpServletRequest request ) { //url 세팅 mberCertPhoneVO = setMberCertPhoneVO(request, mberCertPhoneVO); //kmc step 01 데이터 //reqNum은 최대 40byte 까지 사용 가능 String reqNum = getDay() + getRanNum(); //요청번호 String tr_cert = ""; String cpId = "MJOM1001"; // 회원사ID String urlCode = mberCertPhoneVO.getUrlCode(); // URL코드 String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) String date = getDay(); // 요청일시 String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 // String name = ""; // 성명 String name = mberCertPhoneVO.getName(); // 성명 String phoneNo = mberCertPhoneVO.getPhoneNo(); // 휴대폰번호 String phoneCorp = mberCertPhoneVO.getPhoneCorp(); // 이동통신사 if(phoneCorp == null) phoneCorp = ""; String birthDay = mberCertPhoneVO.getBirthDay(); // 생년월일 String gender = mberCertPhoneVO.getGender(); // 성별 if(gender == null) gender = ""; String nation = mberCertPhoneVO.getNation(); // 내외국인 구분 - 0:내국인, 1:외국인 String plusInfo = mberCertPhoneVO.getPlusInfo(); // 추가DATA정보 String extendVar = "0000000000000000"; // 확장변수 //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- String tr_url = getDomain(request) + mberCertPhoneVO.getTrUrl();// // 본인인증서비스 결과수신 POPUP URL String tr_add = "N"; // IFrame사용여부 //01. 한국모바일인증(주) 암호화 모듈 선언 IcertSecuManager seed = new IcertSecuManager(); //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) String enc_tr_cert = ""; tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; enc_tr_cert = seed.getEnc(tr_cert, ""); //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) String hmacMsg = ""; hmacMsg = seed.getMsg(enc_tr_cert); //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); AuthCertVO authCertVO = new AuthCertVO(); authCertVO.setTr_cert(tr_cert); authCertVO.setTr_url(tr_url); authCertVO.setTr_add(tr_add); return authCertVO; } private String getDomain(HttpServletRequest request) { String serverNm = request.getScheme() + "://" + request.getServerName(); if(request.getServerPort() != 80 && request.getServerPort() != 443) { serverNm += ":" + request.getServerPort(); } return serverNm; } private String getDay() { Calendar today = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String day = sdf.format(today.getTime()); return day; } private String getRanNum() { Random ran = new Random(); //랜덤 문자 길이 int numLength = 6; String randomStr = ""; for (int i = 0; i < numLength; i++) { //0 ~ 9 랜덤 숫자 생성 randomStr += ran.nextInt(10); } return randomStr; } private MberCertPhoneVO setMberCertPhoneVO( HttpServletRequest request , MberCertPhoneVO mberCertPhoneVO ) { mberCertPhoneVO.setUrl(mberCertPhoneVO.getTrUrl()); mberCertPhoneVO.setHost(getDomain(request)); MberCertPhoneVO tmpMberCertPhoneVO = new MberCertPhoneVO(); try { tmpMberCertPhoneVO = certPhoneService.selectCertUrlCode(mberCertPhoneVO); } catch (Exception e) { System.out.println(e.getMessage()); } if(tmpMberCertPhoneVO != null) { mberCertPhoneVO.setUrl(tmpMberCertPhoneVO.getUrl()); mberCertPhoneVO.setHost(tmpMberCertPhoneVO.getHost()); mberCertPhoneVO.setUrlCode(tmpMberCertPhoneVO.getUrlCode()); } return mberCertPhoneVO; } }