我正在容器化使用 SSL 客户端证书验证的旧版 Web 服务。我有一个 apache 2.4 容器和一个 PHP 7.4 FPM 容器。
我的 apache 虚拟主机配置文件如下
...
<VirtualHost *:8443>
DocumentRoot /var/www/html/myapp
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/myapp/$1
SSLEngine on
....
SSLCACertificateFile <PATH TO CA>
SSLVerifyClient optional
SSLVerifyDepth 2
...
<Files ~ "\.(cgi|shtml||phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/html/myapp">
SSLOptions +StdEnvVars +ExportCertData
Require all granted
DirectoryIndex index.php
</Directory>
...
</VirtualHost>
....
索引.php
<?
print_r($_SERVER);
?>
<html>
....
<a href=go.php><img name=go src=="go.png" alt="GO!"></a>
....
</html>
转到php
<?php
print_r($_SERVER);
... DO Authoriztion stuff with SSL_CLIENT_CERT ...
?>
docker-compose.yml
version: 3.4"
services:
apache:\
image: myappApache
depends_on: php
networks:
- frontend
- backend
ports:
- "80:8080"
- "443:8443"
volumes:
- ./myapp/:/var/www/html/myapp:rw
php:
image: myappPHP
networks:
- backend
volumes:
- ./myapp/:/var/www/html/myapp:to
networks:
frontend:
backend:
当我导航到我的 index.php 并打印出 的值时, 我可以看到_SERVER
。但是,当我单击该页面上的链接时,会将我带到网站上的第二个页面 ,但中缺少。其他 SSL 相关项目也缺失了print_r($_SERVER)
[SSL_CLIENT_CERT] => -----BEGIN CERTIFICARTE----- ... -----END CERTIFICATE-----
SSL_CLIENT_CERT
_SERVER
- SSL_会话_恢复
- SSL 会话 ID
- SSL 服务器 A_SIG
- SSL 服务器密钥
- SSL 服务器 ID
如何防止_SERVER
配置设置在页面之间消失?
答案1
不确定为什么这样做有效。但我移动了组SSLOptions +StdEvnVars +ExportCertData
的外部Directory
,这似乎解决了问题。