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 |
|||||||||||||
|
|||||||||||||
[Modify] [Delete] | [Reply] [List] |