Apache SSL日志不完整SSL握手

场景:我们正在教室里围绕可信任的连接和SSL进行一些实验,并且希望在中间人攻击中演示SSL握手请求。

我有一个自签名证书的Apache服务器。 一切正常,但日志似乎不完整,因为没有办法获得SSL尝试的列表。 一旦客户端接受“例外”,我会为每个请求获得正常的访问日志消息。 但是,我需要知道什么SSL请求导致它失败。 这是我的日志指令:

LogLevel警告ErrorLog logs / ssl_error_log CustomLog logs / ssl_access_log合并在一起#是您的平均自定义日志

我的愿望是尝试每个SSL握手的列表。 我错过了什么可能会产生如下的东西? (显然确切的话是不需要的,但在球场)

0/0/0 00:00:00 – 192.168.1.10 – hijk.lmnop.edu – SSL不匹配

对于CustomLog, SSL连接有额外的选项,但是它们不会打破逐步的连接状态。 你可能会想要尝试LogLevel debug ,但是这会让你有很多额外的垃圾需要通过。

老实说,这个类的一个更好的主意是演示使用openssl s_server命令,因为它可以configuration为显示SSL状态机的分步进度,您将能够准确地看到在哪一步客户端丢弃了连接。

就像是

 openssl s_server -key [somekey.pem] -cert [somecert.pem] -accept 443 -state -www 

当有人连接时,会打印出连接的步骤:

 SSL_accept:before/accept initialization SSL_accept:SSLv3 read client hello A SSL_accept:SSLv3 write server hello A SSL_accept:SSLv3 write certificate A SSL_accept:SSLv3 write key exchange A SSL_accept:SSLv3 write server done A SSL_accept:SSLv3 flush data SSL_accept:SSLv3 read client key exchange A SSL_accept:SSLv3 read finished A SSL_accept:SSLv3 write change cipher spec A SSL_accept:SSLv3 write finished A SSL_accept:SSLv3 flush data 

当有人用网页浏览器实际连接时,-www选项使它打印一些信息。 如果用户在不接受伪造的证书的情况下导航,那么我猜测连接将会在中间的某个地方被破坏。

你可以用类似的方式使用openssl s_client命令,但我不确定接受或不接受无效证书的灵活性。

证书协商是在您的浏览器和正在进行中间人攻击的代理之间进行的。 在服务器端,您可以看到的唯一区别是客户端的IP。

但是,在服务器上,您可以configuration客户端证书来authentication客户端。 服务器将只接受来自可信客户端的连接。 如果连接被篡改,客户端证书将不同,服务器将closures连接。