【问题标题】:Zimbra proxy servlet 500 error on my https domain我的 https 域上的 Zimbra 代理 servlet 500 错误
【发布时间】:2014-11-19 00:50:09
【问题描述】:

我的 zimbra 安装有一个奇怪的问题……我启用了代理 servlet,并且对于跨域 ajax 请求工作正常。但是,每当我尝试访问我的域的 https:// 版本时,我都会得到一个 500 java.security.cert.CertificateException,它看起来像下面的堆栈跟踪。有任何想法吗? 其他 https:// 网址似乎工作正常。

Error 500 java.security.cert.CertificateException: *** lots of ssl cert specific stuff not sure its safe to post ***

Problem accessing /service/proxy. Reason:

原因:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: * 很多 ssl 证书特定的东西不确定发布是否安全
    在 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747)
    在 com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)
    在 com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235)
    在 com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1209)
    在 com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:135)
    在 com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
    在 com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
    在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943)
    在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188)
    在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215)
    在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199)
    在 com.zimbra.common.net.CustomSSLSocket.startHandshake(CustomSSLSocket.java:90)
    在 com.zimbra.common.net.CustomSSLSocket.getInputStream(CustomSSLSocket.java:341)
    在 org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:745)
    在 org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
    在 org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
    在 org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    在 org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    在 com.zimbra.common.httpclient.HttpClientUtil.executeMethod(HttpClientUtil.java:53)
    在 com.zimbra.common.httpclient.HttpClientUtil.executeMethod(HttpClientUtil.java:39)
    在 com.zimbra.cs.zimlet.ProxyServlet.doProxy(ProxyServlet.java:243)
    在 com.zimbra.cs.zimlet.ProxyServlet.doGet(ProxyServlet.java:152)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:705)
    在 com.zimbra.cs.servlet.ZimbraServlet.service(ZimbraServlet.java:206)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:814)
    在 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    在 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
    在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:218)
    在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:422)
    在 org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    在 org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    在 org.mortbay.jetty.handler.rewrite.RewriteHandler.handle(RewriteHandler.java:230)
    在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    在 org.mortbay.jetty.Server.handle(Server.java:326)
    在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:585)
    在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:971)
    在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
    在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:415)
    在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:429)
    在 org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451)
引起:java.security.cert.CertificateException: d2:CN16:.otherinbox.com1:O18:Return Path\, Inc.2:OU0:6:accept4:true5:alias49:my.otherinbox.com:94CAD63897189661A4696EEEB5E53474:fromi1394668800000e4: host17:my.otherinbox.com3:icn38:DigiCert SHA2高可信服务器CA2:10 12:DigiCert INC3:iou16:www.digicert.com3:md532:78C925EF0A86A80C51D73DFA0CCEE0A08:mismatch5:false1:S31:94CAD63897189661A4696EEEB5E53474:sha140:D7A479766373923C5E61404086D23BB45D22377E2:toi1495022400000ee
    在 com.zimbra.common.net.CustomTrustManager.checkServerTrusted(CustomTrustManager.java:90)
    在 com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1201)
    ... 40 更多

原因:

java.security.cert.CertificateException: * 很多 ssl cert 特定的东西不确定发布是否安全 *
    在 com.zimbra.common.net.CustomTrustManager.checkServerTrusted(CustomTrustManager.java:90)
    在 com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1201)
    在 com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:135)
    在 com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
    在 com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
    在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943)
    在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188)
    在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215)
    在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199)
    在 com.zimbra.common.net.CustomSSLSocket.startHandshake(CustomSSLSocket.java:90)
    在 com.zimbra.common.net.CustomSSLSocket.getInputStream(CustomSSLSocket.java:341)
    在 org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:745)
    在 org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
    在 org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
    在 org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    在 org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    在 com.zimbra.common.httpclient.HttpClientUtil.executeMethod(HttpClientUtil.java:53)
    在 com.zimbra.common.httpclient.HttpClientUtil.executeMethod(HttpClientUtil.java:39)
    在 com.zimbra.cs.zimlet.ProxyServlet.doProxy(ProxyServlet.java:243)
    在 com.zimbra.cs.zimlet.ProxyServlet.doGet(ProxyServlet.java:152)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:705)
    在 com.zimbra.cs.servlet.ZimbraServlet.service(ZimbraServlet.java:206)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:814)
    在 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    在 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
    在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:218)
    在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:422)
    在 org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    在 org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    在 org.mortbay.jetty.handler.rewrite.RewriteHandler.handle(RewriteHandler.java:230)
    在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    在 org.mortbay.jetty.Server.handle(Server.java:326)
    在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:585)
    在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:971)
    在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
    在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:415)
    在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:429)
    在 org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451)

【问题讨论】:

    标签: zimbra zimlet


    【解决方案1】:

    我认为,Zimbra 的 java 拒绝了您服务器的证书。可能是因为自签名或旧证书。您可能需要将证书添加到 java 的密钥环 cacerts,它位于 ~zimbra/java/jre/lib/security/cacerts 中,可以使用“keytool”命令进行修改。密码应该是默认的“changeit”。

    【讨论】:

    • 这是有道理的。如何“将证书添加到 java 的密钥环 cacerts”?
    • 其实,Zimbra 自带一套自己的证书管理工具,也应该管理代理 servlet 的证书:wiki.zimbra.com/wiki/…
    • 当您设置 Zimbra 证书时,您是否按照该文档中的说明进行操作?如果是这样,你不应该有这个问题。也许您应该尝试根据该文档重新颁发新证书。
    • 我很困惑......我认为问题出在我试图通过 ajax 连接的服务器上?
    • 哦,那不是 zimbra 服务器本身吗?也许我误读了你的问题。对不起。我相信,您必须使用“keytool -importcert”命令将目标服务器的证书添加到 ~zimbra/java/jre/lib/security/cacerts。密码应该是默认的“changeit”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2011-09-17
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2015-12-05
    相关资源
    最近更新 更多