首页 文章

使用Apache的2路SSL - 证书问题

提问于
浏览
0

我一直在谷歌搜索疯狂试图解决这个问题,但答案似乎并不清楚,或者至少看起来似乎有矛盾的答案 .

我的任务是使用2Way SSL身份验证设置Apache Web服务器 . 我们使用verisign获取我们的证书,因此我们拥有Web实例的证书,其中包含正确的主机名详细信息,由verisign签名,以及来自verisign的中间证书 . 一切都很好 .

现在,我们需要设置2Way SSL连接 . 最初的期望是客户端将管理自己的证书,并将它们提供给我们进行身份验证 . 多个客户端可能正在连接,并且每个客户端在连接时都应该可以访问不同的资源 .

从我读过的内容来看,我不确定如何做到这一点......

这是一个非常好的概述,但在这种情况下,他们使用自签名证书:https://security.stackexchange.com/questions/34897/configure-ssl-mutual-two-way-authentication

使用这些详细信息,似乎我们必须将可信CA指向签署客户端证书的证书颁发机构 .

是否可以将客户端证书用作受信任的CA(即使它不是自签名的,但是由CA签名),或者我们是否必须从其签名者那里放置一个受信任的CA(此时,CA捆绑包包括服务器上的所有客户端证书颁发机构CA工作?)然后使用SSLRequire语句限制对证书的特定详细信息的访问?

作为后续,我们可以使用从verisign获得的SSL证书来签署客户端证书吗?

2 回答

  • 1

    使用:

    SSLVerifyClient optional_no_ca
    

    在您的Apache配置中 . 这将请求客户端证书,但不会对CA进行验证 . 然后由您的本地脚本来检查由Apache设置的结果环境变量,例如“SSL_SERVER_S_DN”,并决定是否允许该请求 .

    这些mod_ssl环境变量也是您的代码在确定客户端可以访问的资源时需要查看的内容 .

    完整的文档在这里mod_ssl虽然你可能已经发现了 .

    关于客户证书的说明 . 如果您确实想要使用CA并将其留给客户端,那么它们可能都使用不同的CA,您可以在服务器上维护它们 . 信任单个CA会好得多 .

    优点是,您可以使用SSL支持构建来执行所有证书检查,而不是编写自己的解决方案 .

    您可以通过指定联机提供程序并使用电子邮件签名证书来标识客户端来强制实施单个CA.这些工作正常,只是证书主题将是一个电子邮件地址而不是域名 .

    或者您可以自己设置自己的CA并签署客户端证书 . 这并不太难,让您完全掌控 . 这两种路由都要求您将CA根证书(以及中间体)添加到Apache可以读取的文件中并将“SSLCACertificateFile”指向它 .

  • 0

    所以,经过几个小时的谷歌和一些测试,我能够弄清楚我需要什么 .

    如果我想使用由verisign或其他公共CA签名的证书,我必须将其公共中间证书(用于签署客户端证书的证书)复制到我的服务器,并在配置中将其指定为SSLCACertificateFile . 需要注意的是,然后可以接受由该CA签署的任何证书,并且SSLRequire指令可以用于将其缩小到特定证书 .

    使用SSLVerifyClient的optional_no_ca指令会使它认为证书是可信的,即使它不是,然后我将不得不使用SSLRequire指令来验证细节是否正确,但是,任何人都可以使用这些指令创建和签署自己的证书细节,没有办法告诉 .

    创建我自己的自签名CA证书,然后使用它来签署客户端证书并将它们发布到客户端是确保证书不是伪造而不需要SSLRequire指令以确保只有那些人的唯一方法我指定可以连接 .

    如果我错了,请评论/纠正我 .

相关问题