15.5. Configuração EJB2 RMI + SSL
Procedimento 15.10. Configuração SSL para Visão Geral do EJB2
- Geração de chaves de criptografia e certificado
- Configuração do Chamador Unificado para o SSL
Maiores informações sobre os certificados e chaves de criptografia podem ser encontradas na Seção 15.2, “Geração de chaves de criptografia e certificado”.
Configuração do Chamador Unificado para o SSL
A invocação remota do EJB2 usa um chamador unificado único, que roda por padrão na porta 4446. A configuração do chamador unificado usado para a invocação remota do EJB2 está definida no arquivo $JBOSS_HOME/server/deploy/remoting-jboss-beans.xml de um perfil do Servidor do Aplicativo JBoss. Adicione o seguinte SSL Socket Factory bean e um SSL Domain bean neste arquivo.
Exemplo 15.7. Fábrica do Servidor SSL para o EJB2
<bean name="sslServerSocketFactoryEJB2" class="org.jboss.security.ssl.DomainServerSocketFactory">
<constructor>
<parameter><inject bean="EJB2SSLDomain"/></parameter>
</constructor>
</bean>
<bean name="EJB2SSLDomain" class="org.jboss.security.plugins.JaasSecurityDomain">
<constructor>
<parameter>EJB2SSLDomain</parameter>
</constructor>
<property name="keyStoreURL">resource:localhost.keystore</property>
<property name="keyStorePass">changeit</property>
<property name="keyAlias">ejb-ssl</property>
<property name="keyPassword">EJB-SSL_KEYPAIR_PASSWORD</property>
</bean>
O próximo passo é personalizar o SSLSocketBuilder, pela adição do seguinte ao arquivo
$JBOSS_HOME/server/$PROFILE/conf/jboss-service.xml de um perfil do Servidor do Aplicativo JBoss:
Exemplo 15.8. Configuração SSLSocketBuilder
<!-- This section is for custom (SSL) server socket factory -->
<mbean code="org.jboss.remoting.security.SSLSocketBuilder"
name="jboss.remoting:service=SocketBuilder,type=SSL"
display-name="SSL Server Socket Factory Builder">
<!-- IMPORTANT - If making ANY customizations, this MUST be set to false. -->
<!-- Otherwise, will used default settings and the following attributes will be ignored. -->
<attribute name="UseSSLServerSocketFactory">false</attribute>
<!-- This is the url string to the key store to use -->
<attribute name="KeyStoreURL">localhost.keystore</attribute>
<!-- The password for the key store -->
<attribute name="KeyStorePassword">sslsocket</attribute>
<!-- The password for the keys (will use KeystorePassword if this is not set explicitly. -->
<attribute name="KeyPassword">sslsocket</attribute>
<!-- The protocol for the SSLContext. Default is TLS. -->
<attribute name="SecureSocketProtocol">TLS</attribute>
<!-- The algorithm for the key manager factory. Default is SunX509. -->
<attribute name="KeyManagementAlgorithm">SunX509</attribute>
<!-- The type to be used for the key store. -->
<!-- Defaults to JKS. Some acceptable values are JKS (Java Keystore - Sun's keystore format), -->
<!-- JCEKS (Java Cryptography Extension keystore - More secure version of JKS), and -->
<!-- PKCS12 (Public-Key Cryptography Standards #12
keystore - RSA's Personal Information Exchange Syntax Standard). -->
<!-- These are not case sensitive. -->
<attribute name="KeyStoreType">JKS</attribute>
</mbean>
<mbean code="org.jboss.remoting.security.SSLServerSocketFactoryService"
name="jboss.remoting:service=ServerSocketFactory,type=SSL"
display-name="SSL Server Socket Factory">
<depends optional-attribute-name="SSLSocketBuilder"
proxy-type="attribute">jboss.remoting:service=SocketBuilder,type=SSL</depends>
</mbean>
Configuração do Transporte SSL para Beans
Atualize o código para refletir na informação abaixo, no arquivo deploy/remoting-jboss-beans.xml do perfil do Servidor do Aplicativo JBoss:
Exemplo 15.9. Transporte SSL para Beans
... <bean name="UnifiedInvokerConnector" class="org.jboss.remoting.transport.Connector"> <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.remoting:service=Connector,transport=socket", exposedInterface=org.jboss.remoting.transport.ConnectorMBean.class,registerDirectly=true) </annotation> <property name="serverConfiguration"><inject bean="UnifiedInvokerConfiguration"/></property> <property name="serverSocketFactory"><inject bean="sslServerSocketFactoryEJB2"/></property> <!-- add this to configure the SSL socket for the UnifiedInvoker --> </bean> ... <bean name="UnifiedInvokerConfiguration" class="org.jboss.remoting.ServerConfiguration"> <constructor> <!-- transport: Others include sslsocket, bisocket, sslbisocket, http, https, rmi, sslrmi, servlet, sslservlet. --> <parameter>sslsocket</parameter><!-- changed from socket to sslsocket --> </constructor> ... </bean> ...