2012-11-05 80 views
1

我正在嘗試按照domain mode cluster中的說明在Jboss域模式羣集中設置SSL。在域模式下設置SSL mod_cluster JBOSS AS7

現在我需要在SSL中運行這些集羣節點。我在domain.xml中添加了以下配置,允許我在SSL上以域模式運行每個羣集。如果我有運行與膠印的100和200,然後我可以單獨在8543和8643上的HTTPS作爲默認端口JBoss的SSL訪問應用程序的兩個節點是8443

<subsystem xmlns="urn:jboss:domain:web:1.0" default-virtual-server="default-host"> 
      <connector name="http" protocol="HTTP/1.1" socket-binding="http" scheme="http" redirect-port="443"/> 
      <connector name="https" protocol="HTTP/1.1" socket-binding="https" scheme="https" enable-lookups="false" secure="true"> 
       <ssl name="ssl" password="mypassword" certificate-key-file="<path to truststore file>/jbossHttps.keystore" protocol="TLSv1" verify-client="true"/> 
      </connector> 

有相關添加系統屬性幾點建議和我也是這樣做的。

<system-properties> 
    <property name="javax.net.ssl.trustStore" value="<path to truststore file>"/> 
</system-properties> 

問題是我要找使用mod_cluster運行我通過HTTPS應用程序,以便訪問應用程序https://myapplication/

我在這裏缺少什麼額外的配置變化?

回答

1

最後經過幾個小時的搜索後,沒有可用的單個文檔/信息源。最後,以下詳細步驟有助於配置mod_cluster + SSL + jboss7.x

生成服務器證書

注意:如果你已經創建的證書,然後這部分可以忽略不計。

生成服務器上運行的Apache + mod_ssl的 首先對私有密鑰,生成運行使用OpenSSL的命令,如下圖所示Apache網絡服務器的Linux服務器上的私鑰。

[[email protected] jbossuser]# mkdir /etc/httpd/conf/certs 
[[email protected] jbossuser]# openssl genrsa -des3 -out www.xyz.com.key 1024 

生成證書籤名請求(CSR) 使用此鍵生成以上,你應該使用生成的OpenSSL,如下所示的證書請求文件(CSR)。

[[email protected] jbossuser]# openssl req -new -key www.xyz.com.key -out www.xyz.com.csr 

生成自簽名證書 出於測試目的,您可以生成一個自簽名的SSL證書有效期爲使用OpenSSL的指令1年爲如下圖所示。

[[email protected] jbossuser]# openssl x509 -req -days 365 -in www.xyz.com.csr -signkey www.xyz.com.key -out www.xyz.com.crt 

Apache的SSL配置

如果您已經mod_cluster配置爲監聽端口80,然後刪除虛擬主機條目並進行以下配置。創建ssl.conf如下。

[[email protected] jbossuser]# vi /etc/httpd/conf.d/ssl.conf 
This is the Apache server configuration file providing SSL support. 
# It contains the configuration directives to instruct the server how to 
# serve pages over an https connection. For detailing information about these 
# directives see <URL:http://httpd.apache.org/docs/2.2/mod/mod_ssl.html> 
# 
# Do NOT simply read the instructions in here without understanding 
# what they do. They're here only as hints or reminders. If you are unsure 
# consult the online docs. You have been warned. 
# 

LoadModule ssl_module modules/mod_ssl.so 

# 
# When we also provide SSL we have to listen to the 
# the HTTPS port in addition. 
# 
Listen 1.1.1.1:443 

## 
## SSL Global Context 
## 
## All SSL configuration in this context applies both to 
## the main server and all SSL-enabled virtual hosts. 
## 

# Pass Phrase Dialog: 
# Configure the pass phrase gathering process. 
# The filtering dialog program (`builtin' is a internal 
# terminal dialog) has to provide the pass phrase on stdout. 
SSLPassPhraseDialog builtin 

# Inter-Process Session Cache: 
# Configure the SSL Session Cache: First the mechanism 
# to use and second the expiring timeout (in seconds). 
SSLSessionCache   shmcb:/var/cache/mod_ssl/scache(512000) 
SSLSessionCacheTimeout 300 

# Semaphore: 
# Configure the path to the mutual exclusion semaphore the 
# SSL engine uses internally for inter-process synchronization. 
SSLMutex default 

# Pseudo Random Number Generator (PRNG): 
# Configure one or more sources to seed the PRNG of the 
# SSL library. The seed data should be of good random quality. 
# WARNING! On some platforms /dev/random blocks if not enough entropy 
# is available. This means you then cannot use the /dev/random device 
# because it would lead to very long connection times (as long as 
# it requires to make more entropy available). But usually those 
# platforms additionally provide a /dev/urandom device which doesn't 
# block. So, if available, use this one instead. Read the mod_ssl User 
# Manual for more details. 
SSLRandomSeed startup file:/dev/urandom 256 
SSLRandomSeed connect builtin 
#SSLRandomSeed startup file:/dev/random 512 
#SSLRandomSeed connect file:/dev/random 512 
#SSLRandomSeed connect file:/dev/urandom 512 

# 
# Use "SSLCryptoDevice" to enable any supported hardware 
# accelerators. Use "openssl engine -v" to list supported 
# engine names. NOTE: If you enable an accelerator and the 
# server does not start, consult the error logs and ensure 
# your accelerator is functioning properly. 
# 
SSLCryptoDevice builtin 
#SSLCryptoDevice ubsec 

## 
## SSL Virtual Host Context 
## 

<VirtualHost _default_:443> 

# General setup for the virtual host, inherited from global configuration 
#DocumentRoot "/var/www/html" 
#ServerName www.example.com:443 

# Use separate log files for the SSL virtual host; note that LogLevel 
# is not inherited from httpd.conf. 
ErrorLog logs/ssl_error_log 
TransferLog logs/ssl_access_log 
LogLevel warn 

# SSL Engine Switch: 
# Enable/Disable SSL for this virtual host. 
SSLEngine on 

# SSL Protocol support: 
# List the enable protocol levels with which clients will be able to 
# connect. Disable SSLv2 access by default: 
SSLProtocol all -SSLv2 

# SSL Cipher Suite: 
# List the ciphers that the client is permitted to negotiate. 
# See the mod_ssl documentation for a complete list. 
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW 

# Server Certificate: 
# Point SSLCertificateFile at a PEM encoded certificate. If 
# the certificate is encrypted, then you will be prompted for a 
# pass phrase. Note that a kill -HUP will prompt again. A new 
# certificate can be generated using the genkey(1) command. 
SSLCertificateFile /etc/httpd/conf/certs/www.xyz.com.crt 

# Server Private Key: 
# If the key is not combined with the certificate, use this 
# directive to point at the key file. Keep in mind that if 
# you've both a RSA and a DSA private key you can configure 
# both in parallel (to also allow the use of DSA ciphers, etc.) 
SSLCertificateKeyFile /etc/httpd/conf/certs/www.xyz.com.key 

# Server Certificate Chain: 
# Point SSLCertificateChainFile at a file containing the 
# concatenation of PEM encoded CA certificates which form the 
# certificate chain for the server certificate. Alternatively 
# the referenced file can be the same as SSLCertificateFile 
# when the CA certificates are directly appended to the server 
# certificate for convinience. 
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt 

# Certificate Authority (CA): 
# Set the CA certificate verification path where to find CA 
# certificates for client authentication or alternatively one 
# huge file containing all of them (file must be PEM encoded) 
#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt 

# Client Authentication (Type): 
# Client certificate verification type and depth. Types are 
# none, optional, require and optional_no_ca. Depth is a 
# number which specifies how deeply to verify the certificate 
# issuer chain before deciding the certificate is not valid. 
#SSLVerifyClient require 
#SSLVerifyDepth 10 

# Access Control: 
# With SSLRequire you can do per-directory access control based 
# on arbitrary complex boolean expressions containing server 
# variable checks and other lookup directives. The syntax is a 
# mixture between C and Perl. See the mod_ssl documentation 
# for more details. 
#<Location /> 
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \ 
#   and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ 
#   and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \ 
#   and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \ 
#   and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20  ) \ 
#   or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/ 
#</Location> 

# SSL Engine Options: 
# Set various options for the SSL engine. 
# o FakeBasicAuth: 
#  Translate the client X.509 into a Basic Authorisation. This means that 
#  the standard Auth/DBMAuth methods can be used for access control. The 
#  user name is the `one line' version of the client's X.509 certificate. 
#  Note that no password is obtained from the user. Every entry in the user 
#  file needs this password: `xxj31ZMTZzkVA'. 
# o ExportCertData: 
#  This exports two additional environment variables: SSL_CLIENT_CERT and 
#  SSL_SERVER_CERT. These contain the PEM-encoded certificates of the 
#  server (always existing) and the client (only existing when client 
#  authentication is used). This can be used to import the certificates 
#  into CGI scripts. 
# o StdEnvVars: 
#  This exports the standard SSL/TLS related `SSL_*' environment variables. 
#  Per default this exportation is switched off for performance reasons, 
#  because the extraction step is an expensive operation and is usually 
#  useless for serving static content. So one usually enables the 
#  exportation for CGI and SSI requests only. 
# o StrictRequire: 
#  This denies access when "SSLRequireSSL" or "SSLRequire" applied even 
#  under a "Satisfy any" situation, i.e. when it applies access is denied 
#  and no other module can change it. 
# o OptRenegotiate: 
#  This enables optimized SSL connection renegotiation handling when SSL 
#  directives are used in per-directory context. 
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire 
<Files ~ "\.(cgi|shtml|phtml|php3?)$"> 
    SSLOptions +StdEnvVars 
</Files> 
<Directory "/var/www/cgi-bin"> 
    SSLOptions +StdEnvVars 
</Directory> 

# SSL Protocol Adjustments: 
# The safe and default but still SSL/TLS standard compliant shutdown 
# approach is that mod_ssl sends the close notify alert but doesn't wait for 
# the close notify alert from client. When you need a different shutdown 
# approach you can use one of the following variables: 
# o ssl-unclean-shutdown: 
#  This forces an unclean shutdown when the connection is closed, i.e. no 
#  SSL close notify alert is send or allowed to received. This violates 
#  the SSL/TLS standard but is needed for some brain-dead browsers. Use 
#  this when you receive I/O errors because of the standard approach where 
#  mod_ssl sends the close notify alert. 
# o ssl-accurate-shutdown: 
#  This forces an accurate shutdown when the connection is closed, i.e. a 
#  SSL close notify alert is send and mod_ssl waits for the close notify 
#  alert of the client. This is 100% SSL/TLS standard compliant, but in 
#  practice often causes hanging connections with brain-dead browsers. Use 
#  this only for browsers where you know that their SSL implementation 
#  works correctly. 
# Notice: Most problems of broken clients are also related to the HTTP 
# keep-alive facility, so you usually additionally want to disable 
# keep-alive for those clients, too. Use variable "nokeepalive" for this. 
# Similarly, one has to force some clients to use HTTP/1.0 to workaround 
# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and 
# "force-response-1.0" for this. 
SetEnvIf User-Agent ".*MSIE.*" \ 
     nokeepalive ssl-unclean-shutdown \ 
     downgrade-1.0 force-response-1.0 

# Per-Server Logging: 
# The home of a custom SSL log file. Use this when you want a 
# compact non-error SSL logfile on a virtual host basis. 
CustomLog logs/ssl_request_log \ 
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 

</VirtualHost> 

LoadModule slotmem_module modules/mod_slotmem.so 
LoadModule manager_module modules/mod_manager.so 
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so 
LoadModule advertise_module modules/mod_advertise.so 

NameVirtualHost 1.1.1.1:443 
MemManagerFile /var/cache/httpd 

<VirtualHost 1.1.1.1:443> 
    <Location /mod_cluster_manager> 
     SetHandler mod_cluster-manager 
     Order deny,allow 
     Allow from all 
    </Location> 
    KeepAliveTimeout 60 
    MaxKeepAliveRequests 0 
    ManagerBalancerName testcluster 
    AdvertiseFrequency 5 

    DocumentRoot "/var/www/html" 
    ErrorLog logs/ssl_error_log 
    TransferLog logs/ssl_access_log 
    LogLevel warn 

    SSLEngine on 

    SSLProtocol all -SSLv2 

    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW 

    SSLCertificateFile /etc/httpd/conf/certs/www.xyz.com.crt 
    SSLCertificateKeyFile /etc/httpd/conf/certs/www.xyz.com.key 
    SSLCertificateChainFile /etc/httpd/conf/certs/www.xyz.com.crt 
    <Files ~ "\.(cgi|shtml|phtml|php3?)$"> 
     SSLOptions +StdEnvVars 
    </Files> 
    <Directory "/var/www/cgi-bin"> 
     SSLOptions +StdEnvVars 
    </Directory> 
    <Directory "/var/www/html"> 
     AllowOverride None 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

一旦這些更改後,你應該能夠通過SSL [https://1.1.1.1/][1]

升級的JBoss mod_cluster和SSL

達到到Apache Jboss 7.1.1.Final不支持mod_cluster和SSL配置。它基本上忽略了對mod_cluster的SSL的證書配置。我們需要升級到更高的Jboss如 下載更高的源標籤從Git的https://github.com/jbossas/jboss-as/tree/7.1.3.Final 如果你已經有Maven的3安裝

$ mvn install 

如果你沒有的Maven 3

$ ./build.sh 

創建自簽名的證書使用密鑰工具

產生密鑰對到密鑰庫(JKS),用於RSA:

[[email protected] jbossuser]# keytool -genkey -keyalg RSA -keysize 2048 -keystore xyz_keystore.jks -alias xyz 

導入服務器證書密鑰存儲進

[[email protected] jbossuser]# keytool -import -alias xyz -file /etc/httpd/conf/certs/www.xyz.com.crt -storetype JKS -keystore /home/jboss-as-7.1.1.final/keystore/xyz_keystore.jks 

要列出密鑰庫的內容

[[email protected] jbossuser]# keytool -list -keystore /home/jboss-as-7.1.1.final/keystore/xyz_keystore.jks 
Jboss mod_cluster ssl configuration 

domain.xml中添加系統特性的信任和密碼。

<property name="javax.net.ssl.trustStore" value="<path to keystore>/keystore/xyz_keystore.jks"/> 
<property name="javax.net.ssl.trustStorePassword" value="xyzmanish"/> 

將mod_cluster子系統修改爲現在監聽444並使用我們配置的密鑰庫。

<subsystem xmlns="urn:jboss:domain:modcluster:1.1"> 
    <mod-cluster-config advertise-socket="modcluster" connector="ajp" proxy-list="1.1.1.1:443" advertise-security-key="xyzmanish"> 
    <dynamic-load-provider> 
     <load-metric type="busyness"/> 
    </dynamic-load-provider> 
    <!-- SSL/TLS configuration for mod_cluster advertise-security-key --> 
    <ssl password="xyzmanish" key-alias="xyz" ca-certificate-file="<path to key store>/keystore/xyz_keystore.jks" certificate-key-file="<path to key store>/keystore/xyz_keystore.jks" cipher-suite="ALL" protocol="TLSv1"/> 
    </mod-cluster-config> 
</subsystem>> 

一旦你做出這個改變,重新啓動JBOSS服務器並嘗試通過SSL通過Apache訪問你的應用程序。