Table of Contents |
---|
Div | ||
---|---|---|
| ||
Abiquo Apache Frontend |
This guide will show you how to configure an Apache as a front door with SSL protection for Abiquo. The communication between Apache and Tomcat is done with the AJP Connector to improve performance.
...
Install Apache with mod_ssl
...
Code Block |
---|
# yum install -y httpd mod_ssl openssl
|
Generate keys
Generate private key:
...
class | verysmallcode |
---|
...
Generate CSR:
...
Code Block |
---|
# openssl req -new -key ca.key -out ca.csr
|
Generate self signed key:
Div | ||
---|---|---|
| ||
Code Block | ||
# openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
|
Move files to the correct location:
divclass verysmallcode Code Block # mv ca.crt /etc/pki/tls/certs # mv ca.key /etc/pki/tls/private/ca.key # mv ca.csr /etc/pki/tls/private/ca.csr
Configure Apache
Move default configurations
Div | ||
---|---|---|
| ||
Code Block | ||
# mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bck
# mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bck
|
Configure SSL
Edit a new /etc/httpd/conf.d/ssl.conf with the following parameters:
...
Code Block |
---|
LoadModule ssl_module modules/mod_ssl.so
Listen 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
|
Configure AJP Proxy
Info |
---|
You can use mod_rewrite to define a different location URI for the client. For example, <Location /management> |
Edit /etc/httpd/conf.d/proxy_ajp.conf and add these lines:
...
Code Block |
---|
<VirtualHost *:80>
RewriteEngine On
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
</VirtualHost>
<VirtualHost *:443>
RewriteEngine On
ProxyRequests Off
ProxyPreserveHost On
<Directory "/opt/abiquo/tomcat/webapps/client-premium/">
Options MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
RewriteRule ^/client-premium$ /client-premium/ [R]
<Location /client-premium>
ProxyPass ajp://localhost:8010/client-premium/
ProxyPassReverse ajp://localhost:8010/client-premium/
</Location>
<Location /api>
ProxyPass ajp://localhost:8010/api/
ProxyPassReverse ajp://localhost:8010/api/
</Location>
<Location /legal/>
ProxyPass ajp://localhost:8010/legal/
ProxyPassReverse ajp://localhost:8010/legal/
</Location>
<Location /m/>
ProxyPass ajp://localhost:8010/m/
ProxyPassReverse ajp://localhost:8010/m/
</Location>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
</VirtualHost>
|
Configure Tomcat
Delete all existing Connector sections.
Put this connector configuration in /opt/abiquo/tomcat/conf/server.xml under <Service name="Catalina"> section:
...
| ||
Code Block | ||
---|---|---|
<Service name="Catalina">
<Connector port="8009" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443"
secure="true"
/>
<Connector port="8010" protocol="AJP/1.3"
enableLookups="false"
tomcatAuthentication="false"
connectionTimeout="20000" secure="true"
/>
|
Enable HTTPS in the client
Edit /opt/abiquo/tomcat/webapps/client-premium/config/client-config.xml.jsp and change USE_SECURE_CHANNEL_LOGIN value to 1:
...
class | verysmallcode |
---|
...
/config/client-config.xml.jsp and change USE_SECURE_CHANNEL_LOGIN
...
value to 1:
Notice that if you enable this option, you will not be able to connect to Abiquo with this client using the HTTP URI, as it only connects to SSL enabled URIs
...
Edit /opt/abiquo/config/abiquo.properties and add this line (or modify the value if it already exists):
...
verysmallcode |
Code Block |
---|
...
abiquo.server.api.location = http://localhost:8009/api
|
Restart Services
...
Code Block |
---|
service abiquo-tomcat restart
service httpd restart
|
Now all client-server communication will go through a Secure Socket Layer. You can still use HTTP direct connection to Tomcat through port 8009.
...
Code Block |
---|
http://<public_ip>:8009/am |
Adding SSL to AM
On the machine where the Appliance Manager (AM) is running, repeat the above steps (Install Apache with mod_ssl, Generate keys, Configure Apache and Configure Tomcat).
...
- Stop Apache on the AM (/etc/init.d/httpd stop)
- In the database the URI of the Appliance Manager in remote services now points directly to the API, which means the URI should be something like "https://server263:443/am"
- Restart the abiquo-tomcat service on both machines. Remember to restart Apache on the API+Server machine as well.
...
Apache Frontend + SSL to client + SSL to AM in Abiquo 3.x
...
Code Block |
---|
<?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="com.abiquo.listeners.AbiquoConfigurationListener"/> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8009" protocol="AJP/1.3" enableLookups="false" tomcatAuthentication="false" redirectPort="8443" connectionTimeout="20000" secure="true"/> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </Engine> </Service> </Server> |
The next step will be to modify /etc/httpd/conf.d/proxy_ajp.conf file and change ports from 8010 to 8009, which is the only connector we will use with the AJP. Remember to leave the AM location with the port 8010 as explained in the previous section (Adding SSL to AM). The file should be as follows:
Code Block |
---|
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so <VirtualHost *:80> RewriteEngine On RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] </VirtualHost> <VirtualHost *:443> RewriteEngine On ProxyRequests Off ProxyPreserveHost On <Directory "/opt/abiquo/tomcat/webapps/ui/"> Options MultiViews AllowOverride None Order allow,deny Allow from all </Directory> RewriteRule ^/ui$ /ui/ [R] <Location /ui> ProxyPass ajp://servermaster:8009/ui/ ProxyPassReverse ajp://servermaster:8009/ui/ </Location> <Location /api> ProxyPass ajp://servermaster:8009/api ProxyPassReverse ajp://servermaster:8009/api </Location> <Location /legal/> ProxyPass ajp://servermaster:8009/legal/ ProxyPassReverse ajp://servermaster:8009/legal/ </Location> SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key <Location /am> ProxyPass ajp://rsmaster:8010/am ProxyPassReverse ajp://rsmaster:8010/am </Location> </VirtualHost> |
...
The last file to modify is /opt/abiquo/tomcat/webapps/ui/config/client-config.json. Edit it and search for the "config.endpoint" attribute, which should in this format:
...