2017-07-21 14 views
1

私のコンピュータでCASが設定されていて、正常に動作する特定のドメイン(たとえばa.com)で動作します。そこにコードと一緒に.crtと.keyファイルのペアがありました。今ではドメインを変更する必要があるので、私がしたことは、それに応じてソースコード内のドメイン(たとえばb.com)を変更し、私が受け取った.crtと.keyファイルをインポートしました。今、私がCASログインページにアクセスすると、私はそれにアクセスできます。しかし、ログイン資格情報を入力してログインボタンをクリックすると、次の例外を除いて失敗します。CAS SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスを見つけることができません

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) 
    sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 
    java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
    sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) 
    sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) 
    sun.security.validator.Validator.validate(Validator.java:260) 
    sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) 
    sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) 
    sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) 
    sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1496) 
    sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) 
    sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026) 
    sun.security.ssl.Handshaker.process_record(Handshaker.java:961) 
    sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) 
    sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) 
    sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) 
    sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) 
    sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) 
    sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
    sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546) 
    sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) 
    sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:429) 
    org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:41) 
    org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:193) 
    org.springframework.security.cas.authentication.CasAuthenticationProvider.authenticateNow(CasAuthenticationProvider.java:158) 
    org.springframework.security.cas.authentication.CasAuthenticationProvider.authenticate(CasAuthenticationProvider.java:143) 
    org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174) 
    org.springframework.security.cas.web.CasAuthenticationFilter.attemptAuthentication(CasAuthenticationFilter.java:270) 
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:97) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 

ここで何が起こっているのか教えてください。私は似たような質問をたくさん見たことがありますが、誰も私のシナリオに対処していないようです。

答えて

1

Tomcatの設定で問題が発生しています。キーストアにキーをインポートしたにもかかわらず、キーストアにはTomcatがアクセスしていないため、証明書を読み込めませんでした。

apt-getのようなパッケージマネージャを使用する代わりに、tomcatディストリビューションのバイナリをダウンロードして抽出する人には、このように見えます。

現在、2つの可能なオプションがあります(もっと可能性があります)。

  1. catalina.shを変更して、プロパティー「-Djavax.net.ssl.trustStore」を追加し、必要なトラストストアファイルを追加します。基本的には、プロパティと値は上記スクリプトの変数JAVA_OPTSに追加されます。例えば。 JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts"しかし、これは単なる速い修正です。トラストストアがグローバルに追加されているため、これは良い解決策ではないと私は思います。
  2. 構成ファイルserver.xmlのコネクタ属性にキーストアの場所を追加します。例はhereにあります。

これは非常に単純な根本的な問題であることがわかりました。しかし、学習者をサポートするために、私は質問と答えを残すことを考えました。この回答をさらに改善してください。

関連する問題