====== 암호화/복호화 ======
===== 개요 =====
암호화/복호화는 보안을 위하여 데이터를 암호화하거나 암호화된 데이터를 복호화하기 위해, GPKI(Government Public Key Infrastructure)를 통한 데이터의 암호화 및 복호화 기능을 제공한다.
부가적으로 GPKI를 통한 전자서명 및 전자서명 확인 기능도 제공한다.
===== 전제조건 =====
GPKI의 암복호화 기능을 사용하기 위해서는 별도로 사용하기 위해서는 행정전자서명 인증관리센터(Government Certification Management Authority)를 통해 GPKI 암복호화 모듈 및 서버인증서를 발급받아야 한다.
보다 자세한 사항은 공통컴포넌트의 [[egovframework:GPKI 인증서 로그인]] 서비스를 참조하거나 행정전자서명 인증관리센터(http://www.gpki.go.kr)를 참고한다.
===== 설명 =====
GPKI 암복호화는 서비스를 통해 데이터 암호화 및 복호화를 제공하는 기능으로 별도의 화면을 제공하지 않는다. 다만 테스트를 위한 JSP 화면만 제공된다.
==== 패키지 참조 관계 ====
암호화/복호화 패키지는 요소기술의 공통 패키지(cmm)에 대해서만 직접적인 함수적 참조 관계를 가진다.
* 패키지 간 참조 관계 : [[egovframework:com:v2:init_pkg_dependency#보안|보안 Package Dependency]]
==== 관련소스 ====
^유형^대상소스^비고^
|Controller|egovframework.com.sec.pki.web.EgovGPKITestController.java|암호화/복호화 테스트를 위한 컨트롤러 클래스|
|Service|egovframework.com.sec.pki.service.EgovGPKIService.java|암호화/복호화를 위한 서비스 인터페이스|
|ServiceImpl|egovframework.com.sec.pki.service.impl.EgovGPKIServiceImpl.java|암호화/복호화를 위한 서비스 구현 클래스|
|JSP|/WEB-INF/jsp/egovframework/com/sec/pki/EgovGpkiTest.jsp|암호화/복호화 테스트를 위한 jsp페이지|
==== 환경설정 ====
GPKI 암호화/복호화 기능을 활용하기 위하여 필요한 항목 및 그 환경 설정은 다음과 같다.
=== GPKI API 설치파일 확인 ===
먼저 GPKI 인증서 로그인 기능을 위해서는 행정전자서명 인증관리센터(http://www.gpki.go.kr)에서 시스템에 맞는 GPKI API를 신청하여 발급받아야 한다. 서버에 구성해놓은 표준보안 API는 IBM AIX용으로 WINDOWS계열이나 다른 유닉스 시스템에서 사용할 수는 없다.
== 표준 API 구성요소 ==
^구분^형태^파일명/폴더^설명^
|표준API Native모듈|라이브러리|libgpkiapi64.a|IBM AIX용 (행정용)|
|표준API Native모듈|라이브러리|libgpkiapi64_jni.a|IBM AIX용 (행정용)|
|표준API Native모듈|라이브러리|libibmldap64n.a|IBM AIX용 (민간용)|
|환경파일(conf)|환경파일|gpkiapi.conf|인증서 검증에 필요한 정보 포함|
|테스트프로그램(sample)|코드|/java|Cert.java, Cms.java, Crypto.java, Ivs.java, Main.java, Tsa.java, Util.java (소스 코드)|
|테스트프로그램(sample)|실행파일|/class|/Sample (테스트 프로그램을 돌리기 위해서 필요한 데이터)Cert.class, Cms.class, Crypto.class, Ivs.class, Main.class, Tsa.class, Util.class (테스트 프로그램)|
|표준API|jar파일|libgpkiapi_jni.jar|표준보안 API|
== 클래스, 라이브러리 경로 설정 ==
export GPKI_HOME=/product/jeus/egovProps/libgpkiapi
export CLASSPATH=$GPKI_HOME/libgpkiapi_jni.jar:$CLASSPATH
export LIBPATH=/product/jeus/egovProps/libgpkiapi/gpkiapi
export PATH=$PATH:/product/jeus/egovProps/libgpkiapi/gpkiapi
JAVA용 표준보안API (libgpkiapi_jni.jar)를 사용하기 위해서는 jar 파일이 클래스 경로에 잡혀있어야 하며, JAVA용 표준보안API에서 호출하는 JNI 파일의 경로를 잡아주어야 한다.이 때, 이 JNI 파일은 C/C++용 표준보안API와 LDAP 라이브러리와 연결되어있어 이 두 라이브러리의 경로도 잡아주어야 한다.
== 인증서 위치 (예시) ==
/product/jeus/egovProps/gpkisecureweb/certs/SVR..._env.cer
/product/jeus/egovProps/gpkisecureweb/certs/SVR..._env.key
/product/jeus/egovProps/gpkisecureweb/certs/NPKIRootCA1.der
/product/jeus/egovProps/gpkisecureweb/certs/GPKIRootCA1.der
=== 프로퍼티 파일 설정 ===
== globals.properties ==
인증서에 대한 정보를 지정하기 위해서는 globals.properties 속성 파일에 추가 속성을 설정하여야 한다.
globals.properties에 관련된 내용은 [[요소기술 프로퍼티 및 명령어 쉘스크립트]] 부분을 참조한다.
...
Globals.GPKIConfPath = /product/jeus/egovProps/conf/gpki.properties
...
== gpki.properties (예시) ==
#--------------------------
# for GPKI LDAP access
#--------------------------
gpki.ldap.ip=ldap.gcc.go.kr
#gpki.ldap.ip=10.1.7.140
gpki.ldap.port=389
gpki.ldap.basedn=ou=Group of Server,o=Government of Korea,c=kr
gpki.ldap.attribute=usercertificate;binary
#--------------------------
# 인증서 정보
# 실제 인증서 관련 파일들은 각 속성들을 조합해서 얻음
#--------------------------
gpki.certificate.path = /product/jeus/egovProps/gpkisecureweb/certs/
gpki.certificate.server = 1310123456
gpki.privatekey.password = test
대상시스템에 대한 인증서를 GPKI의 ldap을 통해 취득하며 다음과 같은 코드로 해당 서버 정보 등을 처리한다.
//--------------------------------
// LDAP 관련 정보 얻기
//--------------------------------
String serverIp = EgovProperties.getProperty(config, "gpki.ldap.ip");
String serverPort = EgovProperties.getProperty(config, "gpki.ldap.port");
String basedn = EgovProperties.getProperty(config, "gpki.ldap.basedn");
String readEntry = "cn=SVR" + code;
String attribute = EgovProperties.getProperty(config, "gpki.ldap.attribute");
...
//----------------------------------
// 설정 정보 (암호화용 인증서 정보 필요)
//----------------------------------
String path = EgovProperties.getProperty(config, "gpki.certificate.path");
String certForEnvFile = path + "/SVR" + EgovProperties.getProperty(config, "gpki.certificate.server") + "_env.cer";
String keyForEnvFile = path + "/SVR" + EgovProperties.getProperty(config, "gpki.certificate.server") + "_env.key";
String pinForEnv = EgovProperties.getProperty(config, "gpki.privatekey.password");
...
//----------------------------------
// 설정 정보 (전자서명용 인증서 정보 필요)
//----------------------------------
String path = EgovProperties.getProperty(config, "gpki.certificate.path");
String certForSignFile = path + "/SVR" + EgovProperties.getProperty(config, "gpki.certificate.server") + "_sig.cer";
String keyForSignFile = path + "/SVR" + EgovProperties.getProperty(config, "gpki.certificate.server") + "_sig.key";
String pinForSign = EgovProperties.getProperty(config, "gpki.privatekey.password");
===== 관련화면 =====
암복호화 테스트 화면은 다음과 같다.
{{:egovframework:com:sec:gpkitest.jpg|테스트화면}}
테스트는 원본에 대한 암호화 및 전자서명 처리, 결과에 대하여 복호화 및 전자서명확인 처리를 제공한다.