ssl - Watson 和 https 的问题

标签 ssl apache2 text-to-speech tomcat8 ibm-watson

编辑:

我认为这与 Watson 无关,所以我发布了一个关于 javax.net 和 ssl 的不同问题 here


我有 3 个 Watson 服务,TTS、STT 和 Conversation,它们合并到一个 Java Spring Web 应用程序中,所有三个服务都可以在 Eclipse/localhost 中运行该应用程序。我最近将生产服务器配置 (Apache/Tomcat) 更新为安全站点(带有 LetsEncrypt 证书的 HTTPS/SSL),以便访问 Chrome 中的麦克风。现在,当我部署应用程序时,我在执行 getVoices() TTS 方法时看到 SSLException。

javax.net.ssl.SSLException:收到致命警报:bad_record_mac

我在 SO 中找不到任何与从安全站点访问 Watson 服务相关的文档或问题,但我认为考虑到 Chrome 要求访问麦克风的应用程序必须安全,这是可能的。

是否需要设置、标志或其他配置才能使其正常工作?

这是日志的相关部分:

Caused by: javax.net.ssl.SSLException: Received fatal alert: bad_record_mac
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) ~[?:1.7.0_80]
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) ~[?:1.7.0_80]
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979) ~[?:1.7.0_80]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086) ~[?:1.7.0_80]
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332) ~[?:1.7.0_80]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359) ~[?:1.7.0_80]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343) ~[?:1.7.0_80]
at okhttp3.internal.io.RealConnection.connectTls(RealConnection.java:239) ~[okhttp-3.3.1.jar:?]
at okhttp3.internal.io.RealConnection.establishProtocol(RealConnection.java:196) ~[okhttp-3.3.1.jar:?]
at okhttp3.internal.io.RealConnection.buildConnection(RealConnection.java:171) ~[okhttp-3.3.1.jar:?]
at okhttp3.internal.io.RealConnection.connect(RealConnection.java:111) ~[okhttp-3.3.1.jar:?]
at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:187) ~[okhttp-3.3.1.jar:?]
at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:123) ~[okhttp-3.3.1.jar:?]
at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:93) ~[okhttp-3.3.1.jar:?]
at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:296) ~[okhttp-3.3.1.jar:?]
at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) ~[okhttp-3.3.1.jar:?]
at okhttp3.RealCall.getResponse(RealCall.java:243) ~[okhttp-3.3.1.jar:?]
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201) ~[okhttp-3.3.1.jar:?]
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163) ~[okhttp-3.3.1.jar:?]
at okhttp3.RealCall.execute(RealCall.java:57) ~[okhttp-3.3.1.jar:?]
at com.ibm.watson.developer_cloud.service.WatsonService$1.execute(WatsonService.java:179) ~[core-3.5.0.jar:?]

更新 #1

为了确保,我将 Apache/Tomcat 配置翻转回 HTTP,重新启动两者,并没有发生异常。所以,我的猜测是它可能是 Okhttp(由 Watson JDK 使用)的问题,或者是 Apache/Tomcat 的配置问题。或者 Watson 可能无法识别 LetsEncrypt 证书?

更新 #2

我一直在尝试研究异常,我认为这可能是 Apache/Tomcat 配置问题,可能与 SSL 协议(protocol)有关。我将此添加到 Apache httpd.conf,但问题仍然存在。

SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3

我添加了 Apache 和 Tomcat 标签,希望比我更熟悉他们的配置的人可以为我指出正确的方向来解决这个问题。

最佳答案

我相信我找到了问题的原因。经过更多的研究和调试,我意识到它与 Watson、Apache 或 Tomcat 无关。正如我在对这个问题的编辑中指出的那样,我在这里发布了另一个更具体到 javax.net.ssl 的问题:Intermittent javax.net.ssl failure bad_record_mac .我在那里发布的答案包含我的发现的详细信息,但归根结底,原因似乎是 Java7 中的错误。我通过禁用 java.security 文件中的所有 Diffie-Hellman 密码套件来修复它。

关于ssl - Watson 和 https 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937159/

相关文章:

c# - 是否可以在 C# 中从根 CA 动态生成 SSL 证书?

java - 将用于 SSL 使用的 PFX 通配符安装到 Tomcat 中

javascript - 在相同 ip 但不同端口上使用 Rest API

ruby - 如何在 sinatra 上设置 SSL 证书

php - 移动到 SSL 后页面加载后丢失 session

perl - 为什么我的 Perl CGI 程序返回服务器错误?

php - Mac OS X 创建 zip 文件的权限

text-to-speech - IBM Watson TextToSpeech - 无法读取未定义的属性 .pipe

android - Android 中文本到语音的异常行为

javascript - 是否有可用于网络的文本到语音引擎,可以发音为拼写形式输入的短语?