在 Oracle® Solaris 11.2 中确保网络安全

退出打印视图

更新时间: 2014 年 9 月
 
 

如何配置 SSL 内核代理以回退到 Apache 2.2 SSL

在此过程中,从头配置 Apache 2.2 Web 服务器并将 SSL 内核代理 配置为主 SSL 会话处理机制。如果客户机提供的 SSL 加密算法集合不包含 SSL 内核代理 提供的加密算法,则 Apache 2.2 Web 服务器将用作回退机制。此过程可实现Figure 3–2 中所示的复杂方案。

开始之前

您必须承担 root 角色。有关更多信息,请参见在 Oracle Solaris 11.2 中确保用户和进程的安全 中的使用所指定的管理权限

  1. 在 Apache 2.2 Web 服务器上,创建要由服务器的 SSL 内核代理使用的密钥证书。
    1. 生成证书签名请求 (Certificate Signing Request, CSR)。

      以下命令为 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

      注 -  要符合 FIPS 140 要求,RSA 密钥长度至少为 2048 位。有关更多信息,请参见Using a FIPS 140 Enabled System in Oracle Solaris 11.2

      有关更多信息,请参见 openssl(5) 手册页。

    2. 向证书颁发机构 (certificate authority, CA) 发送 CSR。
    3. 使用 CA 的签名证书替换 webcert.pem 文件。
  2. 为 SSL 内核代理配置口令短语和公钥/私钥证书。
    1. 创建、保存和保护口令短语。
      # echo "RefrigeratorsAreCool" > /root/kssl.pass
      # chmod 440 /root/kssl.pass; chown root:webservd /root/kssl.pass

      注 - 口令短语不能包含任何空格字符。
    2. 将私钥证书和公钥证书合并到一个文件中。
      # cat /root/webcert.pem /root/webkey.pem > /root/webcombo.pem
    3. 为 SSL 内核代理配置公钥/私钥证书和口令短语。
      # ksslcfg create -f pem -i /root/webcombo.pem -x 8443 -p /root/kssl.pass 443
  3. 将 Web 服务器配置为在端口 8443 上侦听未加密的通信。

    /etc/apache2/2.2/httpd.conf 文件中编辑 Listen 行。

    # pfedit /etc/apache2/2.2/httpd.conf
    ...
    ## Listen 80
    Listen 8443
  4. 将 SSL 模块模板 ssl.conf 添加到 Apache 配置目录。
    # cp /etc/apache2/2.2/samples-conf.d/ssl.conf /etc/apache2/2.2/ssl.conf

    该模块为加密连接添加侦听端口 443

  5. 使 Web 服务器可解密 /root/kssl.pass 中的口令短语。
    1. 创建一个读取 kssl.pass 文件的 shell 脚本。
      # pfedit /root/put-passphrase.sh
      #!/usr/bin/ksh -p
      ## Reads SSL 内核代理 passphrase
      /usr/bin/cat /root/kssl.pass
    2. 使脚本可执行并保护该文件。
      # chmod 500 /root/put-passphrase.sh
      # chown webservd:webservd /root/put-passphrase.sh
    3. ssl.conf 文件中修改 SSLPassPhraseDialog 参数以调用 shell 脚本。
      # pfedit /etc/apache2/2.2/ssl.conf
      ...
      ## SSLPassPhraseDialog  builtin
      SSLPassPhraseDialog exec:/root/put-passphrase.sh
  6. 将 Web 服务器的公钥和私钥证书置于正确位置。

    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
  7. 启用 Apache 服务。
    # svcadm enable apache22
  8. (u53ef选)验证两个端口是否正在运行。

    使用 openssl s_clientkstat 命令查看包。

    1. 使用可供 SSL 内核代理使用的加密算法。
      # openssl s_client -cipher RC4-SHA -connect web-server:443

      kstat 计数器 kssl_full_handshakes 增加 1 可确认 SSL 内核代理 已对 SSL 会话进行处理。

      # kstat -m kssl -s kssl_full_handshakes
    2. 使用不可供 SSL 内核代理使用的加密算法。
      # 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