我已配置客户端证书并在 Apache 中工作。我想将客户端的 PEM 编码的 X.509 证书传递给后端服务器。
我尝试使用 SSLOptions +ExportCertData。这根本没有任何作用,而文档指出它应该添加 SSL_SERVER_CERT、SSL_CLIENT_CERT 和 SSL_CLIENT_CERT_CHAINn(n = 0,1,2,..)作为标头。任何想法为什么这个选项不起作用?
然后我尝试使用 RequestHeader 自己设置标头。这适用于除 SSL_CLIENT_CERT_CHAIN 之外的所有变量。它在标题中显示为空。为什么没有填充证书链的任何想法?
这是我的第一个 Apache 配置:
<VirtualHost 192.168.56.100:443>
ServerName www.test.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/apache2/ssl/certs/www.test.org.crt
SSLCertificateKeyFile /etc/apache2/ssl/private/www.test.org.key
SSLCACertificateFile /etc/apache2/ssl/ca/ca.crt
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
<Location /carbon>
ProxyPass http://www.test.org:9763/carbon
ProxyPassReverse http://www.test.org:9763/carbon
</Location>
<Location /services/GbTestProxy>
SSLVerifyClient require
SSLVerifyDepth 5
SSLOptions +ExportCertData
ProxyPass http://www.test.org:8888/services/GbTestProxy
ProxyPassReverse http://www.test.org:8888/services/GbTestProxy
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这是我的第二个 …
好吧,我已经花了一整天的时间——
我正在使用带有 mod_ssl 的 apache 我正在尝试采用一个现有的环境标头“%{SSL_CLIENT_S_DN_CN}s”,它看起来像“Lastname Firstname Mi username”并设置一个名为 USERNAME 的新标头并将其设置为仅等于 username(最后一个空格和字符串末尾之间的字符)
然后我将该标头反向代理到后端主机,后端主机将使用它来识别用户。
我尝试了很多不同的东西。我不知道问题是我不理解 perl 正则表达式,还是我不理解语法,或者我没有把它放在正确的地方,或者三者兼而有之。
这是我尝试过的一件事的示例:
SetEnvIf SSL_CLIENT_S_DN_CN (.*\ )(.*) newhostname=$2
RequestHeader set HOSTNAME "%{newhostname}e"
Run Code Online (Sandbox Code Playgroud)
我真正想要的是一个新的标头主机名,它等于 DN_CN 环境变量中的最后一个非空白字符。
不确定这是否是将其发布到的合适 SE,但这里是:是否有一些有关各种浏览器支持哪些 SSL 密码的在线参考?基本上,我对通过确保较低的密钥长度和旧算法(DES 和 3DES)不用于与客户端的通信来强化系统感兴趣。
这样做的方法(至少使用 Apache mod_ssl)似乎是控制服务器在握手期间提供的支持的密码。
我希望能够回答诸如“如果我强制使用 AES256,哪些浏览器会损坏?”之类的问题。
对于某些站点,这是可取的,因为它为我们提供了有关对话机密性的一些保证。如果他们的浏览器只支持被认为是不安全的连接,我们希望会话中断,以便他们被迫使用更现代/更强大的客户端。
我通常对 Apache 和 OpenSSL 非常熟悉,但这个让我完全困惑。我在 Ubuntu 12.04 LTS 服务器上运行 Apache 2.2.22 和 OpenSSL 1.0.1。我配置了一个基于 IP 的虚拟主机,它将所有 HTTP 请求重定向到 HTTPS 并使用严格的传输安全来帮助保持这种方式。
我正在将站点从内部 CA 颁发的证书迁移到 StartSSL 签名的证书。当前证书具有 1024 位 RSA 密钥,新证书具有 2048 位 RSA 密钥。服务器有一个或两个其他 SSL 虚拟主机,它们都使用 1024 位密钥。当前证书完美运行。
两个证书的密钥都在同一个目录中,root 拥有,并且有600权限(目录是710)。证书都在不同的目录中,由 root 拥有,并具有644权限(该目录具有755)。(例如,两个密钥都在/var/ssl/keys,两个证书都在/var/ssl/certs.)
但是,当我更改配置以使用新证书(这是唯一的更改,我不更新主机名或其他任何内容)时,Apache 拒绝启动,出现“无法写入‘随机状态’”错误。我已经检查过了,我没有任何(root 拥有的或以其他方式拥有的).rnd文件。如果我改回1024位证书,Apache启动完美,一切正常。
我遇到了这个 FAQ 条目,指出 Apache 不支持 2048 位密钥,但我也遇到了这篇博客文章,指出 FAQ 条目必须是旧的(许多条目看起来相当古老),因为它可以完美地运行阿帕奇 2.2.11。
谁能建议为什么 Apache 可能会因新证书而失败?
像大多数其他人一样,我们的存储库服务器需要尽快禁用 SSLv3(和 v2)。
然而,这样做似乎破坏了我们的 git 客户端——至少,在 RHEL5 上(来自我的 FreeBSD 桌面的连接工作正常)。即使是最新的 git (2.1.2) 也失败了,将 OpenSSL 库升级到供应商的最新版本也无济于事。
然而!相同的 git-client 对 github.com 工作得很好——而且 github.com 也已经禁用了 SSLv3。通过反复试验,我将我们服务器的(Apache)SSL 配置设置为与 github 的配置相匹配:
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite "AES128-SHA AES256-SHA RC4-SHA"
Run Code Online (Sandbox Code Playgroud)
通过sslscan在我们的服务器和 github 上运行,我得到了接受和拒绝的相同密码列表。但是 git 继续失败:
% git clone https://git.example.net/git/puppet-hiera
Cloning into 'puppet-hiera'...
* Couldn't find host git.example.net in the .netrc file, using defaults
* About to connect() to git.example.net port 443
* Trying 10.89.8.27... * connected
* Connected to git.example.net (10.89.8.27) …Run Code Online (Sandbox Code Playgroud) 我最近购买了 SSL 证书。证书的的CommonName(CN)是www.mydomain.com和具有若干AlternativeNames如subdomain1.mydomain.com,subdomain2.mydomain.com等
我已经使用 Apache 2.2.17 和 mod_ssl 在服务器上安装了它,一切正常,除了我收到一条警告:
[warn] RSA server certificate CommonName (CN) `www.mydomain.com` does NOT match server name!?
Run Code Online (Sandbox Code Playgroud)
这是因为ServerName被定义为subdomain1.mydomain.com。证书仍然有效,但我可以做些什么来消除警告?或者我可以忽略它吗?
我知道有大量关于同一 IP 上多个 SSL 的帖子,但我保证我不会打败死马。我的问题很清楚。首先介绍一下背景...
我们的组织有几个电子商务网站。所有这些站点都运行在同一个 IP 上,使用 SNI 作为基于名称的虚拟主机。在大多数情况下,这很好用。但是,在某些浏览器(ie7 / ie8,但出于某种原因仅在特定机器上)中,我们收到报告称用户看到域与 SSL 证书不匹配。原来他们看到的是按字母顺序排列的第一个 SSL 主机的 SSL 证书,因为 Apache 首先解析 IP 地址,然后抓取它认为是正确的虚拟主机文件。
我对 SSL 协议做了一些实验,发现如果我这样设置它 (ssl.conf):
SSL 协议 TLSv1
然后我只是在 IE 中找不到任何 https 域。
如果我在 ports.conf 中设置 SSLStrictSNIVHostCheck
SSLStrictSNIVHostCheck on
然后我会在有问题的浏览器中获得拒绝的权限。
问题显然是 IE 不支持或不使用 TLSv1 协议或 SNI,而这两者都是需要的。所以我的问题是...
我是否可以进行配置更改以支持 IE,也许在不同的协议下,或者是我唯一的选择为每个需要 SSL 的虚拟主机使用单独的 IP?
提前致谢 = )
我想我已经排序了(主要是由于问题How to redirect non-www to www without hardcoding using .htaccess?),但我仍然不完全理解一些事情。
我想强制所有到我的服务器的非 SSL 连接都路由到 SSL。我只有一个虚拟主机(并且在服务器的生命周期内可靠地保持这种情况),但我想避免对域名进行硬编码,部分原因是httpd.conf为了暂存和生产的文件保持相同。
我知道我可以强制请求使用 SSL 和mod_rewrite类似的规则
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
或者
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
不过,我有两个相对简单的问题:
RewriteCond出于任何原因,我是否应该更喜欢这些陈述中的一个?据推测,如果我使用该%{SERVER_PORT}变量,任何连接,例如,端口 8000 将继续以明文方式提供服务?有什么原因我应该避免使用%{HTTPS}我忽略的变量吗?%{HTTP_HOST}中的该变量是否RewriteRule会受到尊重并自动替换Host:来自请求的任何标头?在某些情况下这可能不起作用吗?以防万一,我们在 RedHat 上运行 Apache 2,mod_ssl站点使用 Drupal 7。
对不起,这是一个相对愚蠢的问题;Apache 系统管理员绝不是我工作的核心部分,所以我正在尽我所能地努力解决。谢谢大家!
出于安全原因,应将 Web 应用程序的身份验证迁移到 SSL 客户端证书。应该可以使用用户名/密码或 SSL 登录。此外,应允许来自内网的用户无需额外身份验证即可使用该应用程序。
我们尝试根据官方文档实现这个场景,但是没有成功。
这是我们当前的配置
<Directory /opt/app/system/html>
RedirectMatch permanent ^/$ /exec/login.pl
Options -Indexes +FollowSymLinks
SSLVerifyClient optional
SSLVerifyDepth 2
SSLRequire %{SSL_CLIENT_I_DN_O} eq "Company_O"
SSLOptions +FakeBasicAuth
Satisfy any
AuthType Basic
AuthName "Zugriffsschutz"
AuthBasicProvider file
AuthUserFile /etc/apache2/htaccess/iapp.passwd
require valid-user
Order allow,deny
Allow from 10.20.0.0/255.255.0.0
Allow from 10.144.100
</Directory>
Run Code Online (Sandbox Code Playgroud)
使用此配置,甚至不需要客户端证书。如果我们删除基本身份验证配置,则 SSL 客户端身份验证运行良好。
我有一个 centos 7 服务器。我使用 IUS 存储库 ( https://ius.io/ )从 apache 2.4.6 切换到 apache 2.4.25 。我的目标是用一个 IP 支持多个 SSL 证书。
我已经安装:
apache 现在是否启用了 SNI?
或者我是否必须像文档(https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI)一样使用 ./configure --with-ssl=/path/to/your/openssl 从头开始构建它?
感谢您的时间。
mod-ssl ×10
apache-2.2 ×6
ssl ×4
apache-2.4 ×2
mod-rewrite ×2
sni ×2
curl ×1
encryption ×1
git ×1
github ×1
httpd ×1
mod-auth ×1
openssl ×1
ubuntu ×1
ubuntu-12.04 ×1