如何调试不容易重现且仅在生产环境中发生的异常?


9

我正在处理一个例外,该例外仅在我们的生产环境中发生。我无权访问这些环境,也不知道此异常的含义。查看错误说明,我无法理解原因。

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

有人可以建议我如何解决这种问题吗?


4
应该将其移至StackOverflow吗?我想您会在那里得到更多的回应。
DXM 2012年

10
一句话:伐木。
quant_dev

1
@DXM-太笼统了,它不适合堆栈溢出。OP遵循策略和技术,而不是特定的解决方案。如果包含了失败的代码,那么它也许可以在Stack Overflow上工作。
克里斯·弗雷德

以我的经验,大多数这样的问题都来自安全配置问题,可能很难弄清楚。正如其他人所提到的,良好的日志记录将有助于揭示它。
jfrankcarr 2012年

Answers:


18

通常,更好的调试日志记录。找出您想知道的内容,将其添加到代码中,并将其保存在日志中,以便您可以解决它。当时捕获更多环境细节也有帮助-什么请求,什么时候等等。

具体来说,我会在达到这一目标的客户端中寻找一种常见的模式-如果您找到了一种优化-然后去捕获TCP层流量。

查看交换的SSL消息,您应该可以了解协议中出了什么问题,或者至少是请求的通用属性是什么。一旦有了它,它应该更接近于调试。

作为指导,我想这来自以下三点之一:

  1. 与SSL端口无关的不是SSL。(端口扫描是常见的,但也会发生HTTP到HTTPS端口的扫描。)
  2. 客户端不与服务器共享一组可接受的密码。
  3. 客户端提供证书,而服务器则具有嘶嘶作风。(不常见,但可能)。

1
也许是服务器提供自签名证书或由CA的客户不知道/信任签署
卡洛斯Campderrós

我想我已经看到#3发生在当事方之一证书过期时。
FrustratedWithFormsDesigner 2012年

我已经在生产系统上做了很多调试。我从来没有真正使用过调试器,它总是记录或将键值写入屏幕的特定部分。
Loren Pechtel 2012年

感谢大家的建议。我敢肯定,有一些实用的方法可以解决生产错误。
C4CodeE4Exe

4

我建议使用具有可配置最大日志级别的日志记录策略。像log4j的实用程序(http://logging.apache.org/log4j/http://en.wikipedia.org/wiki/Log4j)可能会做的工作。

可配置的日志级别(或详细程度)对于能够找到错误原因(可能无需重新部署软件)很重要。

如果这样的策略不足以发现错误,请尝试查找如何生成/读取与您通信的应用程序生成的日志。

您可能还实现了一些机制,以通过电子邮件自动获取有关错误的更多信息。

通常,您可以阅读一些有关检测的文章,这是一个更大的主题,包括日志记录和跟踪。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.