跳过导航链接 | |
退出打印视图 | |
在 Oracle Solaris 11.1 中保护网络安全 Oracle Solaris 11.1 Information Library (简体中文) |
如何配置 Apache 2.2 Web 服务器以使用 SSL 内核代理
如何配置 Oracle iPlanet Web Server 以使用 SSL 内核代理
以下过程说明如何配置 Web 服务器以使用 SSL 内核代理:
SSL 内核代理可加速 Apache 2.2 Web 服务器上的 SSL 包处理。此过程可实现图 3-1 中所示的简单方案。
开始之前
已配置 Apache 2.2 Web 服务器。Oracle Solaris 中包含该 Web 服务器。
您必须承担 root 角色。
# svcadm disable svc:/network/http:apache22
如果只在 ssl.conf 文件中指定了 SSLCertificateFile 参数,则指定的文件可直接用于 SSL 内核代理。
如果还指定了 SSLCertificateKeyFile 参数,则必须合并证书文件和私钥文件。运行与下面类似的命令以合并文件:
# cat cert.pem key.pem > cert-and-key.pem
有关完整的选项列表,请参见 ksslcfg(1M) 手册页。必须提供的参数遵循:
key-format-与 -f 选项一起定义证书和密钥格式。对于 SSL 内核代理,支持的格式为 pkcs11、pem 和 pkcs12。
key-and-certificate-file-与 -i 选项一起设置存储 pem 和 pkcs12key-format 选项的服务器密钥和证书的文件位置。
password-file-与 -p 选项一起获取用于加密 pem 或 pkcs12key-format 选项的密钥的口令。对于 pkcs11,该口令用于验证 PKCS #11 令牌。必须使用 0400 权限保护口令文件。无人参与的重新引导需要该文件。
proxy-port-与 -x 选项一起设置 SSL 代理端口。必须指定标准端口 80 之外的其他端口。Web 服务器在 SSL 代理端口上侦听未加密纯文本流量。通常,此值为 8443。
ssl-port-为 SSL 内核代理指定侦听端口。通常,此值为 443。
使用以下格式之一指定 SSL 代理端口及关联的参数:
# ksslcfg create -f key-format -i key-and-certificate-file \ -p password-file -x proxy-port ssl-port
# ksslcfg create -f pkcs11 -T PKCS#11-token -C certificate-label \ -p password-file -x proxy-port ssl-port
# svcs svc:/network/ssl/proxy STATE STIME FMRI online 02:22:22 svc:/network/ssl/proxy:default
以下输出表明未创建服务实例:
svcs: Pattern 'svc:/network/ssl/proxy' doesn't match any instances STATE STIME FMRI
编辑 /etc/apache2/2.2/http.conf 文件并添加一行,以定义 SSL 代理端口。如果使用服务器的 IP 地址,Web 服务器将只在该接口上侦听。该行类似于以下内容:
Listen proxy-port
Web 服务器服务仅在启动 SSL 内核代理实例之后才能启动。以下命令将建立该相关性:
# svccfg -s svc:/network/http:apache22 svc:/network/http:apache22> addpg kssl dependency ...apache22> setprop kssl/entities = fmri:svc:/network/ssl/proxy:kssl-INADDR_ANY-443 ...apache22> setprop kssl/grouping = astring: require_all ...apache22> setprop kssl/restart_on = astring: refresh ...apache22> setprop kssl/type = astring: service ...apache22> end
# svcadm enable svc:/network/http:apache22
SSL 内核代理可加速 Oracle iPlanet Web Server 上的 SSL 包处理。此过程可实现图 3-1 中所示的简单方案。
开始之前
已安装并配置 Oracle iPlanet Web Server。可从 Oracle iPlanet Web Server 下载服务器。有关说明,请参见 Oracle iPLANET WEB SERVER 7.0.15。
您必须成为分配有 "Network Security"(网络安全)权限配置文件的管理员。有关更多信息,请参见《Oracle Solaris 11.1 管理:安全服务》中的"如何使用指定给您的管理权限"。
使用管理员 Web 界面停止服务器。有关说明,请参见 Oracle iPLANET WEB SERVER 7.0.15。
有关完整的选项列表,请参见 ksslcfg(1M) 手册页。有关必须提供的参数列表,请参见如何配置 Apache 2.2 Web 服务器以使用 SSL 内核代理中的步骤 3。
使用以下格式之一指定 SSL 代理端口及关联的参数:
# ksslcfg create -f key-format -i key-and-certificate-file \ -p password-file -x proxy-port ssl-port
# ksslcfg create -f pkcs11 -T PKCS#11-token -C certificate-label \ -p password-file -x proxy-port ssl-port
# svcs svc:/network/ssl/proxy STATE STIME FMRI online 02:22:22 svc:/network/ssl/proxy:default
有关说明,请参见 Oracle iPLANET WEB SERVER 7.0.15。
Web 服务器服务仅在启动 SSL 内核代理实例之后才能启动。以下命令将建立该相关性,假设 Web 服务器服务的 FMRI 为 svc:/network/http:webserver7:
# svccfg -s svc:/network/http:webserver7 svc:/network/http:webserver7> addpg kssl dependency ...webserver7> setprop kssl/entities = fmri:svc:/network/ssl/proxy:kssl-INADDR_ANY-443 ...webserver7> setprop kssl/grouping = astring: require_all ...webserver7> setprop kssl/restart_on = astring: refresh ...webserver7> setprop kssl/type = astring: service ...webserver7> end
# svcadm enable svc:/network/http:webserver7
在此过程中,从头配置 Apache 2.2 Web 服务器并将 SSL 内核代理配置为主 SSL 会话处理机制。如果客户机提供的 SSL 加密算法集合不包含 SSL 内核代理提供的加密算法,则 Apache 2.2 Web 服务器将用作回退机制。此过程可实现图 3-2 中所示的复杂方案。
开始之前
您必须承担 root 角色。有关更多信息,请参见《Oracle Solaris 11.1 管理:安全服务》中的"如何使用指定给您的管理权限"。
以下命令为 SSL 内核代理生成 CSR 及关联的私钥:
# cd /root # openssl req \ > -x509 -new \ > -subj "/C=CZ/ST=Prague region/L=Prague/CN=`hostname`" \ > -newkey rsa:2048 -keyout webkey.pem \ > -out webcert.pem Generating a 2048 bit RSA private key .+++ ........+++ writing new private key to 'webkey.pem' Enter PEM pass phrase: JohnnyCashIsCool Verifying - Enter PEM pass phrase: JohnnyCashIsCool # # chmod 440 /root/webcert.pem ; chown root:webservd /root/webcert.pem
有关更多信息,请参见 openssl(5) 手册页。
# echo "RefrigeratorsAreCool" > /root/kssl.pass # chmod 440 /root/kssl.pass; chown root:webservd /root/kssl.pass
注 - 口令短语不能包含空格。
# cat /root/webcert.pem /root/webkey.pem > /root/webcombo.pem
# ksslcfg create -f pem -i /root/webcombo.pem -x 8443 -p /root/kssl.pass 443
在 /etc/apache2/2.2/httpd.conf 文件中编辑 Listen 行。
# pfedit /etc/apache2/2.2/httpd.conf ... ## Listen 80 Listen 8443
# cp /etc/apache2/2.2/samples-conf.d/ssl.conf /etc/apache2/2.2/ssl.conf
该模块为加密连接添加侦听端口 443。
# pfedit /root/put-passphrase.sh #!/usr/bin/ksh -p ## Reads SSL kernel proxy passphrase /usr/bin/cat /root/kssl.pass
# chmod 500 /root/put-passphrase.sh # chown webservd:webservd /root/put-passphrase.sh
# pfedit /etc/apache2/2.2/ssl.conf ... ## SSLPassPhraseDialog builtin SSLPassPhraseDialog exec:/root/put-passphrase.sh
ssl.conf 文件中的 SSLCertificateFile 和 SSLCertificateKeyFile 参数值包含预期的位置和名称。您可以将证书复制或链接到正确位置。
# ln -s /root/webcert.pem /etc/apache2/2.2/server.crtSSLCertificateFile default location # ln -s /root/webkey.pem /etc/apache2/2.2/server.keySSLCertificateKeyFile default location
# svcadm enable apache22
使用 openssl s_client 和 kstat 命令查看包。
# openssl s_client -cipher RC4-SHA -connect web-server:443
kstat 计数器 kssl_full_handshakes 增加 1 可确认 SSL 内核代理已对 SSL 会话进行处理。
# kstat -m kssl -s kssl_full_handshakes
# openssl s_client -cipher CAMELLIA256-SHA -connect web-server:443
kstat 计数器 kssl_fallback_connections 增加 1 可确认包已到达,但 Apache Web 服务器已对 SSL 会话进行处理。
# kstat -m kssl -s kssl_fallback_connections
示例 3-1 配置 Apache 2.2 Web 服务器以使用 SSL 内核代理
以下命令将为使用 pem 密钥格式的 SSL 内核代理创建一个服务实例:
# ksslcfg create -f pem -i cert-and-key.pem -p kssl.pass -x 8443 443
SSL 内核代理在区域中工作时具有以下限制:
所有内核 SSL 管理都必须从全局区域中执行。全局区域管理员需要访问本地区域证书和密钥文件。使用 ksslcfg 命令在全局区域中配置服务实例后,便可以启动本地区域 Web 服务器。
配置实例时,必须使用 ksslcfg 命令来指定特定的主机名或 IP 地址。特别是,该实例无法为 IP 地址指定 INADDR_ANY。
开始之前
已在非全局区域中配置并启用 Web 服务器服务。
您必须成为分配有 "Network Security"(网络安全)和 "Zone Management"(区域管理)权限配置文件的管理员。有关更多信息,请参见《Oracle Solaris 11.1 管理:安全服务》中的"如何使用指定给您的管理权限"。
例如,要停止 apache-zone 区域中的 Apache Web 服务器,请运行以下命令:
apache-zone # svcadm disable svc:/network/http:apache22
要为 apache-zone 创建服务实例,请使用类似下面的命令:
# ksslcfg create -f pem -i /zone/apache-zone/root/keypair.pem \ -p /zone/apache-zone/root/skppass -x 8443 apache-zone 443
例如,启用 apache-zone 中的 Web 服务。
apache-zone # svcadm enable svc:/network/http:apache22