Apache httpd 2.2.4 + openssl + php5 configuration for Stellar 2.0

In Stellar 2.0, we switched to Apache httpd 2.2.x from 1.3.x and added PHP support.

Shibboleth was added for Touchstone login for Fall 2007.

Overview

We use java, apache, openssl, tomcat, and php. Each of these operates largely independent of one another, and minor updates should be possible independently. We put directories into /var/local, since that's safe space on Athena installations and a generally reasonable place to put local modifications.

Within /var/local we use symbolic links from the general release to the point version, e.g. /var/local/ssl is always the latest version of openssl.

Versions for Stellar system release 2.1.0, August 2007:

  • Java 1.6
  • Apache httpd 2.2.4
  • OpenSSL 0.9.8e
  • Apache Tomcat 5.5.23
  • PHP 5.2.3 + libxml2 2.6.29

These are available from

Compilation

In a directory /var/local/stellar-builds build the C software.

Compile httpd-2.2.4, openssl-0.9.8e, php-5.2.3, libxml2-2.6.29.

openssl

Openssl compiles fine on athena solaris 9.4 now.

./Configure shared solaris-sparcv9-gcc --prefix=/var/local/ssl-0.9.8e \
     --openssldir=/var/local/ssl-0.9.8e
make
make test
make install
rm /var/local/ssl
ln -s /var/local/ssl-0.9.8e /var/local/ssl

httpd

Next compile httpd-2.2.4 using that openssl.

./configure --prefix=/var/local/httpd-2.2.4 --enable-dav --enable-so \
  --enable-headers --enable-usertrack --enable-rewrite --enable-proxy \
  --enable-ssl --with-ssl=/var/local/ssl \
  --enable-info
make
make install
rm /var/local/httpd
ln -s /var/local/httpd-2.2.4 /var/local/httpd

On MacOS X 10.4, omit --with-ssl and use the default openssl.

php and libxml2

To compile php-5.2.3 using that httpd-2.2.4, first install libxml2:

./configure --prefix=/var/local/libxml2-2.6.29
make
make install
rm /var/local/libxml2
ln -s /var/local/libxml2-2.6.29 /var/local/libxml2

Then go to the php directory and do:

./configure --with-apxs2=/var/local/httpd-2.2.4/bin/apxs \
  --with-config-file-path=/var/local/httpd-2.2.4/conf/php.ini \
  --with-libxml-dir=/var/local/libxml2 \
  --prefix=/var/local/php5-5.2.3
make
make install
rm  /var/local/php5
ln -s /var/local/php5-5.2.3 /var/local/php5

Shibboleth

Get the compiled shibboleth, and install

mkdir /var/local/shibboleth/
cd /var/local/shibboleth/
gtar -xvzf ~webauth/shibboleth/shibboleth-solaris10-apache22-openssl0.9.8.tgz
cd /var/local/shibboleth/etc/shibboleth
cp ~webauth/shibboleth/config/shibboleth-sp/* .
chmod 755 ./gen-shib.sh 
./gen-shib.sh 
chmod 755 /var/local/shibboleth/etc/shibboleth/shibd

Further modification of /var/local/shibboleth/etc/shibboleth/shibboleth.xml may be needed, be sure that the SessionInitiator ids used in httpd.conf are set.

The OpenSSL library directory is /var/local/ssl/lib The server certificate file is e.g. /var/local/ssl-0.9.8e/certs/stellar-test.mit.edu-cert.pem private key /var/local/ssl-0.9.8e/private/https-key.pem mit CA /var/local/ssl-0.9.8e/certs/mitCA.pem Be sure handlerSSL is "true" in the resulting shibboleth.xml file.

Pre-compiled binaries

Binary files compiled as above are in tar files in the stellar-dist locker in the 2.0.0 directory, and may be used as the starting point rather than doing new compiles for Athena 9.4 and 9.3 and these versions.

Configuration

Full httpd configurations are here, in subversion at stellar/2.0/trunk/src/site/resources/apache2. All these files should be copied to /var/local/httpd/conf/.

Edit:

Limits

The MaxClients setting in httpd-mpm.conf is 250; to support more simultaneous connections than 256, both MaxClients and ServerLimit need to be increased. However, maxThreads in the Tomcat configuration would also have to be increased, as well as the number of simultaneous database connections supported.

mod_proxy configuration example follows, from ./stellar2-ajp-proxy.conf. We may want to add min, max, smax, ttl, timeout, acquire, retry.

<Location /S>
    ProxyPass ajp://amps-prog-5.mit.edu:8559/S
    ProxyPassReverse ajp://amps-prog-5.mit.edu:8559/S
</Location>

<Location /SRSS>
    ProxyPass ajp://amps-prog-4.mit.edu:8559/SRSS
    ProxyPassReverse ajp://amps-prog-4.mit.edu:8559/SRSS
</Location>

<Location /imagetool>
    ProxyPass ajp://amps-prog-5.mit.edu:8119/S
    ProxyPassReverse ajp://amps-prog-5.mit.edu:8119/S
</Location>

RewriteRule ^/S/(.*)/sdemo/(.*) /imagetool/$1/sdemo/$2 [P]

SSL Certificates

MIT certs:

cp /afs/athena.mit.edu/software/apache-ssl/certificates/mitCA*.pem /var/local/ssl/certs/
cp /mit/stellar/components/customizations/openssl.cnf /var/local/ssl/
cd /var/local/ssl/certs/
ln -s mitCA.pem `/var/local/ssl/bin/openssl x509 -noout -hash < mitCA.pem`.0
ln -s mitCAclient.pem `/var/local/ssl/bin/openssl x509 -noout -hash < mitCAclient.pem`.0

For a self-signed testing certificate:

cd /var/local/ssl/certs/
/var/local/ssl/bin/openssl req -new -x509 -nodes -out \
  /var/local/ssl/certs/test.cert \
  -keyout /var/local/ssl/private/test.key -days 365
ln -s test.cert `/var/local/ssl/bin/openssl x509 -noout -hash < test.cert`.0

To request a certificate:

cd /var/local/ssl/certs/
ps > /tmp/foo 
ps -elf >> /tmp/foo 
/var/local/ssl/bin/openssl  genrsa -rand /tmp/foo 1024 > /var/local/ssl/private/https-key.pem
/var/local/ssl/bin/openssl req -key /var/local/ssl/private/https-key.pem -new >/var/local/ssl/certs/req.pem

Use inputs;

     US 
     Massachusetts
     Cambridge
     Massachusetts Institute of Technology
     YOUR organizational unit at MIT (e.g. Information Services & Technology)
  YOUR name = name of the server (machine.mit.edu)
  email address = 
     challenge passwd (anything you choose) (you should remember in case
                 jis challenges you)

Find the file /var/ssl/certs/req.pem and send this to mitcert@mit.edu, including the BEGIN and END line

In return, you will receive a certificate (between BEGIN and END). Save it under /var/ssl/certs/servername.pem, where servername is the name of your machine.

Automatically start on boot and stop on shutdown

ln -s /var/local/httpd/bin/apachectl /etc/init.d
ln -s /etc/init.d/apachectl /etc/rc0.d/K01httpd
ln -s /etc/init.d/apachectl /etc/rc2.d/S99httpd
ln -s /var/local/shibboleth/etc/shibboleth/shibd /etc/init.d
ln -s /etc/init.d/shibd  /etc/rc0.d/K01shibd
ln -s /etc/init.d/shibd  /etc/rc2.d/S99shibd