KrbException: 자격 증명을 생성하지 못했습니다. (63) - 서비스 자격 증명 없음

KrbException: 자격 증명을 생성하지 못했습니다. (63) - 서비스 자격 증명 없음

openjdkMicrosoft 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.iniTomcat, krb5.conf, 및 기타 구성에 대한 내용을 게시할 수 있습니다 .jaas.conf

답변1

Kerberos 구성 파일( /etc/krb5.conf)은 대소문자를 구분하며 default_realm이름을 소문자로 변경합니다.이 문제를 일으킬 것이다.

관련 정보