- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 SSLSniff 的工具,但遇到了一些技术问题...我一直在寻找任何类似的问题,但唯一的结果来自 Twitter 提要,没有公开有用的答案。所以,这里是:
(我的 SSLSniff 版本是 0.8)我用 args 启动 sslsniff:
sslsniff -a -c cert_and_key.pem -s 12345 -w out.log
其中:cert_and_key.pem 文件是我的授权证书与我的未加密私钥(当然是 PEM 格式)连接在一起,12345 是我使用 iptables 规则重定向流量的端口。
所以 sslsniff 正确运行:
INFO sslsniff : Certificate ready: [...]
[每当我与客户联系时,都会出现以下两行:]
DEBUG sslsniff : SSL Accept Failed!
DEBUG sslsniff : Got exception: Error with SSL connection.
在我的客户端,我已经将我的 AC 注册为受信任的 CA(带有 FF)。然后,当我通过 SSL 连接时出现错误:
Secure Connection Failed.
Error code: ssl_error_bad_cert_domain
super 奇怪的是(此外,证书不会自动被接受,因为它应该由我信任的 CA 签名)是我无法通过单击“添加异常(exception)...”来接受伪造的证书:我总是返回错误页面要求我添加(其他)异常...
此外,当我尝试连接到例如:https://www.google.com ,SSLSniff 的日志以新行完成:
DEBUG sslsniff : Encoded Length: 7064 too big for session cache, skipping...
有谁知道我做错了什么?
-- 编辑总结不同的答案--
问题是 SSLSniff 在伪造证书时没有考虑替代名称。显然,只要公用名与域名完全不匹配,Firefox 就会拒绝任何证书。
例如,对于 Google.com:CN = www.google.com 并且没有替代名称。所以当你连接到 https://www.google.com , 它工作正常。
但对于 Google.fr :CN = *.google.fr,具有这些替代名称:*.google.fr 和 google.fr。所以当你连接到 https://www.google.fr , FF 正在寻找替代名称,并且由于它显然找不到任何替代名称,因此拒绝格式错误的证书。
...所以一个解决方案是打补丁/提交...我不知道 Moxie Marlinspike 是否故意忘记了这个功能,因为它太复杂了,或者他只是没有意识到这个问题。无论如何,我会尝试查看代码。
最佳答案
session 编码长度错误消息:当缓存 SSL session 失败时,这意味着后续连接上的 SSL session 恢复将失败,从而导致性能下降,因为每个请求都需要进行完整的 SSL 握手。然而,尽管 CPU 的使用更加频繁,sslsniff 仍然可以正常工作。缓存失败,因为 OpenSSL session 对象 (SSL_SESSION) 的序列化表示大于 sslsniff session 缓存支持的最大大小。
至于您真正的问题,请注意 sslsniff 不支持 X.509v3 subjectAltNames,因此如果您连接到的站点的主机名与证书的主题公用名不匹配,而是仅匹配 subjectAltName,则 sslsniff将生成没有 subjectAltNames 的伪造证书,这将导致连接客户端上的主机名验证不匹配。
如果您的问题只发生在某些特定站点上,请告诉我们该站点,以便我们可以使用例如openssl s_client -connect host:port -showcerts
和 openssl x509 -in servercert.pem -text
。如果所有站点都出现这种情况,则上述解释不成立。
关于c++ - SSLSniff 错误 : "SSL Accept Failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9395990/
在 HTTP 中,您可以在请求中指定您的客户端可以使用 accept header 接受响应中的特定内容,其值如 application/xml。内容类型规范允许您在内容类型中包含参数,例如chars
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 3 年前。 Improve th
我的 RESTFul API 只能响应 JSON 编码的数据(即我所有的 header 都有 Content-Type: application/json)。如果请求具有不允许 JSON 的 Acce
我有 C linux TCP 客户端/服务器应用程序。我想出了一个奇怪的场景,但我不知道这个应用程序是否有任何后果。我有一个可以接受 N 个连接的服务器端,例如这个服务器将接受 100 个连接。在这种
我试图找出 的可能值范围接受 和 接受-联系 header 字段,但我在 RFC 中找不到完整列表。有谁知道他们在哪里?我经常看到 Accept: application/sdp;level=1,
在 TCP 套接字代码中,我们创建了 2 个套接字。第一个接受新连接,第二个接受来自客户端的数据并在新连接建立时创建。 TCP header 中的哪个控制位允许服务器知道将此段传递给 ServerSo
我可以设置 Request.Content-Type = ... , Request.Content-Length = ... 如何设置Accept和Accept-Language? 我想上传一个文件
假设A是服务器,B是客户端。 B 创建一个到服务器 A 的套接字 b 并 ServerSocket.accept() 创建一个相应的套接字 a 对于客户端 B 现在,如果服务器 A 关闭了 a 但客户
如果客户端connect()先于服务端accept()成功,那么客户端如何知道服务端accept()成功呢?如果在 connect() 成功和服务器 accept() 之间的时间间隔调用 send()
这是我的代码: void error(const char *msg) { perror(msg); exit(1); } void sServer::acceptClientConn
在我的 pom.xml 中有以下详细信息 org.codehaus.jackson jackson-core-asl 1.9.13
假设我有两个如下所示的端点: @GET @Path("/blah") @Produces(MIME_TYPE_1) public Thing getThing() { .... } @GET
我的 Controller : @RestController public class ClawerController { @RequestMapping("/hello"
我不想要可视化 merge 工具,我也不希望必须 vi 冲突文件并手动在 HEAD(我的)和导入的更改(他们的)之间进行选择。大多数时候,我要么想要他们的所有更改,要么想要我的所有更改。通常这是因为我
我正在使用 spring 4.1.1.RELEASE 并包括: pom 中的 jackson-core-asl 1.9.13 和 jackson-mapper-asl 1.9.13 来创建一个带有 R
我正在尝试开发自己的基于非阻塞 NIO 消息的通信库。我已经阅读了 1000 个关于它的教程和书籍章节,我认为最终我得到了一些可以在很少的同时连接下工作的东西。但是当我在服务器端共存许多连接时,我遇到
我正在尝试编写一个 Bind 元编程模板辅助元函数,将模板参数绑定(bind)到某物。 我有一个简单的模板元函数的工作实现: template struct MakePair { using
我使用 spring 构建 Restful API,当我访问以下方法时: // get the entity in DB by using id number @RequestMapping(
只是想知道是否有一种方法可以通过 ASP.NET Core 中的属性强制检查 HTTP header 值是否属于一组给定值(例如 application/json,应用程序/xml) 我知道有 Pro
我是一名优秀的程序员,十分优秀!