【问题标题】:Tomcat/OpenSSL (and Chrome on Android): how to disable request for client certificate?Tomcat/OpenSSL(和 Android 上的 Chrome):如何禁用客户端证书请求?
【发布时间】:2013-11-15 01:47:26
【问题描述】:

背景:

我正在开发一个部署在 Tomcat 上的 Grails 应用程序。整个站点使用 HTTPS(使用 APR 本地库委托给 OpenSSL)。当我使用 Chrome 从 Android 手机访问该站点时,我收到以下提示,要求提供客户端证书(这是一个主要的可用性问题)。通过查看 tcpdump,看来 OpenSSL 确实在请求证书。

我们不需要也不想要客户端证书身份验证(请注意,该站点确实需要对非公开内容进行常规用户/密码身份验证)。由于未知原因,此提示出现在 Android 上的 Chrome 上,但在其他浏览器(所有桌面浏览器、iPad 上的 Safari 和其他浏览器)上不出现。

我了解了 OpenSSL 支持的 SSL_VERIFY_NONE 选项(这似乎是适用的选项),但是当 Tomcat 在幕后调用 OpenSSL 时如何配置它?在这种情况下,既不能使用该选项(以编程方式有效),也不能使用 -verify <depth> option(对 OpenSSL 客户端有效)。

TL;DR:如何配置 Tomcat 和/或 OpenSSL 以避免向客户端浏览器询问 client 证书?无论我们做什么,我们都必须在服务器端,这是一个公共互联网站点。

谢谢。

【问题讨论】:

    标签: google-chrome tomcat ssl openssl


    【解决方案1】:

    您没有说您使用的是哪个版本的 Tomcat,所以我假设 7.0.x 您需要在 server.xml 中将以下内容添加到您的 HTTPS 连接器

    SSLVerifyClient="none"
    

    详细信息,所有其他 SSL 配置选项都在文档中: http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#SSL_Support_-_APR/Native

    【讨论】:

      【解决方案2】:

      题外话,但它是连接器元素中的clientAuth 属性。

      【讨论】:

      • 在这种情况下不是。 OP 使用的是 APR/native 连接器,而不是 BIO 或 NIO 连接器,其中 clientAuth 将是正确使用的属性。
      • @MarkThomas 这提出了一个古老的问题:为什么两个用于相同目的的连接器具有不同的命名属性。
      • BIO 和 NIO 使用公开一组配置选项的 JSSE,而 APR/native 使用具有不同设置的 OpenSSL。有足够的细微差别(即使在表面上看起来相同的配置选项之间),将它们分开比尝试组合它们更容易混淆。
      猜你喜欢
      • 1970-01-01
      • 2018-06-05
      • 2012-07-19
      • 2017-01-24
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多