在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境(4)

2.2.5 利用 openssl 生成 HTTPS 连接所需的认证信息

由于运行 Reverse Proxy 的 Apache 服务器在客户端看来是一台实际的 Web 服务器,因此在进行 HTTPS 连接时,客户端需要验证其 SSL 签名的有效性。这样,我们需要在上述配置好的 Apache 服务器中加入 SSL 认证信息,才能保证客户端的 HTTPS 应用程序能够正常运行。

自签名(self-signed)的 SSL 认证文件的生成

首先是生成根证书文件 ca.crt

# openssl genrsa -des3 -out ca.key 4096

# openssl req -new -x509 -days 365 -key ca.key -out ca.crt

第一步是生成一个根证书的 key 文件,系统会要求输入 pass phase, 记下输入的密码,这一密码会在后面多次用到。而第二步则将使用这个 key 文件来生成根证书,这一步执行时系统会要求输入许多根证书的信息,值得注意的是 Common Name(CN),这一步中输入的 CN 值应与下一步生成服务器证书时输入的不同。

接着需要生成服务器证书签名请求(Certificate Signing Request)文件 server.csr,步骤与生成根证书文件类似。

# openssl genrsa -des3 -out server.key 4096

# openssl req -new -key server.key -out server.csr

同样,在第二步中会要求输入一系列的服务器信息,这里的 Common Name(CN) 应与客户端访问该服务器时使用的地址相同,例如:

客户端使用 访问该服务器时,这里的 CN 应为 proxyhost.com

客户端使用 [2002:9ba:b4e:6::3]/ 访问该服务器时,这里的 CN 应为 [2002:9ba:b4e:6::3]

为何需要相同,是因为客户端的 HTTPS 连接程序会验证该服务器提供的证书有效性,若证书中的 CN 与实际客户端访问的主机名不同,客户端会抛出 INVALID_CN 错误。

最后,利用前面生成的根证书文件 ca.crt 来签署(Sign)服务器证书签名请求 server.csr。

# openssl x509 -req -days 365 -in server.csr -CA ca.crt \

-CAkey ca.key -set_serial 01 -out server.crt

将上述生成的四个证书相关文件(ca.crt,ca.key,server.crt,server.key)拷入 Apache 的配置文件夹中,接下来将会把这些文件的路径和一些配置信息加入到 Apache 配置文件中。

Listen 443

AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl    .crl

SSLPassPhraseDialog  builtin

SSLSessionCache "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"

SSLSessionCacheTimeout  300

SSLMutex  "file:logs/ssl_mutex"

NameVirtualHost *:443

<VirtualHost *:443>

DocumentRoot "apache2/htdocs"

ServerName ipv6-server-proxy

ServerAdmin you@example.com

ErrorLog "ssl-error_log"

TransferLog "ssl-access_log"

SSLEngine on

SSLProtocol -all +TLSv1 +SSLv3

SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM

SSLCertificateFile "server.crt"

SSLCertificateKeyFile "server.key"

<Directory "/usr/local/apache2/cgi-bin">

SSLOptions +StdEnvVars

</Directory>

BrowserMatch ".*MSIE.*" \

nokeepalive ssl-unclean-shutdown \

downgrade-1.0 force-response-1.0

CustomLog "logs/ssl_request_log" \

"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

SSLProxyEngine on

ProxyRequests off

<Proxy *>

Order deny,allow

Allow from all

</Proxy>

ProxyPass /request

</VirtualHost>

这里再次使用了 ProxyPass 来建立代理服务。

正如上一节2.2.4中所述,这里建议将这些配置信息写入 httpd-ssl.conf 中,然后在 httpd.conf 中加入如下一行将其包含。

Include httpd-ssl.conf

配置完成后,即可启动/重启 Apache 服务器来使得刚才的配置生效。

# /etc/init.d/httpd restart

客户端 HTTPS 连接的考虑

由于这里采用的是自签名(Self-signed)的方式来生成服务器的认证文件,客户端使用 HTTPS 连接到该代理服务器时,会出现认证错误的提示。这就需要将这里生成的证书加入到客户端的可信站点列表中。具体的添加方式因采用的系统不同而各异。就 Windows 平台的 IE 而言,可以将上述生成的 ca.crt 及 server.crt 文件加入到 IE 的可信站点中,这会影响到所有利用 IE 提供的 wininet 库进行 HTTP 应用开发的程序。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyxwjs.html