openjdk
Microsoft SQL 데이터베이스에 인증할 때 Kerberos 인증을 사용하기 위해 Oracle Java 1.8.0_91-b14(아님)를 사용하여 Ubuntu 16.04에서 Tomcat 8.0.35를 설정하고 있습니다 . 내가 겪고 있는 문제는 kinit
적절한 스위치를 사용하여 적절한 사용자로 실행한 후입니다.
sudo -u tomcat8 kinit -k -t /etc/tomcat8/tomcat8.keytab HTTP/[email protected]
Tomcat의 localhost 로그에 다음 오류가 발생합니다.
Caused by: GSSException: No valid credentials provided (Mechanism level: Fail to create credential. (63) - No service creds)
Caused by: KrbException: Fail to create credential. (63) - No service creds
내가 달릴 때
sudo -u tomcat8 klist
예상되는 응답을 받았습니다.
root@linux-test2:/home/tbourne# sudo -u tomcat8 klist
Ticket cache: FILE:/tmp/krb5cc_111
Default principal: HTTP/[email protected]
Valid starting Expires Service principal
06/23/2016 14:33:10 06/24/2016 00:33:10 krbtgt/[email protected]
renew until 06/24/2016 14:33:07
Tomcat 시작 중에 패킷을 캡처하면 전달된 서비스/인스턴스 이름이 krbtgt/OUR.DOMAIN.LOCAL
위에서 언급한 기본 주체일 것으로 예상됩니다. serverSpn
데이터베이스 연결 문자열에 옵션을 설정 하면 위와 같은 결과가 나타납니다.
해당 옵션을 제거하면 serverSpn
다른 주체 이름이 사용됩니다. 안타깝게도 각 Tomcat 인스턴스에는 고유한 로그인(따라서 고유한 SPN)이 필요하기 때문에 해당 이름을 사용할 수 없습니다.MSSQLSvc/[email protected]
데이터베이스 연결 문자열은 다음과 같습니다.
property.db.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
property.db.jdbcUrl=jdbc:sqlserver://sql-server.our.domain.local:1434;databaseName=DBAUTH2;integratedSecurity=true;authenticationScheme=JavaKerberos;serverSpn="HTTP/[email protected]"
Microsoft JDBC 드라이버 버전 4.2를 다운로드했고 Tomcat이 이를 사용하고 있습니다.
데이터베이스에 인증할 때 Tomcat이 올바른 주체 이름을 보내지 않는 이유를 이해할 수 없습니다. 어떤 통찰력이라도 대단히 감사하겠습니다.
도움이 된다면 krb5.ini
Tomcat krb5.conf
및 기타 구성을 게시할 수 있습니다.jaas.conf
답변1
Kerberos 구성 파일( /etc/krb5.conf
)은 대소문자를 구분하므로 default_realm
이름을 소문자로 변경하세요.이 문제를 일으킬 것이다.