Database/SQL Server2011. 3. 2. 09:42

JDBC 테스트 중 sqljdbc.jar가 포함된 runnable jar 파일을 실행하면 아래와 같은 Exception을 일으키며 파일이 실행되지 않는다.

Exception in thread "main" java.lang.SecurityException: invalid SHA1 signature f
ile digest for com/microsoft/sqlserver/jdbc/SQLServerException.class
at sun.security.util.SignatureFileVerifier.verifySection(Unknown Source)

at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
at sun.security.util.SignatureFileVerifier.process(Unknown Source)
at java.util.jar.JarVerifier.processEntry(Unknown Source)
at java.util.jar.JarVerifier.update(Unknown Source)
at java.util.jar.JarFile.initializeVerifier(Unknown Source)
at java.util.jar.JarFile.getInputStream(Unknown Source)
at sun.misc.URLClassPath$JarLoader$2.getInputStream(Unknown Source)
at sun.misc.Resource.cachedInputStream(Unknown Source)
at sun.misc.Resource.getByteBuffer(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)



내 나름대로 정의한 이유인즉 sqljdbc에 포함된 class 파일에 SHA1 방식으로 암호화 맵핑이 되어 있는데 JVM에서 풀지 못하여 Exception이 발생하지 않을까 한다.

그래서 간단한 해결 방법을 찾아보자~!

1. Microsoft 홈페이지로 들어가서 sqljdbc 파일을 다운로드 받는다.(해당 링크는 2.0 버젼)
http://www.microsoft.com/downloads/ko-kr/details.aspx?displaylang=ko&FamilyID=99b21b65-e98f-4a61-b811-19912601fdc9

2. 다운로드 받은 후 설치를 하면 디렉토리 안에 2.0 버젼의 경우 sqljdbc.jar와 sqljdbc4.jar 파일이 있음을 확인 할 수 있다.

3. sqljdbc.jar 또는 sqljdbc4.jar 파일을 압축 해제 한다.

3. 압축 해제한 디렉토리에서 META-INF 폴더로 이동한다.

4. 폴더에 있는 SIGNED.SF / SIGNED.RSA 파일을 삭제한다.
단, 2005 이하 버전용 sqljdbc의 경우 zigbert.sf / zigbert.rsa 이며 동일하게 삭제 한다.

5. MANIFEST.MF 파일을 열어보면 아래와 같은 내용을 확인 할 수 있다.
아래 부분의 1, 2, 3 Line 을 제외한 나머지 Line을 모두 지운 후 다시 sqljdbc.jar 파일로 압축을 한다.

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.5.0_15-b04 (Sun Microsystems Inc.)

Name: com/microsoft/sqlserver/jdbc/SQLServerException.class
SHA1-Digest: wJmi22LxY0sGSj6Fo/b+189olOA=

.....


6. sqljdbc.jar 파일을 해당 프로젝트에 다시 추가한후 runnable jar에 포함하여 실행 가능한지 테스트 한다.

Posted by Tiwaz