PHP证书。双向认证ssl。阿帕奇

时间:2015-02-02 19:15:52

标签: php apache authentication ssl certificate

上下文:安装了SSL的生产服务器。运行apache服务器。 PHP。

问题:对于特定网址(例如:www.domain.com/whatever/edit/*),我想要求用户使用他们的证书,以便针对特定任务对其进行身份验证。

我已经读过这种身份验证方式称为双向身份验证SSL。我不知道我是不对。

我在服务器配置上尝试的是以下

<VirtualHost _default_:433>

ServerAdmin webmaster@localhost

DocumentRoot /Applications/MAMP/htdocs/smartdataprotection/web/

        Options FollowSymLinks

        Options Indexes FollowSymLinks MultiViews


LogLevel warn
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/ssl_access.log combined


SSLEngine on
SSLCertificateFile    /Applications/MAMP/htdocs/certificates/server.cer
SSLCertificateKeyFile /Applications/MAMP/htdocs/certificates/server.key
SSLOptions +StdEnvVars 

# Below for 2 way ssl
SSLVerifyClient require
SSLVerifyDepth 10
SSLCACertificateFile /Applications/MAMP/htdocs/certificates/ca.cer

我想得到的是类似于以下屏幕截图: enter image description here

非常感谢您提出的任何帮助将非常受欢迎并非常感谢。

问候。

1 个答案:

答案 0 :(得分:2)

我认为你错过了SSLCipherSuite directive。在apache文档中:

  

此复杂指令使用冒号分隔的密码规范字符串   由OpenSSL密码规范组成,用于配置密码   客户端允许在SSL握手阶段进行协商。

通常,您也希望在具有特定位置的证书的网站中登录,而不是直接在www.yourdomain.com中登录,例如在按钮链接中转到wwww.yourdomain.com/yourApp/loginCert,因此您必须配置<Location><VirtualHost>

最后检查SSLCACertificateFile directive中指示的文件,此文件是PEM格式的CA证书的串联,如果您的证书未颁发,则会颁发允许在您的站点中登录的证书通过此文件中的一个CA,它们将不会显示在浏览器弹出窗口中。

配置可能如下所示:

<VirtualHost _default_:433>
...
  <Location /yourApp/loginCert>

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCACertificateFile conf/trustedCA.cer
    SSLVerifyClient required
    SSLVerifyDepth 10
    SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate

  </Location>   

希望这有帮助,