标签: mod-ssl

SSL_CLIENT_CERT_CHAIN 未传递到后端服务器

我已配置客户端证书并在 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-2.2

5
推荐指数
1
解决办法
5207
查看次数

如何从现有 SSL 环境变量创建自定义标头?

好吧,我已经花了一整天的时间——

我正在使用带有 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 环境变量中的最后一个非空白字符。

mod-rewrite reverse-proxy mod-ssl apache-2.2

5
推荐指数
1
解决办法
4989
查看次数

浏览器支持的 SSL 密码列表

不确定这是否是将其发布到的合适 SE,但这里是:是否有一些有关各种浏览器支持哪些 SSL 密码的在线参考?基本上,我对通过确保较低的密钥长度和旧算法(DES 和 3DES)不用于与客户端的通信来强化系统感兴趣。

这样做的方法(至少使用 Apache mod_ssl)似乎是控制服务器在握手期间提供的支持的密码。

我希望能够回答诸如“如果我强制使用 AES256,哪些浏览器会损坏?”之类的问题。

对于某些站点,这是可取的,因为它为我们提供了有关对话机密性的一些保证。如果他们的浏览器只支持被认为是不安全的连接,我们希望会话中断,以便他们被迫使用更现代/更强大的客户端。

ssl encryption httpd mod-ssl

5
推荐指数
1
解决办法
4296
查看次数

Apache 2.2 使用 2048 位 RSA 密钥因“无法写入‘随机状态’”而失败(1024 位工作正常)

我通常对 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 可能会因新证书而失败?

mod-ssl apache-2.2 ubuntu-12.04

5
推荐指数
0
解决办法
2015
查看次数

为什么在服务器禁用 SSLv3 后 git 停止工作?

像大多数其他人一样,我们的存储库服务器需要尽快禁用 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 mod-ssl git curl github

5
推荐指数
1
解决办法
5750
查看次数

Apache ServerName 使用 AlternativeName 而不是 CommonName

我最近购买了 SSL 证书。证书的的CommonName(CN)是www.mydomain.com和具有若干AlternativeNames如subdomain1.mydomain.comsubdomain2.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。证书仍然有效,但我可以做些什么来消除警告?或者我可以忽略它吗?

ssl mod-ssl ssl-certificate apache-2.2

4
推荐指数
1
解决办法
465
查看次数

同一 IP 上存在多个 SSL 的问题,但仅限于特定客户端

我知道有大量关于同一 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?

提前致谢 = )

ubuntu ssl mod-ssl sni apache-2.2

4
推荐指数
1
解决办法
2529
查看次数

在 Apache 中强制使用 SSL 而不对主机名进行硬编码

我已经排序了(主要是由于问题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)

不过,我有两个相对简单的问题:

  1. RewriteCond出于任何原因,我是否应该更喜欢这些陈述中的一个?据推测,如果我使用该%{SERVER_PORT}变量,任何连接,例如,端口 8000 将继续以明文方式提供服务?有什么原因我应该避免使用%{HTTPS}我忽略的变量吗?
  2. 语句%{HTTP_HOST}中的该变量是否RewriteRule会受到尊重并自动替换Host:来自请求的任何标头?在某些情况下这可能不起作用吗?

以防万一,我们在 RedHat 上运行 Apache 2,mod_ssl站点使用 Drupal 7。

对不起,这是一个相对愚蠢的问题;Apache 系统管理员绝不是我工作的核心部分,所以我正在尽我所能地努力解决。谢谢大家!

mod-rewrite mod-ssl apache-2.2

4
推荐指数
1
解决办法
7926
查看次数

使用客户端 SSL 证书或基本身份验证进行身份验证

出于安全原因,应将 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 客户端身份验证运行良好。

mod-ssl mod-auth apache-2.4

4
推荐指数
1
解决办法
6956
查看次数

如何检查 apache 的 SNI(服务器名称指示)可用性?

我有一个 centos 7 服务器。我使用 IUS 存储库 ( https://ius.io/ )从 apache 2.4.6 切换到 apache 2.4.25 。我的目标是用一个 IP 支持多个 SSL 证书。

我已经安装:

  • Apache/2.4.25 (CentOS)
  • httpd24u-mod_ssl-2.4.25-3.ius.centos7.x86_64
  • openssl-1.0.1e-60.el7_3.1.x86_64

apache 现在是否启用了 SNI?

或者我是否必须像文档(https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI)一样使用 ./configure --with-ssl=/path/to/your/openssl 从头开始​​构建它?

感谢您的时间。

mod-ssl openssl ssl-certificate sni apache-2.4

4
推荐指数
1
解决办法
8706
查看次数