2016-07-09 1 views
0

최근 Tomcat6을 Apache와 함께 사용하고 dev 환경을 설정하려고 시도하는 오래된 Java 코드베이스를 계승했습니다. 프론트 엔드 JSP 로그온 화면을 통해 DriverManager.getConnection()을 호출 할 때 ORA-12649 코드 ("알 수없는 암호화 또는 데이터 무결성 알고리즘")가 표시됩니다.tomcat6 sqlnet 암호화 실패

이 이해하지 않는 여러 가지이다 : 오라클 11gR2를 실행하는 대상 DB에 (slqnet.ora의 설정을 통해)

우리가 구현 한
  1. 암호화, 그리고 생산 버전과 함께 작동 동일한 코드베이스의; 또한 들어오는 sqldeveloper 연결과 함께 작동합니다. 기본적으로 db 측의 암호화 구현에는 아무런 문제가 없었습니다.
  2. 개발 코드베이스가 프로덕션 코드베이스와 정확히 동일합니다 (현재 시점에서)
  3. 개발 tomcat6 설치가 프로덕션과 동일한 버전입니다 설치
  4. 내가 암호화를 구현하지 않는 다른 DB에있는 커넥터를 가리키는 경우는 승인은 Oracle 설명서 및 포럼, tomcat6 문서 (특히 복잡한 방법을 통해 폭 넓은 독서 후 유효한 사용자 이름과 암호

에 성공 CLASSPATH 변수를 처리합니다.) 오우 메가 비어 있습니다.

내 직감은 tomcat 설치 lib 폴더에 ojdbc6.jar 파일이 있어도 dev 시스템에 tomcat6 설치가 올바른 jar 파일을 참조하지 않는다는 점입니다. 오라클에 따르면 ojdbc6.jar를 사용 가능하게하는 것은 톰 클라이언트에서 이러한 유형의 암호화를 구현할 때만 작동해야합니다. 이것이 바로이 Tomcat 응용 프로그램의 구현 방법입니다.

암호화가 클라이언트 측에서 구현되는 방법은 다음과 같습니다.

여기
... 
prop.setProperty(
    OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL, 
    AnoServices.ANO_REQUIRED); 
prop.setProperty(
    OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES, 
    "(" + AnoServices.ENCRYPTION_AES256 + "," + 
      AnoServices.ENCRYPTION_3DES168 + "," + 
      AnoServices.ENCRYPTION_AES192 + ")"); 

// require the use of the SHA1 algorithm for data integrity checking 
prop.setProperty(
    OracleConnection.CONNECTION_PROPERTY_THIN_NET_CHECKSUM_LEVEL, 
    AnoServices.ANO_REQUIRED); 
prop.setProperty(
    OracleConnection.CONNECTION_PROPERTY_THIN_NET_CHECKSUM_TYPES, 
    "(" + AnoServices.CHECKSUM_SHA1 + ")"); 
... 

여러 클라이언트와 함께 작동하도록 알려진 DB 측의 SQLNET.ORA 파일에서 해당 라인과 같습니다 :

SQLNET.ENCRYPTION_SERVER=required 
SQLNET.ENCRYPTION_TYPES_SERVER=(AES256,AES192,3DES168) 
sqlnet.crypto_checksum_server=required 
sqlnet.crypto_checksum_types_server=(SHA1) 

이되는 DB의 URL입니다이 오류없이 컴파일 응용 프로그램 디렉토리에 톰캣의 web.xml 파일에 사용 :

jdbc:oracle:thin:@<my_db_name>:1521:<my_db_sid> 

내의 context.xml 파일을 구현하는 '정보 allowLinking'기능, 확실하지 않은 그 차이를 만드는하지만 내가 '표준이 아닌 경우 그 세부 사항을 포함 해. 이를 통해 tomcat의 <webapps> 폴더에 내 레포의 적절한 위치를 가리키는 심볼릭 링크를 제공 할 수 있습니다. Tomcat이 해당 위치의 페이지를 제공하기 때문에 디렉토리 권한은 정상입니다.

<Context path="/<my_app_name>" allowLinking="true"> 

답변

0

은 서블릿 컴파일시 CLASSPATH에서 참조 ojdbc6.jar 파일이 tomcat6에 의해 참조되는 ojdbc6.jar 파일보다 다른 것을 보인다. 내 작동 가정은 "ojdbc6.jar"라는 파일의 내용이 정적이지만 분명히 틀 렸습니다! (오라클이 실제로 "ojdbc6.jar"라는 파일의 다른 버전을 공개하는지 확인하는 사람이 있습니까? 내가 할 수있는 증거는 찾을 수 없습니다.)

이 작업에 더 많은 시간을 할애하여 jar 파일 이름이 모든 인스턴스에서 "ojdbc6.jar"이었지만 드라이버 버전에 문제가 있다고 확신하게되었습니다. 그래서 저는 두 개의 .jar 파일이 동일하다는 것을 확인하기 위해 md5sum을 사용했습니다. 그래서 ojdbc6을 다시 다운로드했습니다.jar를 가져 와서 필요한 위치로 복사하고, 서블릿 클래스를 다시 컴파일하고, tomcat6을 다시 시작했습니다. 암호화 된 연결을 통한 로그인에 더 이상 오류가 없습니다.

그래서 누군가 ojdbcX.jar 파일의 이전/잘못된 버전을 ojdbc6.jar에 이전에 이름을 바꾼다는 아이디어가 나타났습니다. 나는 이유를 알고 싶지도 않습니다. :)