4,513,345 th visitor since 2017.2.1 ( Today : 3912 )
Programming
No. 515
Name. swindler
Subject. Cannot find any provider supporting DES/ECB/PKCS5Padding
Main Cate. Java
Sub Cate.
Date. 2008-12-27 16:02
Hit. 7263 (211.43.206.101)
File.
여기에 대해서 쓸말이 참 많다.

한 4-5시간은 구른듯...

저 메세지는 말 그대로
provider를 찾지 못하기 때문에 생기는 문제이다.
대부분 sunjce_provider를 사용하는데,

먼저 환경이 동일한 다른 pc에서는 작동을 하는 것이다.
특히 내가 문제가 되는 환경은 eclipse 3.2.2 + jdk 1.4.2 + tomcat 5 이다.

근데 문제는 eclipse안에서 일반 application으로는 돌아가는 것이다.

여러가지 환경변수를 찾아보던중 아래와같이 모든 provider를 찾아봤다.

Provider p3[] = Security.getProviders();
Provider p2 = null;

for (int i = 0; i < p3.length; i++) {
//out.println("prov : "+p3[i]);

if(p3[i].toString().indexOf("SunJCE")!=-1){
     System.out.println("prov : "+p3[i]);
     p2 = p3[i];
}

//for (Enumeration e = p3[i].keys(); e.hasMoreElements();)
// out.println(" : " + e.nextElement()+"<br>");
}


문제는 웹환경과 application에서의 provider가 전부 일치하는데서 복잡해지기 시작했다.

결국 저기서 찾아낸 jce provider를 강제로 지정해서 사용해보기에 이르렀다.
여기까지도 좀 굴렀다.


그랬더니 이제 시즌2에 접어들었다.
새로운 에러 메세지가 출몰한 것이다.
사실 진정한 에러는 여기서 나기 시작한 것이다.

The provider SunJCE may not be signed by a trusted party..

그렇다. 실제 에러메세지는 이것이다.
provider 다 뒤져서 강제 지정해주지 않았더라면 못 찾을뻔 했다.

결국 초기 에러메세지가 provider를 못 찾는다는 것이었으나,
실제로는 못 찾은게 아니라 찾긴 찾았으나 sign이 되어 있지 않아 못 쓴다는 얘기이다.

구글링 + java.sun.com 를 뒤져보니
이클립스 버그라는 엄청난 얘기가 나오기 시작한다.
(사실 예전얘기이긴 하지만 jdk old 버전에서 jce 자체가 미국과 캐나다 이외에 사용을 못하네 어쩌네 하는 얘기들도 엄청 검색이 된다.)



하여튼 요약해보면 이렇다.
jce framework의 버그로 인하여 bootclasspath에 sunjce_provider가 추가된 경우
에러가 발생한다는 것이다.
(이클립스에서는 jce framework 버그라고 하고 있는데 eclipse 아닌 환경에서 테스트는 안 해 봤다.)


실제로 환경변수 전체를 찍어보니
sun.boot.class.path에 sunjce_provider가 있는것이 발견된다.

Properties p = System.getProperties();
Enumeration e2 = p.propertyNames();

while(e2.hasMoreElements()){

String pname = (String)e2.nextElement();
out.println(pname+" : "+p.getProperty(pname)+"<br>");

}


자. 이제 이것만 빼주면 되는데,
사실 여기서 제일 많이 굴렀다.

이게 바로 툴의 문제점이다.
어케 굴러가는지 알수가 없고,

여기저기 옵션을 다 뒤지고 파일 전부 다 뒤지고 별 생쇼를 다 해도 사라지지 않는다.

JRE Environment에서도 삭제했으나 실제 적용이 안 된다. 이것도 이클립스 문제로 보여진다.

결국 eclipse -> Preference -> Tomcat -> JVM Settings 안에 있는
Boot classpath에 전부 수동지정하기로 했다.
(지정을 안 하면 기본값을 사용하게 된다.)

원래 있던 값이 아래와 같은데,

sun.boot.class.path :
D:\server\Tomcat 5.0\common\endorsed\xercesImpl.jar;
D:\server\Tomcat 5.0\common\endorsed\xml-apis.jar;

D:\server\j2sdk1.4.2_13\jre\lib\rt.jar;
D:\server\j2sdk1.4.2_13\jre\lib\sunrsasign.jar;

D:\server\j2sdk1.4.2_13\jre\lib\jsse.jar;
D:\server\j2sdk1.4.2_13\jre\lib\jce.jar;

D:\server\j2sdk1.4.2_13\jre\lib\charsets.jar
;D:\server\j2sdk1.4.2_13\jre\lib\ext\dnsns.jar;

D:\server\j2sdk1.4.2_13\jre\lib\ext\ldapsec.jar;
D:\server\j2sdk1.4.2_13\jre\lib\ext\localedata.jar;


D:\server\j2sdk1.4.2_13\jre\lib\ext\sunjce_provider.jar


여기서 마지막 sunjce_provider를 제외하고 수동으로 일일이 다 지정했더니
결국 해결이 되었다 ㅋㅋ

어제 2시간,오늘 2시간 이짓만 한듯 ㅠㅠ

툴만 아니었어도 더 빨리 해결할수 있었을텐데..


[바로가기 링크] : http://coolx.net/cboard/develop/515



박병웅 페이지 안떠서 찾아왔는데 실장님 홈페이지네요 ㅋㅋㅋ 2009-02-18
swindler 역시 홈피에 title, meta tag 좀 손봐줬으니 검색이 잘 되는듯 ㅋㅋ 2009-02-20
heykyul 아 이글이 도움이 많이 되었습니다 ㅠㅠ 좋은 정보 감사드립니다!!! 해결되니까 속시원하네여 ㅠㅠ 2012-01-12
Name
Password
Comment
Copyright © 1999-2017, swindler. All rights reserved. 367,611 visitor ( 1999.1.8-2004.5.26 ), 2,405,771 ( -2017.01.31)

  2HLAB   2HLAB_Blog   RedToolBox   Omil   Omil_Blog