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
이름을 소문자로 변경합니다.이 문제를 일으킬 것이다.