The “Client Certificate” we have just acquired only has value if it is issued by some responsible and respectable party. To prove that this is so, we need a CA certificate establishing that Thawte was the party in question. Since this is important, you might think that the process would be easy, but for some bashful reason both Thawte and Verisign make their CA certificates pretty hard to find. From the home page at http://www.thawte.com you click on ResourceCentre.In Developer’s Corner you find some text with a link to roottrustmap.When you go there you find a table of various roots. The one we need is PersonalFreemail.When you click on it, you get to download a file called persfree.crt.
We downloaded it to /usr/www/APACHE3/ca_cert — well above the Apache root. We added the line:
SSLCACertificateFile /usr/www/APACHE3/ca_cert/persfree.crt
Apache loaded, but the error_log had the line:
... [<date>][error] mod_ssl: Init: (sales.butterthlies.com:443) Unable to configure verify locations for client authentication
which suggested that everything was not well. The problem is that the Thawte certificate is in what is known (somewhat misleadingly) as DER format, whereas it needs to be in what is known (even more misleadingly) as PEM format. The former is just a straight binary dump; the latter base64 encoded with some wrapping. To convert from one to the other:
openssl x509 -in persfree.crt -inform DER -out persfree2.crt
This time, when we started Apache (having altered the Config file to
refer to persfree2.crt), the
error_log had a notation saying:
"...mod_ssl/3.0a0 OpenSSL/0.9.6b
configured..."
— which was good. However, when we tried
to browse to sales.butterthlies.com,the enterprise failed and we found a
message in .../logs/error_log:
...[error] mod_ssl: Certificate Verification: Certificate Chain too long chain has 2 cerificates, but maximum allowed are only 1)
The problem was simply fixed by adding a line at the top of the Config file:
... SSLVerifyDepth 2 .... This now worked and we had a reasonably secure site. The final Config file was: User webserv Group webserv LogLevel notice LogFormat "%h %l %t \"%r\" %s %b %a %{user-agent}i %U" sidney #SSLCacheServerPort 1234 #SSLCacheServerPath /usr/src/apache/apache_1.3.19/src/modules/ssl/gcache SSLSessionCache dbm:/usr/src/apache/apache_1.3.19/src/modules/ssl/gcache SSLCertificateFile /usr/src/apache/apache_1.3.19/SSLconf/conf/new1.cert.cert SSLCertificateKeyFile /usr/src/apache/apache_1.3.19/SSLconf/conf/privkey.pem SSLCACertificateFile /usr/www/APACHE3/ca_cert/persfree2.crt SSLVerifyDepth 2 SSLVerifyClient require SSLSessionCacheTimeout 3600 Listen 192.168.123.2:80 Listen 192.168.123.2:443 <VirtualHost 192.168.123.2:80> SSLEngine off ServerName www.butterthlies.com DocumentRoot /usr/www/APACHE3/site.virtual/htdocs/customers ErrorLog /usr/www/APACHE3/site.ssl/apache_2/logs/error_log CustomLog /usr/www/APACHE3/site.ssl/apache_2/logs/butterthlies_log sidney </VirtualHost> <VirtualHost 192.168.123.2:443> SSLEngine on ServerName sales.butterthlies.com DocumentRoot /usr/www/APACHE3/site.virtual/htdocs/salesmen ErrorLog /usr/www/APACHE3/site.ssl/apache_2/logs/error_log CustomLog /usr/www/APACHE3/site.ssl/apache_2/logs/butterthlies_log sidney <Directory /usr/www/APACHE3/site.virtual/htdocs/salesmen> AuthType Basic AuthName darkness AuthUserFile /usr/www/APACHE3/ok_users/sales AuthGroupFile /usr/www/APACHE3/ok_users/groups Require group cleaners </Directory> </VirtualHost>