2009년 9월 1일 화요일

공인인증서 변환 시 openssl의 파싱 문제

현재 만들고 있는 Credential Management Service는 Globus의 simple CA를 통해 발급한 인증서를 인식하도록 되어있다.  이 인증서는 x509 v3를 따르고 있다.
 이 서비스가 좀 더 general하고 tool로 자리잡기 위해서는 직접 발급한 인증서가 아닌 공인 인증서를 사용할 수 있어야 했다.

 대부분의 기능이 구현된 상황에서 이러한 부분을 무시할 수 없기 때문에 공인 인증서 사용을 테스트하기로 했다.

공인 인증서의 변환은 다음과 같다. ( 변환된 파일들은 pem 형식이다. )

1. 인증서 관리도구를 사용하여 공인 인증서를 내보내기 한다.
2. 내보낸 파일을 openssl을 사용하여 변환한다.
3. 이 파일을 인증서 파일과 키 파일로 분리해야 한다.
$ openssl pkcs12 -in export_file.pfx -nokeys -out usercert.pem
$ openssl pkcs12 -in export_file.pfx -nocerts -nodes -out userkey.pem
4. 분리된 파일에서 필요없는 헤더를 삭제한다.
 - BEGIN HEADER 전의 내용
5. 사용하려는 인증서의 issuer를 hash.0, hash.signing_policy 파일을 만들어야 한다.
6. der형식의 인증서로 pem 형식으로 바꾼다. 여기에서는 yessign을 사용했다.
 - CA file path: /program files/NPKI/yessign/yessign.der
$ openssl x509 -inform DER -in yessign.der -out yessign.crt
7. 변환된 인증서로 부터 해쉬값을 얻는다.
$ openssl x509 -hash -in yessign.crt
8. crt파일을 hash.0로 변경하고 hash.signing_policy 파일을 만든다.
9. signing_policy는 다른 파일을 참조하여 구성한다.
 - 중요: access_id_CA, cond_subjects

이러한 과정을 거친 후 공인인증서를 확인해본다.
$grid-proxy-init -verify -debug

이때, 다음의 error가 발생되었다.
이 error에서는 extension, numeric id 89 등의 keyword를 발견 할 수 있다. 역시 우리의 친구, google은 해결책을 알려주었다. openssl의 pasing이 제대로 되지 않는다는 것이다.

이미 비슷한 일을 하고 있는 사람들이 꽤 있었기 때문에 쉽게 알아낼 수 있었던 것인데, kldp.org는 확실히 우리나라에서는 좋은 사이트인 것 같다. 흐흐흐~
http://kldp.org/node/104403 <- 요것은 링크~

diff -ru openssl-0.9.8b/crypto/x509v3/v3_purp.c openssl-0.9.8b.new/crypto/x509v3/v3_purp.c
--- openssl-0.9.8b/crypto/x509v3/v3_purp.c 2005-04-10 01:07:10.000000000 +0900
+++ openssl-0.9.8b/crypto/x509v3/v3_purp.c 2008-06-02 17:05:48.000000000 +0900
@@ -285,7 +285,9 @@
NID_key_usage, /* 83 */
NID_subject_alt_name, /* 85 */
NID_basic_constraints, /* 87 */
+ NID_certificate_policies, /* 89 */
NID_ext_key_usage, /* 126 */
+ NID_policy_constraints, /* 401 */
NID_proxyCertInfo /* 661 */
};
이것은 중요한 부분! 위에 보면 89번이 보인다~ 쟤가 없어서 그런거다.
소스를 고치고 다시 컴파일 하면 될껄? 아직 안하고 있다.

==============================================================================================

......실패했다.. ㅠ.ㅠ 엉엉

댓글 없음:

댓글 쓰기