jboss 5 中通过 apache mod_proxy 和 ajp 访问 https root webapp

jboss 5 中通过 apache mod_proxy 和 ajp 访问 https root webapp

我的服务器上安装了 apache 2.2.3 和 jboss 5.1,在 apache 中我有 2 个 php+mysql 应用程序,在 jboss 中我有根应用程序 (/) liferay 门户。我使用 mod_proxy 来访问 jboss 应用程序:

<VirtualHost server_ip:80>
ServerName intranet.mycompany.com
ProxyPreserveHost On
ProxyPass / balancer://jbosscluster/
ProxyPassReverse / http://server_ip:8080
</VirtualHost>

但现在我必须在 intranet.mycompany.com 中启用 https,但我不知道在哪里配置 ssl,是在 apache 中,还是在 jboss 中,还是两者中。我尝试在 jboss 的 server.xml 中使用 keytool 生成自签名证书,但 apache 不会转发到https://服务器 IP:8443

我将非常感谢你的帮助。

答案1

如果所有内容都在同一台服务器上,您需要做的就是在 Apache 中设置 SSL - 确保已安装 mod_ssl 并使用默认配置样式使其运行。Apache <=> JBoss 通信将像往常一样在同一台服务器内部进行,并且未加密。

给定一个安装了 mod_ssl 包的标准 Linux(例如 CentOS)框:

# SSL Basics
LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialog  builtin
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

<VirtualHost _default_:443>
  ...config stuff...
  ServerName intranet.mycompany.com
  ProxyPreserveHost On
  ProxyPass / balancer://jbosscluster/
  ProxyPassReverse / http://127.0.0.1:8080

  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
  SSLCertificateFile /path/to/server.pem
  SSLCertificateKeyFile /path/to/server.pem

  <Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
  </Files>

  SetEnvIf User-Agent ".*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"

  ...more config stuff...
</VirtualHost>

文件 server.pem 包含未加密的服务器密钥和从上游机构返回的服务器证书。

/usr/bin/openssl genrsa -des3 1024 > server.key.encrypted
/usr/bin/openssl rsa -in server.key.encrypted -out server.key

/usr/bin/openssl req -new -key server.key -out server.csr

cat server.key > server.pem
cat server.crt >> server.pem

这是基本思想 —— server.crt 是您在向 Thawte 等机构提供 server.csr 文件(和钱)后,他们返回给您的文件。

答案2

troyengel 的回答将为您提供通过 Apache 配置的 HTTPS 访问权限,但如果我正确理解了您的问题,您是否需要intranet.mycompany.com仅通过 HTTPS 访问,而不是通过 HTTP 访问?

如果是这种情况,我会将您现有的 VirtualHost 声明修改为类似以下内容:

<VirtualHost server_ip:80>
    ServerName intranet.mycompany.com

    RewriteEngine On

    RewriteCond %{HTTPS} !=on
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</VirtualHost>

这是对 troyengel 的 SSL VirtualHost 配置的补充。这应该会将所有内容重定向到http://intranet.mycompany.com->https://intranet.mycompany.com自动保留请求的 URI。

相关内容