1

URL ieでアプリケーションにアクセスしますhttps://myIPAddress:8443/myWebApp/

myWebApp.xml以下のコンテキスト要素を含むファイルを作成し、それを下に配置しました<tomcat_home>\conf\Catalina\localhost\

<Context>
 <Valve className="org.apache.catalina.authenticator.MySSLAuthenticator"/>
</Context>

MySSLAuthenticator.class は、下に配置されている jar ファイルの下にあります。<tomcat_home>\lib

しかし、MySSLAuthenticator ではなく SSLAuthenticator のインスタンスが表示されるというエラーが表示されるため、MySSLAuthenticator が表示されないように見えます。

javax.net.ssl.SSLHandshakeException: null cert chain
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:266)
    at sun.security.ssl.ServerHandshaker.clientCertificate(ServerHandshaker.java:1631)
    at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:176)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
    at java.io.InputStream.read(InputStream.java:101)
    at org.apache.tomcat.util.net.jsse.JSSESupport.handShake(JSSESupport.java:181)
    at org.apache.tomcat.util.net.jsse.JSSESupport.getPeerCertificateChain(JSSESupport.java:148)
    at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:1120)
    at org.apache.coyote.Request.action(Request.java:349)
    at org.apache.catalina.authenticator.SSLAuthenticator.authenticate(SSLAuthenticator.java:135)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)

ここに何が欠けているのかわかりませんか?Tomcat のバージョンは 6.0.35 です

4

1 に答える 1

1

あなたの質問には、関連するRealm定義についての言及はありません。潜在的にそれがエラーの原因です( null cert chain )。リクエストに関連付けられたプリンシパルがない場合 (以前に成功した認証が実行されていない場合はありそうもないことです)、SSLAuthenticator認証レルムを呼び出します。ただし、あなたの場合、これRealmは存在しないか、存在しますが、何らかの方法で構成が誤っているため、SSLAuthenticator はそれを解釈できません。

カスタムを無効にすることでこれを検証し、最初MySSLAuthenticatorに組み込みで機能させることができます。SSLAuthenticatorそれが機能するようになったら、SSLAuthenticator を拡張してみてください。それがあなたがやろうとしていることだと仮定します。

拡張クラスからログに記録された有用な情報を見つけることができるため、ログ レベルを debug に設定することもお勧めします。

SSLAuthenticatorとその親クラスAuthenticatorBase

あなたのクラスが tomcat によってさえ認識されていないことに関して、最も可能性の高い答えは、アプリケーション コンテキストでクラスを定義したことです。Tomcat バルブはに関連付けることができEngine、この順序で呼び出されます。したがって、Tomcat が到達しない理由に対する最も可能性の高い答えは、ビルトインがレベルでリクエストをキャプチャ (およびフォールオーバー) することです。したがって、後続のレベル処理には到達しません。HostContextValveSSLAuthenticatorEngineHostContext

于 2014-05-30T23:14:22.897 に答える