【问题标题】:Laravel and two way SSL over specific laravel routesLaravel 和特定 laravel 路由上的两种方式 SSL
【发布时间】:2015-03-04 06:37:19
【问题描述】:

尝试在两台生产服务器之间建立双向 SSL 连接。客户端机器将使用证书连接到 Laravel 路由并传递 xml 有效负载。生产机器上的 apache 服务器和客户端机器之间应该有两种方式的 ssl 握手。

我在生产机器上使用这个 apache 目录设置:

<Directory /var/www/vhosts/subdomain/html/routename>
    SSLVerifyClient      require
    SSLVerifyDepth       5
    SSLOptions           +FakeBasicAuth
    SSLRequireSSL
    SSLRequire       %{SSL_CLIENT_S_DN_O} eq "company name"
    SSLCipherSuite    ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate
</Directory>

我在 .htaccess 中设置了以下内容

<IfModule mod_rewrite.c>
    <IfModule mod_rewrite.c>
        SSLOptions +StdEnvVars
        SSLOptions +ExportCertData

    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Laravel 路由仍在接受来自根本不使用证书或证书满足 SSL_CLIENT_S_DN_O 要求的机器的连接。似乎 mod_rewrite 优先于 Directory ssl 要求。提前感谢您提供任何基本建议。任何想法都非常感谢。

【问题讨论】:

  • 我是 PHP 的 2-way ssl 新手。您是否建议两台机器之间的双重 ssl 握手可以发生在 php 应用程序代码内部而不是服务器级别?

标签: php apache .htaccess laravel ssl


【解决方案1】:

我放弃了这个选项。

Laravel 通过在隐藏的 .htaccess 文件中“重写”来劫持 url。如果 url 位置确实存在,则 apache 将处理文件系统上的脚本。如果文件系统上不存在 url 位置,则重写将通过 Laravel 的控制器(routes.php)路由请求,处理并返回。

apache 位置和目录指令适用于特定文件系统位置中的特定脚本。我需要这些指令来保护某些脚本不被执行,除非访问者出示特定的 SSL 客户端证书。这种架构基本上与 Laravel 的结构方式不兼容。

作为一种解决方法,我在实际文件系统位置创建了特定脚本(php 文件),使用 apache 位置指令保护它们,并将传入请求转发到预期请求来自 localhost 的 Laravel 路由。

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 2014-08-19
    • 2015-02-04
    • 2018-05-18
    • 2013-08-07
    • 2017-07-03
    • 2016-07-26
    • 2019-02-27
    • 2016-08-05
    相关资源
    最近更新 更多