Apache:将SSL服务器/客户机证书分配给目录

我在我的系统上有多个目录,例如,

/ var / www / dir1 / var / www / dir2 / var / www / dir3

而我想要做的是为每个目录生成一个服务器/客户端SSL证书,然后设置每个目录,使得客户端证书必须与服务器证书匹配才能访问该目录。 现在,如果有人拥有/ var / www / dir2的客户端证书,并且他们尝试访问/ var / www / dir1,他们将无法这样做,因为这些目录使用不同的证书。 这些目录中的每一个托pipe在相同的域(即domain.com/dir1,domain.com/dir2)上。

现在,我遇到的问题是我不完全确定如何在Apache中完成此任务。 (另外,我并不真正关心domain.com来要求SSL,但我确实希望目录需要它。)

我对此的理解是不正确的。 我生成了一个服务器证书,然后为每个客户端生成一个客户端证书。 我创build了/ etc / httpd / clients目录,并为每个客户端在所述目录中存储一个文件,如下所示:

<Directory /var/www/html/test.com> RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] SSLVerifyClient require SSLVerifyDepth 5 SSLOptions +FakeBasicAuth SSLRequireSSL SSLRequire %{SSL_CLIENT_S_DN_CN} eq "test.com" </Directory> 

每个客户端现在都有自己的SSL客户端证书,可以用来访问Web服务器上的给定目录。

SSL证书连接到域名,但由于SSL的工作方式,每个IP地址只能有一个。 这是因为将域名传递给Web服务器之前 ,SSL握手会询问证书。 因此,networking服务器不能为每个目录应用不同的证书,甚至不能应用域名。 你也不能购买,或创build一个!

最好的办法是为dir1.example.com dir2.example.com等创build一个不同的证书,然后使用Apache的URL重写将www.example.com/dir1redirect到dir1.example.com。 这将是一个redirect,虽然证书将无法正常工作。