apache 1.3.12 + mod_ssl 2.6.2 merge
authorbeck <beck@openbsd.org>
Sun, 19 Mar 2000 11:16:13 +0000 (11:16 +0000)
committerbeck <beck@openbsd.org>
Sun, 19 Mar 2000 11:16:13 +0000 (11:16 +0000)
84 files changed:
usr.sbin/httpd/Announcement
usr.sbin/httpd/INSTALL.SSL
usr.sbin/httpd/conf/httpd.conf-dist
usr.sbin/httpd/conf/ssl.crl/Makefile
usr.sbin/httpd/conf/ssl.crt/ca-bundle.crt
usr.sbin/httpd/configure
usr.sbin/httpd/htdocs/manual/misc/FAQ.html
usr.sbin/httpd/htdocs/manual/misc/rewriteguide.html
usr.sbin/httpd/htdocs/manual/mod/core.html
usr.sbin/httpd/htdocs/manual/mod/directives.html
usr.sbin/httpd/htdocs/manual/mod/mod_include.html
usr.sbin/httpd/htdocs/manual/mod/mod_mime.html
usr.sbin/httpd/htdocs/manual/mod/mod_rewrite.html
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/index.html
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_compat.html
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_cover.wml
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_faq.html
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_faq.wml
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_glossary.html
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_glossary.wml
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_howto.html
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_intro.html
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_intro.wml
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_overview.html
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_reference.html
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_reference.wml
usr.sbin/httpd/htdocs/manual/mod/mod_ssl/ssl_template.inc
usr.sbin/httpd/htdocs/manual/vhosts/ip-based.html
usr.sbin/httpd/src/ApacheCore.def
usr.sbin/httpd/src/CHANGES
usr.sbin/httpd/src/CHANGES.SSL
usr.sbin/httpd/src/Configure
usr.sbin/httpd/src/ap/ap_getpass.c
usr.sbin/httpd/src/helpers/binbuild.sh
usr.sbin/httpd/src/include/ap_config.h
usr.sbin/httpd/src/include/ap_mmn.h
usr.sbin/httpd/src/include/http_core.h
usr.sbin/httpd/src/include/httpd.h
usr.sbin/httpd/src/main/http_core.c
usr.sbin/httpd/src/main/http_log.c
usr.sbin/httpd/src/main/http_main.c
usr.sbin/httpd/src/main/http_protocol.c
usr.sbin/httpd/src/main/util.c
usr.sbin/httpd/src/modules/experimental/mod_auth_digest.c
usr.sbin/httpd/src/modules/proxy/mod_proxy.c
usr.sbin/httpd/src/modules/proxy/proxy_http.c
usr.sbin/httpd/src/modules/proxy/proxy_util.c
usr.sbin/httpd/src/modules/ssl/Makefile.tmpl
usr.sbin/httpd/src/modules/ssl/README
usr.sbin/httpd/src/modules/ssl/libssl.module
usr.sbin/httpd/src/modules/ssl/libssl.version
usr.sbin/httpd/src/modules/ssl/mod_ssl.c
usr.sbin/httpd/src/modules/ssl/mod_ssl.h
usr.sbin/httpd/src/modules/ssl/ssl_engine_compat.c
usr.sbin/httpd/src/modules/ssl/ssl_engine_config.c
usr.sbin/httpd/src/modules/ssl/ssl_engine_ext.c
usr.sbin/httpd/src/modules/ssl/ssl_engine_init.c
usr.sbin/httpd/src/modules/ssl/ssl_engine_io.c
usr.sbin/httpd/src/modules/ssl/ssl_engine_kernel.c
usr.sbin/httpd/src/modules/ssl/ssl_engine_mutex.c
usr.sbin/httpd/src/modules/ssl/ssl_engine_rand.c
usr.sbin/httpd/src/modules/ssl/ssl_engine_vars.c
usr.sbin/httpd/src/modules/ssl/ssl_util.c
usr.sbin/httpd/src/modules/ssl/ssl_util_ssl.c
usr.sbin/httpd/src/modules/ssl/ssl_util_ssl.h
usr.sbin/httpd/src/modules/standard/mod_actions.c
usr.sbin/httpd/src/modules/standard/mod_auth.c
usr.sbin/httpd/src/modules/standard/mod_auth_db.module
usr.sbin/httpd/src/modules/standard/mod_autoindex.c
usr.sbin/httpd/src/modules/standard/mod_cern_meta.c
usr.sbin/httpd/src/modules/standard/mod_expires.c
usr.sbin/httpd/src/modules/standard/mod_include.c
usr.sbin/httpd/src/modules/standard/mod_log_config.c
usr.sbin/httpd/src/modules/standard/mod_mime.c
usr.sbin/httpd/src/modules/standard/mod_speling.c
usr.sbin/httpd/src/modules/standard/mod_status.c
usr.sbin/httpd/src/os/bs2000/ebcdic.h
usr.sbin/httpd/src/os/win32/registry.c
usr.sbin/httpd/src/support/ab.c
usr.sbin/httpd/src/support/apxs.pl
usr.sbin/httpd/src/support/htdigest.c
usr.sbin/httpd/src/support/htpasswd.1
usr.sbin/httpd/src/support/logresolve.c
usr.sbin/httpd/src/support/mkcert.sh

index 758b5cc..dfd664d 100644 (file)
@@ -1,57 +1,30 @@
-Apache 1.3.11 Released
+Apache 1.3.12 Released
 ======================
 
 The Apache Software Foundation and The Apache Server Project are
-pleased to announce the release of version 1.3.11 of the Apache HTTP server.
-Apache 1.3.10 was not released due to a last-minute bug found and
-fixed after the source was tagged and tested.
+pleased to announce the release of version 1.3.12 of the Apache HTTP server.
 
-This new Apache version incorporates numerous significant improvements
-to the server.  Apart from portability and security fixes, documentation
-enhancements, performance improvements, and assorted other minor
-features or fixes notable changes are:
+The primary changes in this version of Apache are those related to
+the ``cross site scripting'' security alerts described at
 
-   - Binary and shared builds on several platforms have been
-     improved.
+   http://www.cert.org/advisories/CA-2000-02.html
+      - and -
+   http://www.apache.org/info/css-security/index.html
 
-   - The time that a parent waits for its children to die
-     after SIGKILL has been sent has been reduced.
-
-   - Various suexec improvements.
-
-   - More rigorous checking of Host: headers to fix security problems
-     with mass name-based virtual hosting.
-
-   - Addition of the  %q logging format directive (logs "?" and the query
-     string part of a query, or the empty string if no query).
-
-   - Improvement of the OS390 port.
-
-   - Several EBCDIC fixes.
-
-   - Better error reporting during the "compiler sanity" check.
-
-   - Fixed the `quad integer' (aka `long long') handling in ap_snprintf.c
-
-   - mod_rewrite's general substitution function was overhauled.
-
-   - Several WIN32 bugs have been fixed, including:
-     - CGIs broken if script calls other programs which deliver on stdout
-       (Search this file for "DETACHED")
-     - 16 bit CGIs should work now
-     - Server will not start if passed the -d option with spaces in the
-       argument.
+Specifically, charset handling has been improved and reinforced
+(including a new directive: AddDefaultCharset) and server generated
+pages properly escape ``userland'' input.
 
 A complete listing with detailed descriptions is provided in the
 src/CHANGES file.
 
-We consider Apache 1.3.11 to be the best version of Apache available and
+We consider Apache 1.3.12 to be the best version of Apache available and
 we strongly recommend that users of older versions, especially of the
 1.1.x and 1.2.x family, upgrade as soon as possible.  No further releases
 will be made in the 1.2.x family.
 
 
-Apache 1.3.11 is available for download from
+Apache 1.3.12 is available for download from
 
     http://www.apache.org/dist/
 
@@ -62,7 +35,7 @@ Binary distributions are available from
 
    http://www.apache.org/dist/binaries/
 
-As of Apache 1.3.11 binary distributions contain all standard Apache
+As of Apache 1.3.12 binary distributions contain all standard Apache
 modules as shared objects (if supported by the platform) and include
 full source code.  Installation is easily done by executing the
 included install script.  See the README.bindist and INSTALL.bindist
index d714a40..c86eeda 100644 (file)
       Type:         MANDATORY
 
    o  Package:      mod_ssl
-      Version:      2.5.x
+      Version:      2.6.x
       Description:  The Apache Interface to OpenSSL
       Reason:       The interface module for Apache
       Homepage:     http://www.modssl.org/
       Distribution: ftp://ftp.modssl.org/source/
-      Tarball:      mod_ssl-2.5.x-1.3.x.tar.gz
+      Tarball:      mod_ssl-2.6.x-1.3.x.tar.gz
       Location:     Zurich, Switzerland, Europe
       Author(s):    Ralf S. Engelschall <rse@engelschall.com>
       Type:         MANDATORY
   2. Extract the required packages:
 
      $ gzip -d -c apache_1.3.x.tar.gz | tar xvf -                          ALL
-     $ gzip -d -c mod_ssl-2.5.x-1.3.x.tar.gz | tar xvf -                   ALL
+     $ gzip -d -c mod_ssl-2.6.x-1.3.x.tar.gz | tar xvf -                   ALL
      $ gzip -d -c openssl-0.9.x.tar.gz | tar xvf -                         ALL
      $ gzip -d -c mm-1.0.x.tar.gz | tar xvf -                         OPTIONAL
      $ mkdir rsaref-2.0                                                     US
         RSA_BASE variables but get no intermediate chance to add more
         third-party Apache modules (e.g. mod_perl, PHP3, etc).
 
-        $ cd mod_ssl-2.5.x-1.3.x                                           ALL
+        $ cd mod_ssl-2.6.x-1.3.x                                           ALL
         $ ./configure \                                                    ALL
               --with-apache=../apache_1.3.x \                              ALL
               --with-ssl=../openssl-0.9.x \                                ALL
         EAPI_MM variables manually and either copy your existing certificate
         manually to conf/ssl.crt/server.crt or use `make certificate':
 
-        $ cd mod_ssl-2.5.x-1.3.x                                           ALL
+        $ cd mod_ssl-2.6.x-1.3.x                                           ALL
         $ ./configure \                                                    ALL
               --with-apache=../apache_1.3.x \                              ALL
               --with-crt=/path/to/your/server.crt \                   OPTIONAL
         EAPI_MM variables manually and more important: you have to install the
         Apache package manually, too. But feel free to be masochistic ;-)
 
-        $ cd mod_ssl-2.5.x-1.3.x                                           ALL
+        $ cd mod_ssl-2.6.x-1.3.x                                           ALL
         $ ./configure \                                                    ALL
               --with-apache=../apache_1.3.x \                              ALL
               --with-crt=/path/to/your/server.crt \                   OPTIONAL
      o Read the mod_ssl user manual very carefully to
        understand the SSL-part of your Apache configuration:
 
-       $ netscape http://www.modssl.org/docs/2.5/                 (official)
+       $ netscape http://www.modssl.org/docs/2.6/                 (official)
        $ netscape http://localhost/manual/mod/mod_ssl/            (local copy)
        
      o Adjust your Apache configuration to your personal requirements.
   long as the Extended API (EAPI) didn't change and you've OpenSSL installed
   somewhere. For this you can use the following procedure:
 
-    $ cd mod_ssl-2.5.x-1.3.x                                               ALL
+    $ cd mod_ssl-2.6.x-1.3.x                                               ALL
     $ ./configure \                                                        ALL
           --with-apxs[=/path/to/apache/sbin/apxs] \                        ALL
           --with-ssl=/path/to/openssl \                                    ALL
 
     #   extract the packages
     $ gzip -d -c apache_1.3.x.tar.gz | tar xvf -
-    $ gzip -d -c mod_ssl-2.5.x-1.3.x.tar.gz | tar xvf -
+    $ gzip -d -c mod_ssl-2.6.x-1.3.x.tar.gz | tar xvf -
     $ gzip -d -c mod_perl-1.xx.tar.gz | tar xvf -
 
     #   apply mod_ssl to Apache source tree
-    $ cd mod_ssl-2.5.x-1.3.x
+    $ cd mod_ssl-2.6.x-1.3.x
     $ ./configure \
           --with-apache=../apache_1.3.x
     $ cd ..
 
     #   cleanup after work
     $ rm -rf mod_perl-1.xx
-    $ rm -rf mod_ssl-2.5.x-1.3.x
+    $ rm -rf mod_ssl-2.6.x-1.3.x
     $ rm -rf apache_1.3.x
 
   o Apache + mod_ssl/OpenSSL + PHP3/MySQL
 
     #   extract the packages
     $ gzip -d -c apache_1.3.x.tar.gz | tar xvf -
-    $ gzip -d -c mod_ssl-2.5.x-1.3.x.tar.gz | tar xvf -
+    $ gzip -d -c mod_ssl-2.6.x-1.3.x.tar.gz | tar xvf -
     $ gzip -d -c php-3.0.x.tar.gz | tar xvf -
 
     #   apply mod_ssl to Apache source tree
-    $ cd /mod_ssl-2.5.x-1.3.x
+    $ cd /mod_ssl-2.6.x-1.3.x
     $ ./configure \
           --with-apache=../apache_1.3.x
     $ cd ..
     
     #   cleanup after work
     $ rm -rf php-3.0.x
-    $ rm -rf mod_ssl-2.5.x-1.3.x
+    $ rm -rf mod_ssl-2.6.x-1.3.x
     $ rm -rf apache_1.3.x
 
index 047116a..9730190 100644 (file)
@@ -339,7 +339,9 @@ DocumentRoot "@@ServerRoot@@/htdocs"
 # UserDir: The name of the directory which is appended onto a user's home
 # directory if a ~user request is received.
 #
-UserDir public_html
+<IfModule mod_userdir.c>
+    UserDir public_html
+</IfModule>
 
 #
 # Control access to UserDir directories.  The following is an example
@@ -362,7 +364,9 @@ UserDir public_html
 # DirectoryIndex: Name of the file or files to use as a pre-written HTML
 # directory index.  Separate multiple entries with spaces.
 #
-DirectoryIndex index.html
+<IfModule mod_dir.c>
+    DirectoryIndex index.html
+</IfModule>
 
 #
 # AccessFileName: The name of the file to look for in each directory
@@ -408,7 +412,9 @@ UseCanonicalName On
 # TypesConfig describes where the mime.types file (or equivalent) is
 # to be found.
 #
-TypesConfig conf/mime.types
+<IfModule mod_mime.c>
+    TypesConfig conf/mime.types
+</IfModule>
 
 #
 # DefaultType is the default MIME type the server will use for a document
@@ -506,39 +512,45 @@ ServerSignature On
 # Aliases: Add here as many aliases as you need (with no limit). The format is 
 # Alias fakename realname
 #
-# Note that if you include a trailing / on fakename then the server will
-# require it to be present in the URL.  So "/icons" isn't aliased in this
-# example, only "/icons/"..
-#
-Alias /icons/ "@@ServerRoot@@/icons/"
-
-<Directory "@@ServerRoot@@/icons">
-    Options Indexes MultiViews
-    AllowOverride None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# ScriptAlias: This controls which directories contain server scripts.
-# ScriptAliases are essentially the same as Aliases, except that
-# documents in the realname directory are treated as applications and
-# run by the server when requested rather than as documents sent to the client.
-# The same rules about trailing "/" apply to ScriptAlias directives as to
-# Alias.
-#
-ScriptAlias /cgi-bin/ "@@ServerRoot@@/cgi-bin/"
+<IfModule mod_alias.c>
+
+    #
+    # Note that if you include a trailing / on fakename then the server will
+    # require it to be present in the URL.  So "/icons" isn't aliased in this
+    # example, only "/icons/"..
+    #
+    Alias /icons/ "@@ServerRoot@@/icons/"
+
+    <Directory "@@ServerRoot@@/icons">
+        Options Indexes MultiViews
+        AllowOverride None
+        Order allow,deny
+        Allow from all
+    </Directory>
+
+    #
+    # ScriptAlias: This controls which directories contain server scripts.
+    # ScriptAliases are essentially the same as Aliases, except that
+    # documents in the realname directory are treated as applications and
+    # run by the server when requested rather than as documents sent to the client.
+    # The same rules about trailing "/" apply to ScriptAlias directives as to
+    # Alias.
+    #
+    ScriptAlias /cgi-bin/ "@@ServerRoot@@/cgi-bin/"
+
+    #
+    # "@@ServerRoot@@/cgi-bin" should be changed to whatever your ScriptAliased
+    # CGI directory exists, if you have that configured.
+    #
+    <Directory "@@ServerRoot@@/cgi-bin">
+        AllowOverride None
+        Options None
+        Order allow,deny
+        Allow from all
+    </Directory>
 
-#
-# "@@ServerRoot@@/cgi-bin" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-<Directory "@@ServerRoot@@/cgi-bin">
-    AllowOverride None
-    Options None
-    Order allow,deny
-    Allow from all
-</Directory>
+</IfModule>
+# End of aliases.
 
 #
 # Redirect allows you to tell clients about documents which used to exist in
@@ -550,188 +562,209 @@ ScriptAlias /cgi-bin/ "@@ServerRoot@@/cgi-bin/"
 #
 # Directives controlling the display of server-generated directory listings.
 #
+<IfModule mod_autoindex.c>
+
+    #
+    # FancyIndexing is whether you want fancy directory indexing or standard
+    #
+    IndexOptions FancyIndexing
+
+    #
+    # AddIcon* directives tell the server which icon to show for different
+    # files or filename extensions.  These are only displayed for
+    # FancyIndexed directories.
+    #
+    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
+
+    AddIconByType (TXT,/icons/text.gif) text/*
+    AddIconByType (IMG,/icons/image2.gif) image/*
+    AddIconByType (SND,/icons/sound2.gif) audio/*
+    AddIconByType (VID,/icons/movie.gif) video/*
+
+    AddIcon /icons/binary.gif .bin .exe
+    AddIcon /icons/binhex.gif .hqx
+    AddIcon /icons/tar.gif .tar
+    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
+    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
+    AddIcon /icons/a.gif .ps .ai .eps
+    AddIcon /icons/layout.gif .html .shtml .htm .pdf
+    AddIcon /icons/text.gif .txt
+    AddIcon /icons/c.gif .c
+    AddIcon /icons/p.gif .pl .py
+    AddIcon /icons/f.gif .for
+    AddIcon /icons/dvi.gif .dvi
+    AddIcon /icons/uuencoded.gif .uu
+    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
+    AddIcon /icons/tex.gif .tex
+    AddIcon /icons/bomb.gif core
+
+    AddIcon /icons/back.gif ..
+    AddIcon /icons/hand.right.gif README
+    AddIcon /icons/folder.gif ^^DIRECTORY^^
+    AddIcon /icons/blank.gif ^^BLANKICON^^
+
+    #
+    # DefaultIcon is which icon to show for files which do not have an icon
+    # explicitly set.
+    #
+    DefaultIcon /icons/unknown.gif
+
+    #
+    # AddDescription allows you to place a short description after a file in
+    # server-generated indexes.  These are only displayed for FancyIndexed
+    # directories.
+    # Format: AddDescription "description" filename
+    #
+    #AddDescription "GZIP compressed document" .gz
+    #AddDescription "tar archive" .tar
+    #AddDescription "GZIP compressed tar archive" .tgz
+
+    #
+    # ReadmeName is the name of the README file the server will look for by
+    # default, and append to directory listings.
+    #
+    # HeaderName is the name of a file which should be prepended to
+    # directory indexes. 
+    #
+    # If MultiViews are amongst the Options in effect, the server will
+    # first look for name.html and include it if found.  If name.html
+    # doesn't exist, the server will then look for name.txt and include
+    # it as plaintext if found.
+    #
+    ReadmeName README
+    HeaderName HEADER
+
+    #
+    # IndexIgnore is a set of filenames which directory indexing should ignore
+    # and not include in the listing.  Shell-style wildcarding is permitted.
+    #
+    IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
 
-#
-# FancyIndexing is whether you want fancy directory indexing or standard
-#
-IndexOptions FancyIndexing
-
-#
-# AddIcon* directives tell the server which icon to show for different
-# files or filename extensions.  These are only displayed for
-# FancyIndexed directories.
-#
-AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
-
-AddIconByType (TXT,/icons/text.gif) text/*
-AddIconByType (IMG,/icons/image2.gif) image/*
-AddIconByType (SND,/icons/sound2.gif) audio/*
-AddIconByType (VID,/icons/movie.gif) video/*
-
-AddIcon /icons/binary.gif .bin .exe
-AddIcon /icons/binhex.gif .hqx
-AddIcon /icons/tar.gif .tar
-AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
-AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
-AddIcon /icons/a.gif .ps .ai .eps
-AddIcon /icons/layout.gif .html .shtml .htm .pdf
-AddIcon /icons/text.gif .txt
-AddIcon /icons/c.gif .c
-AddIcon /icons/p.gif .pl .py
-AddIcon /icons/f.gif .for
-AddIcon /icons/dvi.gif .dvi
-AddIcon /icons/uuencoded.gif .uu
-AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
-AddIcon /icons/tex.gif .tex
-AddIcon /icons/bomb.gif core
-
-AddIcon /icons/back.gif ..
-AddIcon /icons/hand.right.gif README
-AddIcon /icons/folder.gif ^^DIRECTORY^^
-AddIcon /icons/blank.gif ^^BLANKICON^^
-
-#
-# DefaultIcon is which icon to show for files which do not have an icon
-# explicitly set.
-#
-DefaultIcon /icons/unknown.gif
-
-#
-# AddDescription allows you to place a short description after a file in
-# server-generated indexes.  These are only displayed for FancyIndexed
-# directories.
-# Format: AddDescription "description" filename
-#
-#AddDescription "GZIP compressed document" .gz
-#AddDescription "tar archive" .tar
-#AddDescription "GZIP compressed tar archive" .tgz
-
-#
-# ReadmeName is the name of the README file the server will look for by
-# default, and append to directory listings.
-#
-# HeaderName is the name of a file which should be prepended to
-# directory indexes. 
-#
-# The server will first look for name.html and include it if found.
-# If name.html doesn't exist, the server will then look for name.txt
-# and include it as plaintext if found.
-#
-ReadmeName README
-HeaderName HEADER
-
-#
-# IndexIgnore is a set of filenames which directory indexing should ignore
-# and not include in the listing.  Shell-style wildcarding is permitted.
-#
-IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
-
-#
-# AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress
-# information on the fly. Note: Not all browsers support this.
-# Despite the name similarity, the following Add* directives have nothing
-# to do with the FancyIndexing customization directives above.
-#
-AddEncoding x-compress Z
-AddEncoding x-gzip gz tgz
-
-#
-# AddLanguage allows you to specify the language of a document. You can
-# then use content negotiation to give a browser a file in a language
-# it can understand.  
-#
-# Note 1: The suffix does not have to be the same as the language 
-# keyword --- those with documents in Polish (whose net-standard 
-# language code is pl) may wish to use "AddLanguage pl .po" to 
-# avoid the ambiguity with the common suffix for perl scripts.
-#
-# Note 2: The example entries below illustrate that in quite
-# some cases the two character 'Language' abbriviation is not
-# identical to the two character 'Country' code for it's country,
-# E.g. 'Danmark/dk' versus 'Danish/da'.
-#
-# Note 3: In the case of 'ltz' we violate the RFC by using a three char 
-# specifier. But there is 'work in progress' to fix this and get 
-# the reference data for rfc1766 cleaned up.
-#
-# Danish (da) - Dutch (nl) - English (en) - Estonian (ee)
-# French (fr) - German (de) - Greek-Modern (el)
-# Italian (it) -Portugese (pt) - Luxembourgeois* (ltz)
-# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
-#
-AddLanguage da .dk
-AddLanguage nl .nl
-AddLanguage en .en
-AddLanguage et .ee
-AddLanguage fr .fr
-AddLanguage de .de
-AddLanguage el .el
-AddLanguage it .it
-AddLanguage pt .pt
-AddLanguage ltz .lu
-AddLanguage ca .ca
-AddLanguage es .es
-AddLanguage sv .se
-AddLanguage cz .cz
-
-# LanguagePriority allows you to give precedence to some languages
-# in case of a tie during content negotiation.
-#
-# Just list the languages in decreasing order of preference. We have
-# more or less alphabetized them here. You probably want to change this.
-#
-LanguagePriority en da nl et fr de el it pt ltz ca es sv
-
-#
-# AddType allows you to tweak mime.types without actually editing it, or to
-# make certain files to be certain types.
-#
-# For example, the PHP 3.x module (not part of the Apache distribution - see
-# http://www.php.net) will typically use:
-#
-#AddType application/x-httpd-php3 .php3
-#AddType application/x-httpd-php3-source .phps
-#
-# And for PHP 4.x, use:
-#
-#AddType application/x-httpd-php .php
-#AddType application/x-httpd-php-source .phps
-
-AddType application/x-tar .tgz
-
-#
-# AddHandler allows you to map certain file extensions to "handlers",
-# actions unrelated to filetype. These can be either built into the server
-# or added with the Action command (see below)
-#
-# If you want to use server side includes, or CGI outside
-# ScriptAliased directories, uncomment the following lines.
-#
-# To use CGI scripts:
-#
-#AddHandler cgi-script .cgi
-
-#
-# To use server-parsed HTML files
-#
-#AddType text/html .shtml
-#AddHandler server-parsed .shtml
-
-#
-# Uncomment the following line to enable Apache's send-asis HTTP file
-# feature
-#
-#AddHandler send-as-is asis
-
-#
-# If you wish to use server-parsed imagemap files, use
-#
-#AddHandler imap-file map
+</IfModule>
+# End of indexing directives.
+
+#
+# Document types.
+#
+<IfModule mod_mime.c>
+
+    #
+    # AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress
+    # information on the fly. Note: Not all browsers support this.
+    # Despite the name similarity, the following Add* directives have nothing
+    # to do with the FancyIndexing customization directives above.
+    #
+    AddEncoding x-compress Z
+    AddEncoding x-gzip gz tgz
+
+    #
+    # AddLanguage allows you to specify the language of a document. You can
+    # then use content negotiation to give a browser a file in a language
+    # it can understand.  
+    #
+    # Note 1: The suffix does not have to be the same as the language 
+    # keyword --- those with documents in Polish (whose net-standard 
+    # language code is pl) may wish to use "AddLanguage pl .po" to 
+    # avoid the ambiguity with the common suffix for perl scripts.
+    #
+    # Note 2: The example entries below illustrate that in quite
+    # some cases the two character 'Language' abbriviation is not
+    # identical to the two character 'Country' code for its country,
+    # E.g. 'Danmark/dk' versus 'Danish/da'.
+    #
+    # Note 3: In the case of 'ltz' we violate the RFC by using a three char 
+    # specifier. But there is 'work in progress' to fix this and get 
+    # the reference data for rfc1766 cleaned up.
+    #
+    # Danish (da) - Dutch (nl) - English (en) - Estonian (ee)
+    # French (fr) - German (de) - Greek-Modern (el)
+    # Italian (it) - Portugese (pt) - Luxembourgeois* (ltz)
+    # Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
+    # Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
+    #
+    AddLanguage da .dk
+    AddLanguage nl .nl
+    AddLanguage en .en
+    AddLanguage et .ee
+    AddLanguage fr .fr
+    AddLanguage de .de
+    AddLanguage el .el
+    AddLanguage it .it
+    AddLanguage ja .ja
+    AddCharset ISO-2022-JP .jis
+    AddLanguage pl .po
+    AddCharset ISO-8859-2 .iso-pl
+    AddLanguage pt .pt
+    AddLanguage pt-br .pt-br
+    AddLanguage ltz .lu
+    AddLanguage ca .ca
+    AddLanguage es .es
+    AddLanguage sv .se
+    AddLanguage cz .cz
+
+    # LanguagePriority allows you to give precedence to some languages
+    # in case of a tie during content negotiation.
+    #
+    # Just list the languages in decreasing order of preference. We have
+    # more or less alphabetized them here. You probably want to change this.
+    #
+    <IfModule mod_negotiation.c>
+        LanguagePriority en da nl et fr de el it ja pl pt pt-br ltz ca es sv
+    </IfModule>
+
+    #
+    # AddType allows you to tweak mime.types without actually editing it, or to
+    # make certain files to be certain types.
+    #
+    # For example, the PHP 3.x module (not part of the Apache distribution - see
+    # http://www.php.net) will typically use:
+    #
+    #AddType application/x-httpd-php3 .php3
+    #AddType application/x-httpd-php3-source .phps
+    #
+    # And for PHP 4.x, use:
+    #
+    #AddType application/x-httpd-php .php
+    #AddType application/x-httpd-php-source .phps
+
+    AddType application/x-tar .tgz
+
+    #
+    # AddHandler allows you to map certain file extensions to "handlers",
+    # actions unrelated to filetype. These can be either built into the server
+    # or added with the Action command (see below)
+    #
+    # If you want to use server side includes, or CGI outside
+    # ScriptAliased directories, uncomment the following lines.
+    #
+    # To use CGI scripts:
+    #
+    #AddHandler cgi-script .cgi
+
+    #
+    # To use server-parsed HTML files
+    #
+    #AddType text/html .shtml
+    #AddHandler server-parsed .shtml
+
+    #
+    # Uncomment the following line to enable Apache's send-asis HTTP file
+    # feature
+    #
+    #AddHandler send-as-is asis
+
+    #
+    # If you wish to use server-parsed imagemap files, use
+    #
+    #AddHandler imap-file map
+
+    #
+    # To enable type maps, you might want to use
+    #
+    #AddHandler type-map var
 
-#
-# To enable type maps, you might want to use
-#
-#AddHandler type-map var
+</IfModule>
+# End of document types.
 
 #
 # Action lets you define media types that will execute a script whenever
@@ -774,24 +807,31 @@ AddType application/x-tar .tgz
 #  request will *not* be available to such a script.
 
 #
-# The following directives modify normal HTTP response behavior.
-# The first directive disables keepalive for Netscape 2.x and browsers that
-# spoof it. There are known problems with these browser implementations.
-# The second directive is for Microsoft Internet Explorer 4.0b2
-# which has a broken HTTP/1.1 implementation and does not properly
-# support keepalive when it is used on 301 or 302 (redirect) responses.
+# Customize behaviour based on the browser
 #
-BrowserMatch "Mozilla/2" nokeepalive
-BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
+<IfModule mod_setenvif.c>
 
-#
-# The following directive disables HTTP/1.1 responses to browsers which
-# are in violation of the HTTP/1.0 spec by not being able to grok a
-# basic 1.1 response.
-#
-BrowserMatch "RealPlayer 4\.0" force-response-1.0
-BrowserMatch "Java/1\.0" force-response-1.0
-BrowserMatch "JDK/1\.0" force-response-1.0
+    #
+    # The following directives modify normal HTTP response behavior.
+    # The first directive disables keepalive for Netscape 2.x and browsers that
+    # spoof it. There are known problems with these browser implementations.
+    # The second directive is for Microsoft Internet Explorer 4.0b2
+    # which has a broken HTTP/1.1 implementation and does not properly
+    # support keepalive when it is used on 301 or 302 (redirect) responses.
+    #
+    BrowserMatch "Mozilla/2" nokeepalive
+    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
+
+    #
+    # The following directive disables HTTP/1.1 responses to browsers which
+    # are in violation of the HTTP/1.0 spec by not being able to grok a
+    # basic 1.1 response.
+    #
+    BrowserMatch "RealPlayer 4\.0" force-response-1.0
+    BrowserMatch "Java/1\.0" force-response-1.0
+    BrowserMatch "JDK/1\.0" force-response-1.0
+
+</IfModule>
 
 #
 # Allow server status reports, with the URL of http://servername/server-status
@@ -833,32 +873,32 @@ BrowserMatch "JDK/1\.0" force-response-1.0
 # enable the proxy server:
 #
 #<IfModule mod_proxy.c>
-#ProxyRequests On
-#
-#<Directory proxy:*>
-#    Order deny,allow
-#    Deny from all
-#    Allow from .your_domain.com
-#</Directory>
-
-#
-# Enable/disable the handling of HTTP/1.1 "Via:" headers.
-# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
-# Set to one of: Off | On | Full | Block
-#
-#ProxyVia On
-
-#
-# To enable the cache as well, edit and uncomment the following lines:
-# (no cacheing without CacheRoot)
-#
-#CacheRoot "@@ServerRoot@@/proxy"
-#CacheSize 5
-#CacheGcInterval 4
-#CacheMaxExpire 24
-#CacheLastModifiedFactor 0.1
-#CacheDefaultExpire 1
-#NoCache a_domain.com another_domain.edu joes.garage_sale.com
+    #ProxyRequests On
+    #
+    #<Directory proxy:*>
+    #    Order deny,allow
+    #    Deny from all
+    #    Allow from .your_domain.com
+    #</Directory>
+
+    #
+    # Enable/disable the handling of HTTP/1.1 "Via:" headers.
+    # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
+    # Set to one of: Off | On | Full | Block
+    #
+    #ProxyVia On
+
+    #
+    # To enable the cache as well, edit and uncomment the following lines:
+    # (no cacheing without CacheRoot)
+    #
+    #CacheRoot "@@ServerRoot@@/proxy"
+    #CacheSize 5
+    #CacheGcInterval 4
+    #CacheMaxExpire 24
+    #CacheLastModifiedFactor 0.1
+    #CacheDefaultExpire 1
+    #NoCache a_domain.com another_domain.edu joes.garage_sale.com
 
 #</IfModule>
 # End of proxy directives.
index 5401506..e8b5ae6 100644 (file)
@@ -36,7 +36,7 @@ update: clean
                n=0; \
                while [ 1 ]; do \
                    hash="`$$ssl_program crl -noout -hash <$$file`"; \
-                   if [ -r "$$hash.$$n" ]; then \
+                   if [ -r "$$hash.r$$n" ]; then \
                        n=`expr $$n + 1`; \
                    else \
                        echo dummy |\
index 478f5f6..839857a 100644 (file)
@@ -1,10 +1,10 @@
 ##
 ##  ca-bundle.crt -- Bundle of CA Root Certificates
-##  Last Modified: Fri Oct 22 17:15:27 CEST 1999
+##  Last Modified: Thu Mar  2 09:32:46 CET 2000
 ##
 ##  This is a bundle of X.509 certificates of public
 ##  Certificate Authorities (CA). These were automatically
-##  extracted from Netscape Communicator's certificate database
+##  extracted from Netscape Communicator 4.72's certificate database
 ##  (the file `cert7.db'). It contains the certificates in both
 ##  plain text and PEM format and therefore can be directly used
 ##  with an Apache+mod_ssl webserver for SSL client authentication.
 
 ABAecom (sub., Am. Bankers Assn.) Root CA
 =========================================
-MD5 Fingerprint: BA:D9:60:04:63:E6:92:07:3C:C5:38:93:66:38:24:FE
+MD5 Fingerprint: 82:12:F7:89:E1:0B:91:60:A4:B6:22:9F:94:68:11:92
 PEM Data:
 -----BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
-CzAJBgNVBAgTAkRDMRMwEQYDVQQHEwpXYXNoaW5ndG9uMRcwFQYDVQQKEw5BQkEu
-RUNPTSwgSW5jLjEZMBcGA1UEAxMQQUJBLkVDT00gUm9vdCBDQTEeMBwGCSqGSIb3
-DQEJARYPa2RhZ3Vpb0BhYmEuY29tMB4XDTk4MDcyOTE2NTk1MloXDTA1MDcyNzE2
-NTk1MlowgYMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2Fz
-aGluZ3RvbjEXMBUGA1UEChMOQUJBLkVDT00sIEluYy4xGTAXBgNVBAMTEEFCQS5F
-Q09NIFJvb3QgQ0ExHjAcBgkqhkiG9w0BCQEWD2tkYWd1aW9AYWJhLmNvbTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMae3L3cDgkaUcaSm5lrjGmJvhvF
-ohFOhGYNmfH/H5mhM9a0kouli57Wp5DEybSBGp6HUP9zVqdtEFsIE6asCKkaIHIa
-DzN0sVixVm81Nj0zXpPjmgK1obfxbzEFNQ3XoA/OMmexPUj2SYuisf5GgC4/7EQN
-FKfeuhDXvAn/VZZRF05luCegEpEA9bc7Ur2oNT4T0xhRvRb3fRIBiTc768GiYEK+
-QBzTd2hv+LQHfma542pUDaboHGDi7+6drWPsk2udrWMOno8jlhcF/Oh11hQ16i2D
-mvZVjpNNsYziQWJk0P1G0/kVeo5G1EjbNge1b3JlD3BHdBW87oNQzk72r90CAwEA
-AaMPMA0wCwYDVR0PBAQDAgLUMA0GCSqGSIb3DQEBBQUAA4IBAQBobiY2tbG5cy5Y
-88T6IXNua5n4739dw7v3GyaeotvxbzI/5NjejwuXiE6bNp3RhWABmMdovkPBBoBn
-JuMZwXZG3VfOxPa54d2cxyoEYZUpuXa/f93fs5fPmMsz5AXUyi3Z4xIpXhjoPwXM
-aN5mX6LB15EExfCQSEFgW6hC85lUL6s3FVwTyTasHxaTWV1vXjkToFrSvTAPeGg8
-ptYvOS8ME51zN+daqhu3HsGRKb+Z8lqYclOV9IAyznxRb7XNSpnc44MbwcGdchyU
-vjtfIwfoAWmL22SjjLIFKQFSfX5zrRHnLDVqCyMKGnnfcqLRR5/I61zt/szuAQkw
-sV/IDA62
+MIID+DCCAuCgAwIBAgIRANAeQJAAACdLAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw
+gYwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQHEw5TYWx0IExh
+a2UgQ2l0eTEYMBYGA1UEChMPWGNlcnQgRVogYnkgRFNUMRgwFgYDVQQDEw9YY2Vy
+dCBFWiBieSBEU1QxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAe
+Fw05OTA3MTQxNjE0MThaFw0wOTA3MTExNjE0MThaMIGMMQswCQYDVQQGEwJVUzEN
+MAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxGDAWBgNVBAoT
+D1hjZXJ0IEVaIGJ5IERTVDEYMBYGA1UEAxMPWGNlcnQgRVogYnkgRFNUMSEwHwYJ
+KoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCtVBjetL/3reh0qu2LfI/C1HUa1YS5tmL8ie/kl2GS+x24
+4VpHNJ6eBiL70+o4y7iLB/caoBd3B1owHNQpOCDXJ0DYUJNDv9IYoil2BXKqa7Zp
+mKt5Hhxl9WqL/MUWqqJy2mDtTm4ZJXoKHTDjUJtCPETrobAgHtsCfv49H7/QAIrb
+QHamGKUVp1e2UsIBF5h3j4qBxhq0airmr6nWAKzP2BVJfNsbof6B+of505DBAsD5
+0ELpkWglX8a/hznplQBgKL+DLMDnXrbXNhbnYId26OcnsiUNi3rlqh3lWc3OCw5v
+xsic4xDZhTnTt5v6xrp8dNJddVardKSiUb9SfO5xAgMBAAGjUzBRMA8GA1UdEwEB
+/wQFMAMBAf8wHwYDVR0jBBgwFoAUCCBsZuuBCmxc1bWmPEHdHJaRJ3cwHQYDVR0O
+BBYEFAggbGbrgQpsXNW1pjxB3RyWkSd3MA0GCSqGSIb3DQEBBQUAA4IBAQBah1iP
+Lat2IWtUDNnxQfZOzSue4x+boy1/2St9WMhnpCn16ezVvZY/o3P4xFs2fNBjLDQ5
+m0i4PW/2FMWeY+anNG7T6DOzxzwYbiOuQ5KZP5jFaTDxNjutuTCC1rZZFpYCCykS
+YbQRifcML5SQhZgonFNsfmPdc/QZ/0qB0bJSI/08SjTOWhvgUIrtT4GV2GDn5MQN
+u1g+WPdOaG8+Z8nLepcWJ+xCYRR2uwDF6wg9FX9LtiJdhzuQ9PPA/jez6dliDMDD
+Wa9gvR8N26E0HzDEPYutsB0Ek+1f1eS/IDAE9EjpMwHRLpAnUrOb3jocq6mXf5vr
+wo3CbezcE9NGxXl8
 -----END CERTIFICATE-----
 Certificate Ingredients:
     Data:
         Version: 3 (0x2)
-        Serial Number: 0 (0x0)
+        Serial Number:
+            d0:1e:40:90:00:00:27:4b:00:00:00:01:00:00:00:04
         Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=US, ST=DC, L=Washington, O=ABA.ECOM, Inc., CN=ABA.ECOM Root CA/Email=kdaguio@aba.com
+        Issuer: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com
         Validity
-            Not Before: Jul 29 16:59:52 1998 GMT
-            Not After : Jul 27 16:59:52 2005 GMT
-        Subject: C=US, ST=DC, L=Washington, O=ABA.ECOM, Inc., CN=ABA.ECOM Root CA/Email=kdaguio@aba.com
+            Not Before: Jul 14 16:14:18 1999 GMT
+            Not After : Jul 11 16:14:18 2009 GMT
+        Subject: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
             RSA Public Key: (2048 bit)
                 Modulus (2048 bit):
-                    00:c6:9e:dc:bd:dc:0e:09:1a:51:c6:92:9b:99:6b:
-                    8c:69:89:be:1b:c5:a2:11:4e:84:66:0d:99:f1:ff:
-                    1f:99:a1:33:d6:b4:92:8b:a5:8b:9e:d6:a7:90:c4:
-                    c9:b4:81:1a:9e:87:50:ff:73:56:a7:6d:10:5b:08:
-                    13:a6:ac:08:a9:1a:20:72:1a:0f:33:74:b1:58:b1:
-                    56:6f:35:36:3d:33:5e:93:e3:9a:02:b5:a1:b7:f1:
-                    6f:31:05:35:0d:d7:a0:0f:ce:32:67:b1:3d:48:f6:
-                    49:8b:a2:b1:fe:46:80:2e:3f:ec:44:0d:14:a7:de:
-                    ba:10:d7:bc:09:ff:55:96:51:17:4e:65:b8:27:a0:
-                    12:91:00:f5:b7:3b:52:bd:a8:35:3e:13:d3:18:51:
-                    bd:16:f7:7d:12:01:89:37:3b:eb:c1:a2:60:42:be:
-                    40:1c:d3:77:68:6f:f8:b4:07:7e:66:b9:e3:6a:54:
-                    0d:a6:e8:1c:60:e2:ef:ee:9d:ad:63:ec:93:6b:9d:
-                    ad:63:0e:9e:8f:23:96:17:05:fc:e8:75:d6:14:35:
-                    ea:2d:83:9a:f6:55:8e:93:4d:b1:8c:e2:41:62:64:
-                    d0:fd:46:d3:f9:15:7a:8e:46:d4:48:db:36:07:b5:
-                    6f:72:65:0f:70:47:74:15:bc:ee:83:50:ce:4e:f6:
-                    af:dd
+                    00:ad:54:18:de:b4:bf:f7:ad:e8:74:aa:ed:8b:7c:
+                    8f:c2:d4:75:1a:d5:84:b9:b6:62:fc:89:ef:e4:97:
+                    61:92:fb:1d:b8:e1:5a:47:34:9e:9e:06:22:fb:d3:
+                    ea:38:cb:b8:8b:07:f7:1a:a0:17:77:07:5a:30:1c:
+                    d4:29:38:20:d7:27:40:d8:50:93:43:bf:d2:18:a2:
+                    29:76:05:72:aa:6b:b6:69:98:ab:79:1e:1c:65:f5:
+                    6a:8b:fc:c5:16:aa:a2:72:da:60:ed:4e:6e:19:25:
+                    7a:0a:1d:30:e3:50:9b:42:3c:44:eb:a1:b0:20:1e:
+                    db:02:7e:fe:3d:1f:bf:d0:00:8a:db:40:76:a6:18:
+                    a5:15:a7:57:b6:52:c2:01:17:98:77:8f:8a:81:c6:
+                    1a:b4:6a:2a:e6:af:a9:d6:00:ac:cf:d8:15:49:7c:
+                    db:1b:a1:fe:81:fa:87:f9:d3:90:c1:02:c0:f9:d0:
+                    42:e9:91:68:25:5f:c6:bf:87:39:e9:95:00:60:28:
+                    bf:83:2c:c0:e7:5e:b6:d7:36:16:e7:60:87:76:e8:
+                    e7:27:b2:25:0d:8b:7a:e5:aa:1d:e5:59:cd:ce:0b:
+                    0e:6f:c6:c8:9c:e3:10:d9:85:39:d3:b7:9b:fa:c6:
+                    ba:7c:74:d2:5d:75:56:ab:74:a4:a2:51:bf:52:7c:
+                    ee:71
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
-            X509v3 Key Usage: 
-                ....
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+            X509v3 Authority Key Identifier: 
+                keyid:08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77
+
+            X509v3 Subject Key Identifier: 
+                08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77
     Signature Algorithm: sha1WithRSAEncryption
-        68:6e:26:36:b5:b1:b9:73:2e:58:f3:c4:fa:21:73:6e:6b:99:
-        f8:ef:7f:5d:c3:bb:f7:1b:26:9e:a2:db:f1:6f:32:3f:e4:d8:
-        de:8f:0b:97:88:4e:9b:36:9d:d1:85:60:01:98:c7:68:be:43:
-        c1:06:80:67:26:e3:19:c1:76:46:dd:57:ce:c4:f6:b9:e1:dd:
-        9c:c7:2a:04:61:95:29:b9:76:bf:7f:dd:df:b3:97:cf:98:cb:
-        33:e4:05:d4:ca:2d:d9:e3:12:29:5e:18:e8:3f:05:cc:68:de:
-        66:5f:a2:c1:d7:91:04:c5:f0:90:48:41:60:5b:a8:42:f3:99:
-        54:2f:ab:37:15:5c:13:c9:36:ac:1f:16:93:59:5d:6f:5e:39:
-        13:a0:5a:d2:bd:30:0f:78:68:3c:a6:d6:2f:39:2f:0c:13:9d:
-        73:37:e7:5a:aa:1b:b7:1e:c1:91:29:bf:99:f2:5a:98:72:53:
-        95:f4:80:32:ce:7c:51:6f:b5:cd:4a:99:dc:e3:83:1b:c1:c1:
-        9d:72:1c:94:be:3b:5f:23:07:e8:01:69:8b:db:64:a3:8c:b2:
-        05:29:01:52:7d:7e:73:ad:11:e7:2c:35:6a:0b:23:0a:1a:79:
-        df:72:a2:d1:47:9f:c8:eb:5c:ed:fe:cc:ee:01:09:30:b1:5f:
-        c8:0c:0e:b6
+        5a:87:58:8f:2d:ab:76:21:6b:54:0c:d9:f1:41:f6:4e:cd:2b:
+        9e:e3:1f:9b:a3:2d:7f:d9:2b:7d:58:c8:67:a4:29:f5:e9:ec:
+        d5:bd:96:3f:a3:73:f8:c4:5b:36:7c:d0:63:2c:34:39:9b:48:
+        b8:3d:6f:f6:14:c5:9e:63:e6:a7:34:6e:d3:e8:33:b3:c7:3c:
+        18:6e:23:ae:43:92:99:3f:98:c5:69:30:f1:36:3b:ad:b9:30:
+        82:d6:b6:59:16:96:02:0b:29:12:61:b4:11:89:f7:0c:2f:94:
+        90:85:98:28:9c:53:6c:7e:63:dd:73:f4:19:ff:4a:81:d1:b2:
+        52:23:fd:3c:4a:34:ce:5a:1b:e0:50:8a:ed:4f:81:95:d8:60:
+        e7:e4:c4:0d:bb:58:3e:58:f7:4e:68:6f:3e:67:c9:cb:7a:97:
+        16:27:ec:42:61:14:76:bb:00:c5:eb:08:3d:15:7f:4b:b6:22:
+        5d:87:3b:90:f4:f3:c0:fe:37:b3:e9:d9:62:0c:c0:c3:59:af:
+        60:bd:1f:0d:db:a1:34:1f:30:c4:3d:8b:ad:b0:1d:04:93:ed:
+        5f:d5:e4:bf:20:30:04:f4:48:e9:33:01:d1:2e:90:27:52:b3:
+        9b:de:3a:1c:ab:a9:97:7f:9b:eb:c2:8d:c2:6d:ec:dc:13:d3:
+        46:c5:79:7c
 
 ANX Network CA by DST
 =====================
@@ -142,22 +150,21 @@ Certificate Ingredients:
                 Exponent: 3 (0x3)
         X509v3 extensions:
             Netscape Cert Type: 
-                ....
+                SSL CA, S/MIME CA, Object Signing CA
             X509v3 CRL Distribution Points: 
-                0k0i.g.e.c0a1.0...U....US1$0"..U.
-..Digital Signature Trust Co.1.0...U....DST (ANX Network) CA1\r0...U....CRL1
+                DirName:/C=US/O=Digital Signature Trust Co./OU=DST (ANX Network) CA/CN=CRL1
+
             X509v3 Private Key Usage Period: 
-                0"..19981209154648Z..20181209154648Z
+                Not Before: Dec  9 15:46:48 1998 GMT, Not After: Dec  9 15:46:48 2018 GMT
             X509v3 Key Usage: 
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Authority Key Identifier: 
-                0.....Up..
-Sd.....d.C?.6
+                keyid:8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36
+
             X509v3 Subject Key Identifier: 
-                ....Up..
-Sd.....d.C?.6
+                8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36
             X509v3 Basic Constraints: 
-                0....
+                CA:TRUE
             1.2.840.113533.7.65.0: 
                 0
 ..V4.0....
@@ -171,84 +178,6 @@ Sd.....d.C?.6
         ef:26:94:5f:ad:31:0c:fe:29:1e:17:01:84:37:5b:e8:12:32:
         a3:5d
 
-Access America by DST
-=====================
-MD5 Fingerprint: CD:3B:3D:62:5B:09:B8:09:36:87:9E:12:2F:71:64:BA
-PEM Data:
------BEGIN CERTIFICATE-----
-MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw
-CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
-dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
-CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B
-CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy
-MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
-U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
-IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx
-ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV
-p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw
-BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl
-5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi
-3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+
-QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG
-9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ
-2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN
-I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL
-553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
-10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN
-uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==
------END CERTIFICATE-----
-Certificate Ingredients:
-    Data:
-        Version: 1 (0x0)
-        Serial Number:
-            d0:1e:40:8b:00:00:77:6d:00:00:00:01:00:00:00:04
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com
-        Validity
-            Not Before: Nov 30 22:46:16 1998 GMT
-            Not After : Nov 27 22:46:16 2008 GMT
-        Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (2048 bit)
-                Modulus (2048 bit):
-                    00:dc:75:f0:8c:c0:75:96:9a:c0:62:1f:26:f7:c4:
-                    e1:9a:ea:e0:56:73:5b:99:cd:01:44:a8:08:b6:d5:
-                    a7:da:1a:04:18:39:92:4a:78:a3:81:c2:f5:77:7a:
-                    50:b4:70:ff:9a:ab:c6:c7:ca:6e:83:4f:42:98:fb:
-                    26:0b:da:dc:6d:d6:a9:99:55:52:67:e9:28:03:92:
-                    dc:e5:b0:05:9a:0f:15:f9:6b:59:72:56:f2:fa:39:
-                    fc:aa:68:ee:0f:1f:10:83:2f:fc:9d:fa:17:96:dd:
-                    82:e3:e6:45:7d:c0:4b:80:44:1f:ed:2c:e0:84:fd:
-                    91:5c:92:54:69:25:e5:62:69:dc:e5:ee:00:52:bd:
-                    33:0b:ad:75:02:85:a7:64:50:2d:c5:19:19:30:c0:
-                    26:db:c9:d3:fd:2e:99:ad:59:b5:0b:4d:d4:41:ae:
-                    85:48:43:59:dc:b7:a8:e2:a2:de:c3:8f:d7:b8:a1:
-                    62:a6:68:50:52:e4:cf:31:a7:94:85:da:9f:46:32:
-                    17:56:e5:f2:eb:66:3d:12:ff:43:db:98:ef:77:cf:
-                    cb:81:8d:34:b1:c6:50:4a:26:d1:e4:3e:41:50:af:
-                    6c:ae:22:34:2e:d5:6b:6e:83:ba:79:b8:76:65:48:
-                    da:09:29:64:63:22:b9:fb:47:76:85:8c:86:44:cb:
-                    09:db
-                Exponent: 65537 (0x10001)
-    Signature Algorithm: sha1WithRSAEncryption
-        b5:36:0e:5d:e1:61:28:5a:11:65:c0:3f:83:03:79:4d:be:28:
-        a6:0b:07:02:52:85:cd:f8:91:d0:10:6c:b5:6a:20:5b:1c:90:
-        d9:30:3c:c6:48:9e:8a:5e:64:f9:a1:71:77:ef:04:27:1f:07:
-        eb:e4:26:f7:73:74:c9:44:18:1a:66:d3:e0:43:af:91:3b:d1:
-        cb:2c:d8:74:54:3a:1c:4d:ca:d4:68:cd:23:7c:1d:10:9e:45:
-        e9:f6:00:6e:a6:cd:19:ff:4f:2c:29:8f:57:4d:c4:77:92:be:
-        e0:4c:09:fb:5d:44:86:66:21:a8:b9:32:a2:56:d5:e9:8c:83:
-        7c:59:3f:c4:f1:0b:e7:9d:ec:9e:bd:9c:18:0e:3e:c2:39:79:
-        28:b7:03:0d:08:cb:c6:e7:d9:01:37:50:10:ec:cc:61:16:40:
-        d4:af:31:74:7b:fc:3f:31:a7:d0:47:73:33:39:1b:cc:4e:6a:
-        d7:49:83:11:06:fe:eb:82:58:33:32:4c:f0:56:ac:1e:9c:2f:
-        56:9a:7b:c1:4a:1c:a5:fd:55:36:ce:fc:96:4d:f4:b0:f0:ec:
-        b7:6c:82:ed:2f:31:99:42:4c:a9:b2:0d:b8:15:5d:f1:df:ba:
-        c9:b5:4a:d4:64:98:b3:26:a9:30:c8:fd:a6:ec:ab:96:21:ad:
-        7f:c2:78:b6
-
 American Express CA
 ===================
 MD5 Fingerprint: 1C:D5:8E:82:BE:70:55:8E:39:61:DF:AD:51:DB:6B:A0
@@ -366,15 +295,14 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
-                0.......
+                CA:TRUE, pathlen:5
             X509v3 Key Usage: critical
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Certificate Policies: 
-                0.0..
-*.H...
-...
+                Policy: 1.2.840.113807.10.1.5.1
+
             X509v3 Subject Key Identifier: 
-                ..WG5{6'..../F%.$i
+                57:47:35:7B:36:27:11:A8:08:FC:2F:46:25:EB:24:69
     Signature Algorithm: sha1WithRSAEncryption
         c7:61:45:a8:8a:71:b9:be:34:e9:21:7b:21:cd:56:13:98:d5:
         30:63:e9:18:aa:4b:92:15:bf:0b:1d:bb:ec:92:69:c5:2e:c3:
@@ -441,7 +369,7 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             Netscape Cert Type: 
-                ....
+                SSL CA, S/MIME CA, Object Signing CA
     Signature Algorithm: md5WithRSAEncryption
         63:76:17:7c:96:f0:53:a5:5d:01:1c:53:ce:29:c2:7e:75:ac:
         4c:0d:a2:08:73:b4:6a:31:fd:02:06:14:99:dc:54:04:a4:bf:
@@ -500,7 +428,7 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             Netscape Cert Type: 
-                ....
+                SSL Client, S/MIME
     Signature Algorithm: md5WithRSAEncryption
         6c:3d:99:c3:05:e2:1d:ca:e5:2d:aa:68:85:8b:40:31:20:66:
         13:68:e6:58:3a:89:d0:8d:75:b2:c5:62:d8:7d:82:8f:f7:d9:
@@ -557,11 +485,11 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: 
-                0.......
+                CA:TRUE, pathlen:5
             X509v3 Key Usage: critical
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Subject Key Identifier: 
-                ..,.Y........>.~X.
+                2C:87:59:1F:8B:13:80:B2:F9:86:9D:3E:12:7E:58:96
     Signature Algorithm: md5WithRSAEncryption
         0f:fe:73:b5:07:88:6f:a0:0b:89:ea:ca:50:1f:94:de:94:2b:
         0b:27:5e:4f:f5:1c:95:26:da:8c:96:54:ad:19:91:37:43:5d:
@@ -621,22 +549,21 @@ Certificate Ingredients:
                 Exponent: 3 (0x3)
         X509v3 extensions:
             Netscape Cert Type: 
-                ....
+                SSL CA, S/MIME CA, Object Signing CA
             X509v3 CRL Distribution Points: 
-                0_0].[.Y.W0U1.0...U....US1$0"..U.
-..Digital Signature Trust Co.1.0...U....DSTCA E11\r0...U....CRL1
+                DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E1/CN=CRL1
+
             X509v3 Private Key Usage Period: 
-                0"..19981210181023Z..20181210181023Z
+                Not Before: Dec 10 18:10:23 1998 GMT, Not After: Dec 10 18:10:23 2018 GMT
             X509v3 Key Usage: 
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Authority Key Identifier: 
-                0...jy~.iF..
-.w.Y[`.%...
+                keyid:6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8
+
             X509v3 Subject Key Identifier: 
-                ..jy~.iF..
-.w.Y[`.%...
+                6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8
             X509v3 Basic Constraints: 
-                0....
+                CA:TRUE
             1.2.840.113533.7.65.0: 
                 0
 ..V4.0....
@@ -728,82 +655,503 @@ Certificate Ingredients:
         4f:d2:08:da:93:dc:f0:92:11:7a:d0:dc:72:93:0c:73:93:62:
         85:68:d0:f4
 
-Entrust Worldwide by DST
-========================
-MD5 Fingerprint: B4:65:22:0A:7C:AD:DF:41:B7:D5:44:D5:AD:FA:9A:75
+Digital Signature Trust Co. Global CA 3
+=======================================
+MD5 Fingerprint: 93:C2:8E:11:7B:D4:F3:03:19:BD:28:75:13:4A:45:4A
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
+EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
+BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
+ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
+k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
+LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
+TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
+SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
+JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
+RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
+MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
+TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
+WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
+SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
+xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
+B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 913232846 (0x366ed3ce)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E2
+        Validity
+            Not Before: Dec  9 19:17:26 1998 GMT
+            Not After : Dec  9 19:47:26 2018 GMT
+        Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E2
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:bf:93:8f:17:92:ef:33:13:18:eb:10:7f:4e:16:
+                    bf:ff:06:8f:2a:85:bc:5e:f9:24:a6:24:88:b6:03:
+                    b7:c1:c3:5f:03:5b:d1:6f:ae:7e:42:ea:66:23:b8:
+                    63:83:56:fb:28:2d:e1:38:8b:b4:ee:a8:01:e1:ce:
+                    1c:b6:88:2a:22:46:85:fb:9f:a7:70:a9:47:14:3f:
+                    ce:de:65:f0:a8:71:f7:4f:26:6c:8c:bc:c6:b5:ef:
+                    de:49:27:ff:48:2a:7d:e8:4d:03:cc:c7:b2:52:c6:
+                    17:31:13:3b:b5:4d:db:c8:c4:f6:c3:0f:24:2a:da:
+                    0c:9d:e7:91:5b:80:cd:94:9d
+                Exponent: 3 (0x3)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E2/CN=CRL1
+
+            X509v3 Private Key Usage Period: 
+                Not Before: Dec  9 19:17:26 1998 GMT, Not After: Dec  9 19:17:26 2018 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B
+
+            X509v3 Subject Key Identifier: 
+                1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0
+..V4.0....
+    Signature Algorithm: sha1WithRSAEncryption
+        47:8d:83:ad:62:f2:db:b0:9e:45:22:05:b9:a2:d6:03:0e:38:
+        72:e7:9e:fc:7b:e6:93:b6:9a:a5:a2:94:c8:34:1d:91:d1:c5:
+        d7:f4:0a:25:0f:3d:78:81:9e:0f:b1:67:c4:90:4c:63:dd:5e:
+        a7:e2:ba:9f:f5:f7:4d:a5:31:7b:9c:29:2d:4c:fe:64:3e:ec:
+        b6:53:fe:ea:9b:ed:82:db:74:75:4b:07:79:6e:1e:d8:19:83:
+        73:de:f5:3e:d0:b5:de:e7:4b:68:7d:43:2e:2a:20:e1:7e:a0:
+        78:44:9e:08:f5:98:f9:c7:7f:1b:1b:d6:06:20:02:58:a1:c3:
+        a2:03
+
+Digital Signature Trust Co. Global CA 4
+=======================================
+MD5 Fingerprint: CD:3B:3D:62:5B:09:B8:09:36:87:9E:12:2F:71:64:BA
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw
+CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
+dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
+CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B
+CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy
+MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
+U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
+IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx
+ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV
+p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw
+BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl
+5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi
+3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+
+QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG
+9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ
+2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN
+I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL
+553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
+10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN
+uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            d0:1e:40:8b:00:00:77:6d:00:00:00:01:00:00:00:04
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com
+        Validity
+            Not Before: Nov 30 22:46:16 1998 GMT
+            Not After : Nov 27 22:46:16 2008 GMT
+        Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:dc:75:f0:8c:c0:75:96:9a:c0:62:1f:26:f7:c4:
+                    e1:9a:ea:e0:56:73:5b:99:cd:01:44:a8:08:b6:d5:
+                    a7:da:1a:04:18:39:92:4a:78:a3:81:c2:f5:77:7a:
+                    50:b4:70:ff:9a:ab:c6:c7:ca:6e:83:4f:42:98:fb:
+                    26:0b:da:dc:6d:d6:a9:99:55:52:67:e9:28:03:92:
+                    dc:e5:b0:05:9a:0f:15:f9:6b:59:72:56:f2:fa:39:
+                    fc:aa:68:ee:0f:1f:10:83:2f:fc:9d:fa:17:96:dd:
+                    82:e3:e6:45:7d:c0:4b:80:44:1f:ed:2c:e0:84:fd:
+                    91:5c:92:54:69:25:e5:62:69:dc:e5:ee:00:52:bd:
+                    33:0b:ad:75:02:85:a7:64:50:2d:c5:19:19:30:c0:
+                    26:db:c9:d3:fd:2e:99:ad:59:b5:0b:4d:d4:41:ae:
+                    85:48:43:59:dc:b7:a8:e2:a2:de:c3:8f:d7:b8:a1:
+                    62:a6:68:50:52:e4:cf:31:a7:94:85:da:9f:46:32:
+                    17:56:e5:f2:eb:66:3d:12:ff:43:db:98:ef:77:cf:
+                    cb:81:8d:34:b1:c6:50:4a:26:d1:e4:3e:41:50:af:
+                    6c:ae:22:34:2e:d5:6b:6e:83:ba:79:b8:76:65:48:
+                    da:09:29:64:63:22:b9:fb:47:76:85:8c:86:44:cb:
+                    09:db
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        b5:36:0e:5d:e1:61:28:5a:11:65:c0:3f:83:03:79:4d:be:28:
+        a6:0b:07:02:52:85:cd:f8:91:d0:10:6c:b5:6a:20:5b:1c:90:
+        d9:30:3c:c6:48:9e:8a:5e:64:f9:a1:71:77:ef:04:27:1f:07:
+        eb:e4:26:f7:73:74:c9:44:18:1a:66:d3:e0:43:af:91:3b:d1:
+        cb:2c:d8:74:54:3a:1c:4d:ca:d4:68:cd:23:7c:1d:10:9e:45:
+        e9:f6:00:6e:a6:cd:19:ff:4f:2c:29:8f:57:4d:c4:77:92:be:
+        e0:4c:09:fb:5d:44:86:66:21:a8:b9:32:a2:56:d5:e9:8c:83:
+        7c:59:3f:c4:f1:0b:e7:9d:ec:9e:bd:9c:18:0e:3e:c2:39:79:
+        28:b7:03:0d:08:cb:c6:e7:d9:01:37:50:10:ec:cc:61:16:40:
+        d4:af:31:74:7b:fc:3f:31:a7:d0:47:73:33:39:1b:cc:4e:6a:
+        d7:49:83:11:06:fe:eb:82:58:33:32:4c:f0:56:ac:1e:9c:2f:
+        56:9a:7b:c1:4a:1c:a5:fd:55:36:ce:fc:96:4d:f4:b0:f0:ec:
+        b7:6c:82:ed:2f:31:99:42:4c:a9:b2:0d:b8:15:5d:f1:df:ba:
+        c9:b5:4a:d4:64:98:b3:26:a9:30:c8:fd:a6:ec:ab:96:21:ad:
+        7f:c2:78:b6
+
+Entrust Worldwide by DST
+========================
+MD5 Fingerprint: B4:65:22:0A:7C:AD:DF:41:B7:D5:44:D5:AD:FA:9A:75
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIDRzCCArCgAwIBAgIENm3FGDANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRswGQYDVQQL
+ExJEU1QtRW50cnVzdCBHVEkgQ0EwHhcNOTgxMjA5MDAwMjI0WhcNMTgxMjA5MDAz
+MjI0WjBQMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg
+VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0EwgZ0wDQYJKoZI
+hvcNAQEBBQADgYsAMIGHAoGBALYd90uNDxPjEvUJ/gYyDq9MQfV91Ec9KgrfgwXe
+3n3mAxb2UTrLRxpKrX7E/R20vnSKeN0Lg460hBPE+/htKa6h4Q8PQ+O1XmBp+oOU
+/Hnm3Hbt0UQrjv0Su/4XdxcMie2n71F9xO04wzujevviTaBgtfL9E2XTxuw/vjWc
+PSLvAgEDo4IBLjCCASowEQYJYIZIAYb4QgEBBAQDAgAHMHIGA1UdHwRrMGkwZ6Bl
+oGOkYTBfMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg
+VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0ExDTALBgNVBAMT
+BENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkwMDAyMjRagQ8yMDE4MTIwOTAwMDIy
+NFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFJOaRMrQeFOAKUkE38evMz+ZdV+u
+MB0GA1UdDgQWBBSTmkTK0HhTgClJBN/HrzM/mXVfrjAMBgNVHRMEBTADAQH/MBkG
+CSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GBAGSJzAOn
+3AryWCDn/RegKHLNh7DNmLUkR2MzMRAQsu+KV3KuTAPgZ5+sYEOEIsGpo+Wxp94J
+1M8NeEYjW49Je/4TIpeU6nJI4SwgeJbpZkUZywllY2E/0UmYsXYQVdVjSmZLpAdr
+3nt/ueaTWxoCW4AO3Y0Y1Iqjwmjxo+AY0U5M
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 913163544 (0x366dc518)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA
+        Validity
+            Not Before: Dec  9 00:02:24 1998 GMT
+            Not After : Dec  9 00:32:24 2018 GMT
+        Subject: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b6:1d:f7:4b:8d:0f:13:e3:12:f5:09:fe:06:32:
+                    0e:af:4c:41:f5:7d:d4:47:3d:2a:0a:df:83:05:de:
+                    de:7d:e6:03:16:f6:51:3a:cb:47:1a:4a:ad:7e:c4:
+                    fd:1d:b4:be:74:8a:78:dd:0b:83:8e:b4:84:13:c4:
+                    fb:f8:6d:29:ae:a1:e1:0f:0f:43:e3:b5:5e:60:69:
+                    fa:83:94:fc:79:e6:dc:76:ed:d1:44:2b:8e:fd:12:
+                    bb:fe:17:77:17:0c:89:ed:a7:ef:51:7d:c4:ed:38:
+                    c3:3b:a3:7a:fb:e2:4d:a0:60:b5:f2:fd:13:65:d3:
+                    c6:ec:3f:be:35:9c:3d:22:ef
+                Exponent: 3 (0x3)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Digital Signature Trust Co./OU=DST-Entrust GTI CA/CN=CRL1
+
+            X509v3 Private Key Usage Period: 
+                Not Before: Dec  9 00:02:24 1998 GMT, Not After: Dec  9 00:02:24 2018 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE
+
+            X509v3 Subject Key Identifier: 
+                93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0
+..V4.0....
+    Signature Algorithm: sha1WithRSAEncryption
+        64:89:cc:03:a7:dc:0a:f2:58:20:e7:fd:17:a0:28:72:cd:87:
+        b0:cd:98:b5:24:47:63:33:31:10:10:b2:ef:8a:57:72:ae:4c:
+        03:e0:67:9f:ac:60:43:84:22:c1:a9:a3:e5:b1:a7:de:09:d4:
+        cf:0d:78:46:23:5b:8f:49:7b:fe:13:22:97:94:ea:72:48:e1:
+        2c:20:78:96:e9:66:45:19:cb:09:65:63:61:3f:d1:49:98:b1:
+        76:10:55:d5:63:4a:66:4b:a4:07:6b:de:7b:7f:b9:e6:93:5b:
+        1a:02:5b:80:0e:dd:8d:18:d4:8a:a3:c2:68:f1:a3:e0:18:d1:
+        4e:4c
+
+Entrust.net Premium 2048 Secure Server CA
+=========================================
+MD5 Fingerprint: BA:21:EA:20:D6:DD:DB:8F:C1:57:8B:40:AD:A1:FC:FC
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
+MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
+vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
+CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
+WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
+oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
+h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
+f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
+B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
+vUxFnmG6v4SBkgPR0ml8xQ==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 946059622 (0x3863b966)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
+        Validity
+            Not Before: Dec 24 17:50:51 1999 GMT
+            Not After : Dec 24 18:20:51 2019 GMT
+        Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64:
+                    2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7:
+                    78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76:
+                    98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf:
+                    e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1:
+                    02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29:
+                    b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64:
+                    ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c:
+                    e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89:
+                    a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90:
+                    76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2:
+                    cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a:
+                    fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55:
+                    60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86:
+                    5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26:
+                    93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e:
+                    4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0:
+                    07:e1
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 Authority Key Identifier: 
+                keyid:55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70
+
+            X509v3 Subject Key Identifier: 
+                55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70
+            1.2.840.113533.7.65.0: 
+                0...V5.0:4.0....
+    Signature Algorithm: sha1WithRSAEncryption
+        59:47:ac:21:84:8a:17:c9:9c:89:53:1e:ba:80:85:1a:c6:3c:
+        4e:3e:b1:9c:b6:7c:c6:92:5d:18:64:02:e3:d3:06:08:11:61:
+        7c:63:e3:2b:9d:31:03:70:76:d2:a3:28:a0:f4:bb:9a:63:73:
+        ed:6d:e5:2a:db:ed:14:a9:2b:c6:36:11:d0:2b:eb:07:8b:a5:
+        da:9e:5c:19:9d:56:12:f5:54:29:c8:05:ed:b2:12:2a:8d:f4:
+        03:1b:ff:e7:92:10:87:b0:3a:b5:c3:9d:05:37:12:a3:c7:f4:
+        15:b9:d5:a4:39:16:9b:53:3a:23:91:f1:a8:82:a2:6a:88:68:
+        c1:79:02:22:bc:aa:a6:d6:ae:df:b0:14:5f:b8:87:d0:dd:7c:
+        7f:7b:ff:af:1c:cf:e6:db:07:ad:5e:db:85:9d:d0:2b:0d:33:
+        db:04:d1:e6:49:40:13:2b:76:fb:3e:e9:9c:89:0f:15:ce:18:
+        b0:85:78:21:4f:6b:4f:0e:fa:36:67:cd:07:f2:ff:08:d0:e2:
+        de:d9:bf:2a:af:b8:87:86:21:3c:04:ca:b7:94:68:7f:cf:3c:
+        e9:98:d7:38:ff:ec:c0:d9:50:f0:2e:4b:58:ae:46:6f:d0:2e:
+        c3:60:da:72:55:72:bd:4c:45:9e:61:ba:bf:84:81:92:03:d1:
+        d2:69:7c:c5
+
+Entrust.net Secure Personal CA
+==============================
+MD5 Fingerprint: 0C:41:2F:13:5B:A0:54:F5:96:66:2D:7E:CD:0E:03:F4
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
+ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
+Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
+BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
+MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
+bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
+MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
+RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
+CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
+6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
+5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
+AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
+ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
+cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
+by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
+IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
+Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
+KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
+HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
+BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
+FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
+BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
+pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
+wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
+EkP/TOYGJqibGapEPHayXOw=
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 939758062 (0x380391ee)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority
+        Validity
+            Not Before: Oct 12 19:24:30 1999 GMT
+            Not After : Oct 12 19:54:30 2019 GMT
+        Subject: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:c8:3a:99:5e:31:17:df:ac:27:6f:90:7b:e4:19:
+                    ff:45:a3:34:c2:db:c1:a8:4f:f0:68:ea:84:fd:9f:
+                    75:79:cf:c1:8a:51:94:af:c7:57:03:47:64:9e:ad:
+                    82:1b:5a:da:7f:37:78:47:bb:37:98:12:96:ce:c6:
+                    13:7d:ef:d2:0c:30:51:a9:39:9e:55:f8:fb:b1:e7:
+                    30:de:83:b2:ba:3e:f1:d5:89:3b:3b:85:ba:aa:74:
+                    2c:fe:3f:31:6e:af:91:95:6e:06:d4:07:4d:4b:2c:
+                    56:47:18:04:52:da:0e:10:93:bf:63:90:9b:e1:df:
+                    8c:e6:02:a4:e6:4f:5e:f7:8b
+                Exponent: 3 (0x3)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL CA, S/MIME CA, Object Signing CA
+            X509v3 CRL Distribution Points: 
+                DirName:/C=US/O=Entrust.net/OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab./OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Client Certification Authority/CN=CRL1
+                URI:http://www.entrust.net/CRL/Client1.crl
+
+            X509v3 Private Key Usage Period: 
+                Not Before: Oct 12 19:24:30 1999 GMT, Not After: Oct 12 19:24:30 2019 GMT
+            X509v3 Key Usage: 
+                Certificate Sign, CRL Sign
+            X509v3 Authority Key Identifier: 
+                keyid:C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C
+
+            X509v3 Subject Key Identifier: 
+                C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C
+            X509v3 Basic Constraints: 
+                CA:TRUE
+            1.2.840.113533.7.65.0: 
+                0
+..V4.0....
+    Signature Algorithm: md5WithRSAEncryption
+        3f:ae:8a:f1:d7:66:03:05:9e:3e:fa:ea:1c:46:bb:a4:5b:8f:
+        78:9a:12:48:99:f9:f4:35:de:0c:36:07:02:6b:10:3a:89:14:
+        81:9c:31:a6:7c:b2:41:b2:6a:e7:07:01:a1:4b:f9:9f:25:3b:
+        96:ca:99:c3:3e:a1:51:1c:f3:c3:2e:44:f7:b0:67:46:aa:92:
+        e5:3b:da:1c:19:14:38:30:d5:e2:a2:31:25:2e:f1:ec:45:38:
+        ed:f8:06:58:03:73:62:b0:10:31:8f:40:bf:64:e0:5c:3e:c5:
+        4f:1f:da:12:43:ff:4c:e6:06:26:a8:9b:19:aa:44:3c:76:b2:
+        5c:ec
+
+Entrust.net Secure Server CA
+============================
+MD5 Fingerprint: DF:F2:80:73:CC:F1:E6:61:73:FC:F5:42:E9:C5:7C:EE
 PEM Data:
 -----BEGIN CERTIFICATE-----
-MIIDRzCCArCgAwIBAgIENm3FGDANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRswGQYDVQQL
-ExJEU1QtRW50cnVzdCBHVEkgQ0EwHhcNOTgxMjA5MDAwMjI0WhcNMTgxMjA5MDAz
-MjI0WjBQMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg
-VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0EwgZ0wDQYJKoZI
-hvcNAQEBBQADgYsAMIGHAoGBALYd90uNDxPjEvUJ/gYyDq9MQfV91Ec9KgrfgwXe
-3n3mAxb2UTrLRxpKrX7E/R20vnSKeN0Lg460hBPE+/htKa6h4Q8PQ+O1XmBp+oOU
-/Hnm3Hbt0UQrjv0Su/4XdxcMie2n71F9xO04wzujevviTaBgtfL9E2XTxuw/vjWc
-PSLvAgEDo4IBLjCCASowEQYJYIZIAYb4QgEBBAQDAgAHMHIGA1UdHwRrMGkwZ6Bl
-oGOkYTBfMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg
-VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0ExDTALBgNVBAMT
-BENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkwMDAyMjRagQ8yMDE4MTIwOTAwMDIy
-NFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFJOaRMrQeFOAKUkE38evMz+ZdV+u
-MB0GA1UdDgQWBBSTmkTK0HhTgClJBN/HrzM/mXVfrjAMBgNVHRMEBTADAQH/MBkG
-CSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GBAGSJzAOn
-3AryWCDn/RegKHLNh7DNmLUkR2MzMRAQsu+KV3KuTAPgZ5+sYEOEIsGpo+Wxp94J
-1M8NeEYjW49Je/4TIpeU6nJI4SwgeJbpZkUZywllY2E/0UmYsXYQVdVjSmZLpAdr
-3nt/ueaTWxoCW4AO3Y0Y1Iqjwmjxo+AY0U5M
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
+MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
+ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
+b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
+U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
+I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
+wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
+AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
+oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
+BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
+MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
+E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
+MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
+hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
+95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
+2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
 -----END CERTIFICATE-----
 Certificate Ingredients:
     Data:
         Version: 3 (0x2)
-        Serial Number: 913163544 (0x366dc518)
+        Serial Number: 927650371 (0x374ad243)
         Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA
+        Issuer: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
         Validity
-            Not Before: Dec  9 00:02:24 1998 GMT
-            Not After : Dec  9 00:32:24 2018 GMT
-        Subject: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA
+            Not Before: May 25 16:09:40 1999 GMT
+            Not After : May 25 16:39:40 2019 GMT
+        Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
             RSA Public Key: (1024 bit)
                 Modulus (1024 bit):
-                    00:b6:1d:f7:4b:8d:0f:13:e3:12:f5:09:fe:06:32:
-                    0e:af:4c:41:f5:7d:d4:47:3d:2a:0a:df:83:05:de:
-                    de:7d:e6:03:16:f6:51:3a:cb:47:1a:4a:ad:7e:c4:
-                    fd:1d:b4:be:74:8a:78:dd:0b:83:8e:b4:84:13:c4:
-                    fb:f8:6d:29:ae:a1:e1:0f:0f:43:e3:b5:5e:60:69:
-                    fa:83:94:fc:79:e6:dc:76:ed:d1:44:2b:8e:fd:12:
-                    bb:fe:17:77:17:0c:89:ed:a7:ef:51:7d:c4:ed:38:
-                    c3:3b:a3:7a:fb:e2:4d:a0:60:b5:f2:fd:13:65:d3:
-                    c6:ec:3f:be:35:9c:3d:22:ef
+                    00:cd:28:83:34:54:1b:89:f3:0f:af:37:91:31:ff:
+                    af:31:60:c9:a8:e8:b2:10:68:ed:9f:e7:93:36:f1:
+                    0a:64:bb:47:f5:04:17:3f:23:47:4d:c5:27:19:81:
+                    26:0c:54:72:0d:88:2d:d9:1f:9a:12:9f:bc:b3:71:
+                    d3:80:19:3f:47:66:7b:8c:35:28:d2:b9:0a:df:24:
+                    da:9c:d6:50:79:81:7a:5a:d3:37:f7:c2:4a:d8:29:
+                    92:26:64:d1:e4:98:6c:3a:00:8a:f5:34:9b:65:f8:
+                    ed:e3:10:ff:fd:b8:49:58:dc:a0:de:82:39:6b:81:
+                    b1:16:19:61:b9:54:b6:e6:43
                 Exponent: 3 (0x3)
         X509v3 extensions:
             Netscape Cert Type: 
-                ....
+                SSL CA, S/MIME CA, Object Signing CA
             X509v3 CRL Distribution Points: 
-                0i0g.e.c.a0_1.0...U....US1$0"..U.
-..Digital Signature Trust Co.1.0...U....DST-Entrust GTI CA1\r0...U....CRL1
+                DirName:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority/CN=CRL1
+                URI:http://www.entrust.net/CRL/net1.crl
+
             X509v3 Private Key Usage Period: 
-                0"..19981209000224Z..20181209000224Z
+                Not Before: May 25 16:09:40 1999 GMT, Not After: May 25 16:09:40 2019 GMT
             X509v3 Key Usage: 
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Authority Key Identifier: 
-                0.....D..xS.)I....3?.u_.
+                keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A
+
             X509v3 Subject Key Identifier: 
-                ....D..xS.)I....3?.u_.
+                F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A
             X509v3 Basic Constraints: 
-                0....
+                CA:TRUE
             1.2.840.113533.7.65.0: 
                 0
 ..V4.0....
     Signature Algorithm: sha1WithRSAEncryption
-        64:89:cc:03:a7:dc:0a:f2:58:20:e7:fd:17:a0:28:72:cd:87:
-        b0:cd:98:b5:24:47:63:33:31:10:10:b2:ef:8a:57:72:ae:4c:
-        03:e0:67:9f:ac:60:43:84:22:c1:a9:a3:e5:b1:a7:de:09:d4:
-        cf:0d:78:46:23:5b:8f:49:7b:fe:13:22:97:94:ea:72:48:e1:
-        2c:20:78:96:e9:66:45:19:cb:09:65:63:61:3f:d1:49:98:b1:
-        76:10:55:d5:63:4a:66:4b:a4:07:6b:de:7b:7f:b9:e6:93:5b:
-        1a:02:5b:80:0e:dd:8d:18:d4:8a:a3:c2:68:f1:a3:e0:18:d1:
-        4e:4c
+        90:dc:30:02:fa:64:74:c2:a7:0a:a5:7c:21:8d:34:17:a8:fb:
+        47:0e:ff:25:7c:8d:13:0a:fb:e4:98:b5:ef:8c:f8:c5:10:0d:
+        f7:92:be:f1:c3:d5:d5:95:6a:04:bb:2c:ce:26:36:65:c8:31:
+        c6:e7:ee:3f:e3:57:75:84:7a:11:ef:46:4f:18:f4:d3:98:bb:
+        a8:87:32:ba:72:f6:3c:e2:3d:9f:d7:1d:d9:c3:60:43:8c:58:
+        0e:22:96:2f:62:a3:2c:1f:ba:ad:05:ef:ab:32:78:87:a0:54:
+        73:19:b5:5c:05:f9:52:3e:6d:2d:45:0b:f7:0a:93:ea:ed:06:
+        f9:b2
 
 Equifax Premium CA
 ==================
@@ -854,18 +1202,19 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 CRL Distribution Points: 
-                0h0f.d.b.`0^1.0...U....US1.0...U.
-..Equifax1.0,..U...%Equifax Premium Certificate Authority1\r0...U....CRL1
+                DirName:/C=US/O=Equifax/OU=Equifax Premium Certificate Authority/CN=CRL1
+
             X509v3 Private Key Usage Period: 
-                0...20180824225423Z
+                Not After: Aug 24 22:54:23 2018 GMT
             X509v3 Key Usage: 
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Authority Key Identifier: 
-                0......(Y.n......$..?u..
+                keyid:15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98
+
             X509v3 Subject Key Identifier: 
-                .....(Y.n......$..?u..
+                15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98
             X509v3 Basic Constraints: 
-                0....
+                CA:TRUE
             1.2.840.113533.7.65.0: 
                 0...V3.0c....
     Signature Algorithm: sha1WithRSAEncryption
@@ -927,18 +1276,19 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 CRL Distribution Points: 
-                0g0e.c.a._0]1.0...U....US1.0...U.
-..Equifax1-0+..U...$Equifax Secure Certificate Authority1\r0...U....CRL1
+                DirName:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority/CN=CRL1
+
             X509v3 Private Key Usage Period: 
-                0...20180822164151Z
+                Not After: Aug 22 16:41:51 2018 GMT
             X509v3 Key Usage: 
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Authority Key Identifier: 
-                0...H.h.+....G.# .O3....
+                keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
+
             X509v3 Subject Key Identifier: 
-                ..H.h.+....G.# .O3....
+                48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
             X509v3 Basic Constraints: 
-                0....
+                CA:TRUE
             1.2.840.113533.7.65.0: 
                 0...V3.0c....
     Signature Algorithm: sha1WithRSAEncryption
@@ -1349,15 +1699,14 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
-                0.......
+                CA:TRUE, pathlen:5
             X509v3 Key Usage: critical
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Certificate Policies: 
-                0.0..
-*.H..c....
+                Policy: 1.2.840.113763.1.2.1.3
+
             X509v3 Subject Key Identifier: 
-                ..v
-I!8L....I.qq..
+                76:0A:49:21:38:4C:9F:DE:F8:C4:49:C7:71:71:91:9D
     Signature Algorithm: sha1WithRSAEncryption
         41:3a:d4:18:5b:da:b8:de:21:1c:e1:8e:09:e5:f1:68:34:ff:
         de:96:f4:07:f5:a7:3c:f3:ac:4a:b1:9b:fa:92:fa:9b:ed:e6:
@@ -1488,13 +1837,14 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Key Usage: critical
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Subject Key Identifier: 
-                ..C$.p..bU.O.@.].^..L.
+                43:24:8D:70:15:08:62:55:9C:4F:0C:40:17:5D:86:5E:0F:A2:4C:FB
             X509v3 Authority Key Identifier: 
-                0...`{f.E\r...P/}..4....K
+                keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
+
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         66:ed:b4:88:69:11:99:82:21:83:ac:a1:6d:8b:9b:84:ad:0f:
         2d:c8:1e:8c:ca:7b:7e:ad:aa:d4:8e:de:07:d6:9e:45:c7:a5:
@@ -1574,13 +1924,14 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Key Usage: critical
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Subject Key Identifier: 
-                ....f.Z5..@....C......
+                FC:E0:66:F6:5A:35:99:EB:40:1E:D2:B8:1E:43:BC:98:8E:1F:8A:C3
             X509v3 Authority Key Identifier: 
-                0...`{f.E\r...P/}..4....K
+                keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
+
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         9b:a3:08:44:ce:f2:90:9d:71:f3:32:b3:05:6a:b5:ea:cf:29:
         98:de:55:3e:a0:16:7d:06:7a:44:d6:af:d2:fa:13:58:8c:f8:
@@ -1660,13 +2011,14 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Key Usage: critical
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Subject Key Identifier: 
-                ..|...,...k.v....Nl...
+                7C:E7:B2:B1:2C:DE:B1:A7:6B:E9:76:0C:E1:A3:FD:4E:6C:C7:B9:F6
             X509v3 Authority Key Identifier: 
-                0...`{f.E\r...P/}..4....K
+                keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
+
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         63:dd:59:ce:8a:79:aa:98:9d:4e:c5:89:64:37:7e:8a:93:67:
         2f:10:ea:6f:27:c3:8d:77:6d:f2:5c:56:94:19:1a:69:60:30:
@@ -1746,13 +2098,14 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Key Usage: critical
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Subject Key Identifier: 
-                ...6...E./..;0Hw......
+                CC:36:CC:17:B4:45:91:2F:ED:CF:3B:30:48:77:FB:B5:14:99:BE:E3
             X509v3 Authority Key Identifier: 
-                0...`{f.E\r...P/}..4....K
+                keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
+
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         57:b2:54:cc:bd:95:17:64:60:89:b6:53:91:0c:45:92:c3:3d:
         a8:6c:c3:cc:b2:18:f5:78:41:74:d8:7d:a3:27:af:77:0d:59:
@@ -1831,11 +2184,11 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Key Usage: critical
-                ....
+                Certificate Sign, CRL Sign
             X509v3 Subject Key Identifier: 
-                ..`{f.E\r...P/}..4....K
+                60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         ae:aa:9f:fc:b7:d2:cb:1f:5f:39:29:28:18:9e:34:c9:6c:4f:
         6f:1a:f0:64:a2:70:4a:4f:13:86:9b:60:28:9e:e8:81:49:98:
@@ -1932,82 +2285,6 @@ Certificate Ingredients:
         ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1:
         fc:52:5b:58
 
-Novell E-Commerce Community by DST
-==================================
-MD5 Fingerprint: 93:C2:8E:11:7B:D4:F3:03:19:BD:28:75:13:4A:45:4A
-PEM Data:
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
-k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
-LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
-TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
-MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
-TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
-WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
-B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
-Certificate Ingredients:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 913232846 (0x366ed3ce)
-        Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E2
-        Validity
-            Not Before: Dec  9 19:17:26 1998 GMT
-            Not After : Dec  9 19:47:26 2018 GMT
-        Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E2
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-            RSA Public Key: (1024 bit)
-                Modulus (1024 bit):
-                    00:bf:93:8f:17:92:ef:33:13:18:eb:10:7f:4e:16:
-                    bf:ff:06:8f:2a:85:bc:5e:f9:24:a6:24:88:b6:03:
-                    b7:c1:c3:5f:03:5b:d1:6f:ae:7e:42:ea:66:23:b8:
-                    63:83:56:fb:28:2d:e1:38:8b:b4:ee:a8:01:e1:ce:
-                    1c:b6:88:2a:22:46:85:fb:9f:a7:70:a9:47:14:3f:
-                    ce:de:65:f0:a8:71:f7:4f:26:6c:8c:bc:c6:b5:ef:
-                    de:49:27:ff:48:2a:7d:e8:4d:03:cc:c7:b2:52:c6:
-                    17:31:13:3b:b5:4d:db:c8:c4:f6:c3:0f:24:2a:da:
-                    0c:9d:e7:91:5b:80:cd:94:9d
-                Exponent: 3 (0x3)
-        X509v3 extensions:
-            Netscape Cert Type: 
-                ....
-            X509v3 CRL Distribution Points: 
-                0_0].[.Y.W0U1.0...U....US1$0"..U.
-..Digital Signature Trust Co.1.0...U....DSTCA E21\r0...U....CRL1
-            X509v3 Private Key Usage Period: 
-                0"..19981209191726Z..20181209191726Z
-            X509v3 Key Usage: 
-                ....
-            X509v3 Authority Key Identifier: 
-                0.....M(e.<.An.5.Z....9[
-            X509v3 Subject Key Identifier: 
-                ....M(e.<.An.5.Z....9[
-            X509v3 Basic Constraints: 
-                0....
-            1.2.840.113533.7.65.0: 
-                0
-..V4.0....
-    Signature Algorithm: sha1WithRSAEncryption
-        47:8d:83:ad:62:f2:db:b0:9e:45:22:05:b9:a2:d6:03:0e:38:
-        72:e7:9e:fc:7b:e6:93:b6:9a:a5:a2:94:c8:34:1d:91:d1:c5:
-        d7:f4:0a:25:0f:3d:78:81:9e:0f:b1:67:c4:90:4c:63:dd:5e:
-        a7:e2:ba:9f:f5:f7:4d:a5:31:7b:9c:29:2d:4c:fe:64:3e:ec:
-        b6:53:fe:ea:9b:ed:82:db:74:75:4b:07:79:6e:1e:d8:19:83:
-        73:de:f5:3e:d0:b5:de:e7:4b:68:7d:43:2e:2a:20:e1:7e:a0:
-        78:44:9e:08:f5:98:f9:c7:7f:1b:1b:d6:06:20:02:58:a1:c3:
-        a2:03
-
 TC TrustCenter, Germany, Class 0 CA
 ===================================
 MD5 Fingerprint: 35:85:49:8E:6E:57:FE:BD:97:F1:C9:46:23:3A:B6:7D
@@ -2063,17 +2340,17 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             Netscape Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape CA Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape Renewal Url: 
-                .-https://www.trustcenter.de/cgi-bin/Renew.cgi?
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
             Netscape CA Policy Url: 
-                ./http://www.trustcenter.de/guidelines/index.html
+                http://www.trustcenter.de/guidelines/index.html
             Netscape Comment: 
-                ..TC TrustCenter Class 0 CA
+                TC TrustCenter Class 0 CA
             Netscape Cert Type: 
-                ....
+                SSL CA, S/MIME CA, Object Signing CA
     Signature Algorithm: md5WithRSAEncryption
         4d:07:7f:5f:09:30:19:92:aa:05:47:7a:94:75:54:2a:ae:cf:
         fc:d8:0c:42:e1:45:38:2b:24:95:b2:ca:87:ca:79:c4:c3:97:
@@ -2139,17 +2416,17 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             Netscape Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape CA Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape Renewal Url: 
-                .-https://www.trustcenter.de/cgi-bin/Renew.cgi?
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
             Netscape CA Policy Url: 
-                ./http://www.trustcenter.de/guidelines/index.html
+                http://www.trustcenter.de/guidelines/index.html
             Netscape Comment: 
-                ..TC TrustCenter Class 1 CA
+                TC TrustCenter Class 1 CA
             Netscape Cert Type: 
-                ....
+                SSL CA, S/MIME CA, Object Signing CA
     Signature Algorithm: md5WithRSAEncryption
         05:42:52:26:a4:0c:27:01:44:ac:5c:25:28:c2:44:42:54:08:
         b9:1d:c5:3e:6c:59:66:c4:b3:4e:50:a7:f8:f8:96:75:a1:96:
@@ -2215,17 +2492,17 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             Netscape Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape CA Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape Renewal Url: 
-                .-https://www.trustcenter.de/cgi-bin/Renew.cgi?
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
             Netscape CA Policy Url: 
-                ./http://www.trustcenter.de/guidelines/index.html
+                http://www.trustcenter.de/guidelines/index.html
             Netscape Comment: 
-                ..TC TrustCenter Class 2 CA
+                TC TrustCenter Class 2 CA
             Netscape Cert Type: 
-                ....
+                SSL CA, S/MIME CA, Object Signing CA
     Signature Algorithm: md5WithRSAEncryption
         89:1b:f4:ef:e9:38:e2:6c:0c:f6:cd:6f:49:ce:29:cc:fb:a6:
         0f:f9:8d:3e:95:46:d6:fc:47:32:89:b2:c8:06:61:7a:d2:e7:
@@ -2291,17 +2568,17 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             Netscape Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape CA Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape Renewal Url: 
-                .-https://www.trustcenter.de/cgi-bin/Renew.cgi?
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
             Netscape CA Policy Url: 
-                ./http://www.trustcenter.de/guidelines/index.html
+                http://www.trustcenter.de/guidelines/index.html
             Netscape Comment: 
-                ..TC TrustCenter Class 3 CA
+                TC TrustCenter Class 3 CA
             Netscape Cert Type: 
-                ....
+                SSL CA, S/MIME CA, Object Signing CA
     Signature Algorithm: md5WithRSAEncryption
         84:86:50:62:79:a0:27:e1:25:ba:09:b1:34:0f:13:09:ed:2d:
         ca:a3:e6:95:f9:30:ac:cd:17:a5:ce:3d:97:9d:ec:7c:8f:26:
@@ -2367,17 +2644,17 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             Netscape Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape CA Revocation Url: 
-                .1https://www.trustcenter.de/cgi-bin/check-rev.cgi?
+                https://www.trustcenter.de/cgi-bin/check-rev.cgi?
             Netscape Renewal Url: 
-                .-https://www.trustcenter.de/cgi-bin/Renew.cgi?
+                https://www.trustcenter.de/cgi-bin/Renew.cgi?
             Netscape CA Policy Url: 
-                ./http://www.trustcenter.de/guidelines/index.html
+                http://www.trustcenter.de/guidelines/index.html
             Netscape Comment: 
-                ..TC TrustCenter Class 4 CA
+                TC TrustCenter Class 4 CA
             Netscape Cert Type: 
-                ....
+                SSL CA, S/MIME CA, Object Signing CA
     Signature Algorithm: md5WithRSAEncryption
         94:68:14:1b:25:9e:29:99:b1:b2:23:d2:44:b3:95:9f:d1:9e:
         55:04:dd:e3:2f:82:33:55:96:77:19:9d:2b:9e:65:1c:fa:8a:
@@ -2437,7 +2714,7 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         2d:e2:99:6b:b0:3d:7a:89:d7:59:a2:94:01:1f:2b:dd:12:4b:
         53:c2:ad:7f:aa:a7:00:5c:91:40:57:25:4a:38:aa:84:70:b9:
@@ -2498,7 +2775,7 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         c7:ec:92:7e:4e:f8:f5:96:a5:67:62:2a:a4:f0:4d:11:60:d0:
         6f:8d:60:58:61:ac:26:bb:52:35:5c:08:cf:30:fb:a8:4a:96:
@@ -2558,7 +2835,7 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         69:36:89:f7:34:2a:33:72:2f:6d:3b:d4:22:b2:b8:6f:9a:c5:
         36:66:0e:1b:3c:a1:b1:75:5a:e6:fd:35:d3:f8:a8:f2:07:6f:
@@ -2618,7 +2895,7 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7:
         c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5:
@@ -2678,7 +2955,7 @@ Certificate Ingredients:
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
-                0....
+                CA:TRUE
     Signature Algorithm: md5WithRSAEncryption
         07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9:
         a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48:
@@ -2689,6 +2966,372 @@ Certificate Ingredients:
         b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e:
         70:47
 
+Thawte Universal CA Root
+========================
+MD5 Fingerprint: 17:AF:71:16:52:7B:73:65:22:05:29:28:84:71:9D:13
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIRIjCCCQoCAQAwDQYJKoZIhvcNAQEFBQAwVzEPMA0GA1UEChMGVGhhd3RlMSEw
+HwYDVQQLExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3QxITAfBgNVBAMTGFRoYXd0
+ZSBVbml2ZXJzYWwgQ0EgUm9vdDAeFw05OTEyMDUxMzU2MDVaFw0zNzA0MDMxMzU2
+MDVaMFcxDzANBgNVBAoTBlRoYXd0ZTEhMB8GA1UECxMYVGhhd3RlIFVuaXZlcnNh
+bCBDQSBSb290MSEwHwYDVQQDExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3Qwgggi
+MA0GCSqGSIb3DQEBAQUAA4IIDwAwgggKAoIIAQDiiQVtw3+tpok6/7vHzZ03seHS
+IR6bYSoV53tXT1U80Lv52T0+przstK1TmhYC6wty/Yryj0QFxevT5b22RDnm+0e/
+ap4KlRjiaOLWltYhrYj99Rf109pCpZDtKZWWdTrah6HU9dOH3gVipuNmdJLPpby7
+32j/cXVWQVk16zNaZlHy0qMKwYzOc1wRby2MlYyRsf3P5a1WlcyFkoOQVUHJwnft
++aN0QgpoCPPQ0WX9Zyw0/yR/53nIBzslV92kDJg9vuDMGWXb8lSir0LUneKuhCMl
+CTMStWoedsSL2UkAbF66H/Ib2mfKJ6qjRCMbg4LO8qsz7VSk3MmrWWXROA7BPhtn
+j9Z1AeBVIt12d+yO3fTPeSJtuVcD9ZkIpzw+NPvEF64jWM0k8yPKagIolAGBNLRs
+a66LGsOj0gk8FlT1Nl8k459KoeJkxhbDpoF6JDZHjsFeDvv5FXgE1g5Z2Z1YZmLS
+lCkyMsh4uWb2tVbhbMYUS5ZSWZECJGpVR9c/tiMaYHeXLuJAr54EV56tEcXJQ3Dv
+SLRerBxpLi6C1VuLvoK+GRRe5w0ix1Eb/x6b8TCPcTEGszQnj196ZoJPii0Tq0LP
+IVael45mNg+Wm+Ur9AKpKmqMLMTDuHAsLSkeP1B3Hm0qVORVCpE4ocW1ZqJ2Wu4P
+v7Rn4ShuD+E2oYLRv9R34cRnMpN4yOdUU/4jeeZozCaQ9hBjXSpvkS2kczJRIfK7
+Fd+qJAhIBt6hnia/uoO/fKTIoIy90v+8hGknEyQYxEUYIyZeGBTKLoiHYqNT5iG3
+uIV7moW7FSZy+Ln3anQPST+SvqkFt5knv78JF0uZTK0REHzfdDH2jyZfqoiuOFfI
+VS3T+9gbUZm+JRs6usB9G+3O0km5z/PFfYmQgdhpSCAQo/jvklEYMosRGMA/G4VW
+zlfJ8oJkxt8CCS5KES+xJ203UvDwFmHxZ43fh3Kvh9rP+1CUbtSUheuKLOoh9ZZK
+RNXgzmp0RE3QBdOHFe020KSLZlVwk+5HBsF+LqUYeWfzKIXxcPcOg6R+VJ5adjLL
+ZRu4zfvIKAPSVJHRp8WFQwgXdqXmL2cI2KGigi0M+MGvY9RQd21rRkpBhdWQX3kt
+xOzXEYdAiuFo4mT4VTL7b5Ms2nfZIcEX5TYsTn6Qf6yUKzJnvjhQdriuQbnXIcUJ
+TGDIo1HENJtXN9/LyTNXi+v7dp8ZTcVqHypFrivtL42npQDLBPolYi50SBvKKoy6
+27Z+9rsCfKnD21h4ob/w/hoQVRHO6GlOlmXGFwPWB2iMVIKuHCJVP/H0CZcowEb3
+TgslHfcH1wkdOhhXODvoMwbnj3hGHlv1BrbsuKYN8boTS9YYIN1pM0ozFa64yJiK
+JyyTvC377jO/ZuZNurabBlVgl0u8RM1+9KHYqi/AAighFmJ42whU8vz0NOPGjxxD
+V86QGkvcLjsokYk/eto1HY4s7kns9DOtyVOojJ8EUz4kHFLJEvliV6O87izrQHwg
+I3ArlflzF4rRwRxpprc4mmf3cB16WgxAz2IPhTzCAk5+tfbFKimEsx83KuGqckLE
+7Wsaj5IcXb7R8lvyq6qp0vW4pEErK5FuEkjKmNg3jcjtADC1tgROfpzahOzA+nvl
+HYikU0awlORcG6ElLA9IUneXCWzsWxgzgwLlgn7NhSEwEf0nT8/kHuw/pVds6Sow
+GSqI5cNpOKtvOXF/hOFBw+HMKokgUi6DD2w5P0stFqwt8CSsAHP0m7MGPwW4FIUf
+q55cPJ5inQ5tO4AJ/ALqopd0ysf541bhw8qlpprAkOAkElPSwovavu0CQ15n4YmY
+ee7LqsrDG9znpUalfGsWh7ZaKNfbJzxepb22Ud0fQ887Jsg6jSVhwUn0PBvJROqv
+HMIrlAEqDjDRW4srR+XD0QQDmw45LNYn1OZwWtl1zyrYyQAF5BOI7MM5+4dhMDZD
+A8ienKIGwi/F/PCAY7FUBKBMqS7G9XZ62NDk1JQR5RW1eAbcuICPmakgMz0QhUxl
+Cco+WF5gk5qqYl3AUQYcXWCgDZxLQ/anFiGkh6rywS7ukjC4nt/fEAGLhglw2Gyo
+t1AeFpa092f9NTohkCoyxwB7TQcQCbkvc9gYfmeZBE8G/FDHhZudQJ2zljf6pdyy
+ck7vTgks/ZH9Tfe7pqE+q3uiA0CmqVUn4vr5Gc6HdarxdTbz87iR+JHDi3UTjkxl
+mhY5auU06HqWWX81sAD9W2n8Qyb69Shu/ofZfiT7tKCCblSi/66/YrT0cgHCy5hH
+mOFMtReAgM6PpijuHkVq+9/xHfxaO9bq9GwdYklXO4qPhurwUwTOnBZo/7q5/IgP
+R/cCRHJAuMo7LVOd3DxWjFl7aBosjXG7bADHGs5vQJKxoy8P2UTyo3Aunu4OrjLQ
+Oz6LB+rmebNcKeJ9a6he+Vox6AiWoowDmEbxuH2QVCbtdmL+numabl7JScdcNFMp
+VNns5EbhgDt12d/7edWH8bqe6xnOTFJz5luHriVPOXnMxrj5EHvs8JtxpAWg0ynT
+Tn8f9C0oeMxVlXsekS/MVhhzi7LbvGkH5tDYT+2i/1iFo23gSlO3Z32NDFxbe3co
+AjVEegTTKEPIazAXXTK4KTW6dto7FEp2GFik+JI8nk0zb0ZrCNkxSGjd9PskVjSy
+z2lmvkjSimYizfJpzcJTE0UpQSLWXZgftqSyo8LuAi9RG9yDpOxwJajUCGEyb+Sh
+gS58Y3L6KWW8cETPXQIDAQABMA0GCSqGSIb3DQEBBQUAA4IIAQBVmjRqIgZpCUUz
+x66pXMcJTpuGvEGQ1JRS9s0jKZRLIs3ovf6dzVLyve2rh8mrq0YEtL2iPyIwR1DA
+S4x2DwP1ktKxLcR6NZzJc4frpp/eD3ON03+Z2LqPb8Tzvhqui6KUNpDi5euNBfT8
+Zd+V8cSUTRdW1588j1A853e/lYYmZPtq/8ba6YyuQrtp5TPG2OkNxlUhScEMtKP5
+m0tc3oNPQQPOKnloOH3wVEkg9bYQ/wjcM2aWm/8G3gCe185WQ5pR/HDN9vBRo7fN
+tFyFYs1xt8YrIyvdw25AQvo3/zcc9npXlIeFI9fUycdfwU0vyQ3XXOycJe6eMIKR
+lnK4dR34CWhXl7ItS+4l7HokKe5y1JwT26vcAwrYShTJCFdEXaG1U4A08hSXz1Le
+og6KEOkU79BgvmGh8SVd1RhzP5MQypbus0DS26NVz1dapQ5PdUff6veQmm31cC4d
+FBw3ZARZULDccoZvnDc9XSivc1Xv0u4kdHQT79zbMUn7P2P10wg+M6XnnQreUyxR
+jmfbm0FlQVC91KSWbIe8EuCUx9PA5MtzWACD4awnhdadU51cvQo+A0OcDJH1bXv4
+QHJ1qxF2kSvhxqofcGl2cBUJ/pPQ1i23FWqbZ1y0aZ8lpn2K+30iqXHyzk6MuCEt
+3v5BcQ3/nexzprsHT4gOWEcufqnCx3jdunqeTuAwTmNvhdQgQen6/kNF5/uverLO
+pAUdIppYht/kzkyp/tgWpW/72M5We/XWIO/kR81jJP+5vvFIo8EBcua9wK3tJg3K
+NJ/8Ai0gTwUgriE9DMIgPD/wBITcz4n9uSWRjtBD5rMgq1wt1UCeoEvY9LLMffFY
+Co6H7YisNpbkVqARivKa0LNXozS7Gas44XRrIsQxzgHVGzbjHjhMM5PfQONZV06s
+bnseWj3FHVusyBCCNQIisvx16BCRjcR9eJNHnhydrGtiAliM1hwj1q94woCcpKok
+VBS1FJjG+CsaJMtxMgrimw5pa91+jGTRLmPvDn+xPohMnVXlyW4XBLdB/72KQcsl
+MW9Edz9HsfyBiAeOBUkgtxHZaQMqA525M4Sa399640Zzo9iijFMZiFVMdLj2RIQr
+0RQtTjkukmj/afyFYhvrVU/vJYRiRZnW2E5vP1MIfR0GlYGAf09OdDaYteKHcJjc
+1/XcUhXmxtZ5ljl/j5XPq4BTrRsLRUAO1Bi9LN6Kd3b98kRHxiHQ5HTw2BgFyHww
+csff8bv8AjCp9EImWQ2TBYKhc+005ThdzVCQ/pT8E7y9/KiiiKdzxLKo0V2IxAKi
+evEEyf6MdMnvHWRBn6welmdkrKsoQced98CYG24HwmR9WoNmVig2nOf7HHcOKKDE
+92t5OQQghMdXk7wboOq860LlqBH+/KxlzP34KIj0pZrlc1HgqJsNA3dO5eCYs4ja
+febGnnwUZsEuU0qSBzegfuk9CeQVfM/9uEGl755mncReBx2H+EGt6ucv0kFjGDf5
+FONN0OX3Q/0V4/k2cwYm3wFPqcNO3iBGd5i0eiQrO3UrTliNm12kxxagvDKIP6GD
+8wDI+NhY6WNdTCu18HJB2Kt3N9ZydK62NpzIpoNJS+DJVgspvgAwy93WyEKKANns
+FdE0cfJbZIf2J9K364awkL8p2yGeNozjIC+VI1FsG8Kk1ebYAkNnoP6bUANEf7vk
+ctXR5NqPkhRk+10UEBJKlQbJZQgpyiGjJjgRySffcGcE/cpIMn9jskV0MVBPh9kg
+cNIhcLHWEJ0zXXiDkW1Vguza5GJjx4FG1xllcipDGZC41yNNTBzgRKlmZ6zucXkn
+Jnhtcg71XUsjtXx8ZekXxjoLDd1eHlHDhrjsf8cnSqVG6GotGcGHo8uZk4dkolUU
+TLdDpZPX59JOeUDKZZlGPT96gHqIaswe5WszRvRQwNUfCbjNii6hJ+tdc6foawrl
+V4IqsPziVFJW8KupEsYjlgcknOC8RqW0IATaCZNj5dQuwn7FMe21FXSGF7mz8yaK
+HQJq2ho/6LrxBG2UUVTiWrRZgx1g0C1zzAe1Joz518aIke+Az10PoWDLRdRCItGx
+cB390LcwkDrGSG1n5TLaj9vjqOMdICWiHOFMuaT2xj9cWA27xrJ3ARaRnxcGDbdA
+PsyPjpxL4J1+mx4Fq4gi+tMoG1cUZEo+JCw4TSFpAHMu0FUtdPIV6JRDPkAqxsa5
+alveoswYUFRdTiqFbPaSiykZfufqSuAiKyW892bPd5pBdPI8FA10afVQg83NLyHb
+IkaK0PdRGpVX8gWLGhntO0XoNsJufvtXIgAfBlOprpPGj3EqMUWS545t5pkiwIP8
+79xXZndPojYx+6ETjeXKo5V9AQxkcDtTQmiAx7udqAA1aZgMqGfYQ+Wqz5XgUZWk
+Fz9CnbgEztN5ecjTihYykuDXou7XN0wvrLh7vkX28RgznHs3piTZvECrAOnDN4ur
+2LbzXoFOsBRrBz4f7ML2RCKVu7Pmb9b5cGW6CoNlqg4TL4MTI1OLQBb6zi/8TQT4
+69isxTbCFVdIOOxVs7Qeuq3SQgYXDXPIV6a+lk2p8sD7eiEc9clwqYKQtfEM1HkQ
+voGm6VxhnHd5mqTDNyZXN8lSLPoI/9BfxmHA9Ha+/N5Oz6tRmXHH33701s8GVhkT
+UwttdFlIGZtTBS2dMlTT5SxTi2Q+1GR744AJFMz+FkZja3Fp+PnLJ/aIVLxFs84C
+yJTuQFv5QgLC/7DYLOsof17JJgGZpw==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 0 (0x0)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root
+        Validity
+            Not Before: Dec  5 13:56:05 1999 GMT
+            Not After : Apr  3 13:56:05 2037 GMT
+        Subject: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (16384 bit)
+                Modulus (16384 bit):
+                    00:e2:89:05:6d:c3:7f:ad:a6:89:3a:ff:bb:c7:cd:
+                    9d:37:b1:e1:d2:21:1e:9b:61:2a:15:e7:7b:57:4f:
+                    55:3c:d0:bb:f9:d9:3d:3e:a6:bc:ec:b4:ad:53:9a:
+                    16:02:eb:0b:72:fd:8a:f2:8f:44:05:c5:eb:d3:e5:
+                    bd:b6:44:39:e6:fb:47:bf:6a:9e:0a:95:18:e2:68:
+                    e2:d6:96:d6:21:ad:88:fd:f5:17:f5:d3:da:42:a5:
+                    90:ed:29:95:96:75:3a:da:87:a1:d4:f5:d3:87:de:
+                    05:62:a6:e3:66:74:92:cf:a5:bc:bb:df:68:ff:71:
+                    75:56:41:59:35:eb:33:5a:66:51:f2:d2:a3:0a:c1:
+                    8c:ce:73:5c:11:6f:2d:8c:95:8c:91:b1:fd:cf:e5:
+                    ad:56:95:cc:85:92:83:90:55:41:c9:c2:77:ed:f9:
+                    a3:74:42:0a:68:08:f3:d0:d1:65:fd:67:2c:34:ff:
+                    24:7f:e7:79:c8:07:3b:25:57:dd:a4:0c:98:3d:be:
+                    e0:cc:19:65:db:f2:54:a2:af:42:d4:9d:e2:ae:84:
+                    23:25:09:33:12:b5:6a:1e:76:c4:8b:d9:49:00:6c:
+                    5e:ba:1f:f2:1b:da:67:ca:27:aa:a3:44:23:1b:83:
+                    82:ce:f2:ab:33:ed:54:a4:dc:c9:ab:59:65:d1:38:
+                    0e:c1:3e:1b:67:8f:d6:75:01:e0:55:22:dd:76:77:
+                    ec:8e:dd:f4:cf:79:22:6d:b9:57:03:f5:99:08:a7:
+                    3c:3e:34:fb:c4:17:ae:23:58:cd:24:f3:23:ca:6a:
+                    02:28:94:01:81:34:b4:6c:6b:ae:8b:1a:c3:a3:d2:
+                    09:3c:16:54:f5:36:5f:24:e3:9f:4a:a1:e2:64:c6:
+                    16:c3:a6:81:7a:24:36:47:8e:c1:5e:0e:fb:f9:15:
+                    78:04:d6:0e:59:d9:9d:58:66:62:d2:94:29:32:32:
+                    c8:78:b9:66:f6:b5:56:e1:6c:c6:14:4b:96:52:59:
+                    91:02:24:6a:55:47:d7:3f:b6:23:1a:60:77:97:2e:
+                    e2:40:af:9e:04:57:9e:ad:11:c5:c9:43:70:ef:48:
+                    b4:5e:ac:1c:69:2e:2e:82:d5:5b:8b:be:82:be:19:
+                    14:5e:e7:0d:22:c7:51:1b:ff:1e:9b:f1:30:8f:71:
+                    31:06:b3:34:27:8f:5f:7a:66:82:4f:8a:2d:13:ab:
+                    42:cf:21:56:9e:97:8e:66:36:0f:96:9b:e5:2b:f4:
+                    02:a9:2a:6a:8c:2c:c4:c3:b8:70:2c:2d:29:1e:3f:
+                    50:77:1e:6d:2a:54:e4:55:0a:91:38:a1:c5:b5:66:
+                    a2:76:5a:ee:0f:bf:b4:67:e1:28:6e:0f:e1:36:a1:
+                    82:d1:bf:d4:77:e1:c4:67:32:93:78:c8:e7:54:53:
+                    fe:23:79:e6:68:cc:26:90:f6:10:63:5d:2a:6f:91:
+                    2d:a4:73:32:51:21:f2:bb:15:df:aa:24:08:48:06:
+                    de:a1:9e:26:bf:ba:83:bf:7c:a4:c8:a0:8c:bd:d2:
+                    ff:bc:84:69:27:13:24:18:c4:45:18:23:26:5e:18:
+                    14:ca:2e:88:87:62:a3:53:e6:21:b7:b8:85:7b:9a:
+                    85:bb:15:26:72:f8:b9:f7:6a:74:0f:49:3f:92:be:
+                    a9:05:b7:99:27:bf:bf:09:17:4b:99:4c:ad:11:10:
+                    7c:df:74:31:f6:8f:26:5f:aa:88:ae:38:57:c8:55:
+                    2d:d3:fb:d8:1b:51:99:be:25:1b:3a:ba:c0:7d:1b:
+                    ed:ce:d2:49:b9:cf:f3:c5:7d:89:90:81:d8:69:48:
+                    20:10:a3:f8:ef:92:51:18:32:8b:11:18:c0:3f:1b:
+                    85:56:ce:57:c9:f2:82:64:c6:df:02:09:2e:4a:11:
+                    2f:b1:27:6d:37:52:f0:f0:16:61:f1:67:8d:df:87:
+                    72:af:87:da:cf:fb:50:94:6e:d4:94:85:eb:8a:2c:
+                    ea:21:f5:96:4a:44:d5:e0:ce:6a:74:44:4d:d0:05:
+                    d3:87:15:ed:36:d0:a4:8b:66:55:70:93:ee:47:06:
+                    c1:7e:2e:a5:18:79:67:f3:28:85:f1:70:f7:0e:83:
+                    a4:7e:54:9e:5a:76:32:cb:65:1b:b8:cd:fb:c8:28:
+                    03:d2:54:91:d1:a7:c5:85:43:08:17:76:a5:e6:2f:
+                    67:08:d8:a1:a2:82:2d:0c:f8:c1:af:63:d4:50:77:
+                    6d:6b:46:4a:41:85:d5:90:5f:79:2d:c4:ec:d7:11:
+                    87:40:8a:e1:68:e2:64:f8:55:32:fb:6f:93:2c:da:
+                    77:d9:21:c1:17:e5:36:2c:4e:7e:90:7f:ac:94:2b:
+                    32:67:be:38:50:76:b8:ae:41:b9:d7:21:c5:09:4c:
+                    60:c8:a3:51:c4:34:9b:57:37:df:cb:c9:33:57:8b:
+                    eb:fb:76:9f:19:4d:c5:6a:1f:2a:45:ae:2b:ed:2f:
+                    8d:a7:a5:00:cb:04:fa:25:62:2e:74:48:1b:ca:2a:
+                    8c:ba:db:b6:7e:f6:bb:02:7c:a9:c3:db:58:78:a1:
+                    bf:f0:fe:1a:10:55:11:ce:e8:69:4e:96:65:c6:17:
+                    03:d6:07:68:8c:54:82:ae:1c:22:55:3f:f1:f4:09:
+                    97:28:c0:46:f7:4e:0b:25:1d:f7:07:d7:09:1d:3a:
+                    18:57:38:3b:e8:33:06:e7:8f:78:46:1e:5b:f5:06:
+                    b6:ec:b8:a6:0d:f1:ba:13:4b:d6:18:20:dd:69:33:
+                    4a:33:15:ae:b8:c8:98:8a:27:2c:93:bc:2d:fb:ee:
+                    33:bf:66:e6:4d:ba:b6:9b:06:55:60:97:4b:bc:44:
+                    cd:7e:f4:a1:d8:aa:2f:c0:02:28:21:16:62:78:db:
+                    08:54:f2:fc:f4:34:e3:c6:8f:1c:43:57:ce:90:1a:
+                    4b:dc:2e:3b:28:91:89:3f:7a:da:35:1d:8e:2c:ee:
+                    49:ec:f4:33:ad:c9:53:a8:8c:9f:04:53:3e:24:1c:
+                    52:c9:12:f9:62:57:a3:bc:ee:2c:eb:40:7c:20:23:
+                    70:2b:95:f9:73:17:8a:d1:c1:1c:69:a6:b7:38:9a:
+                    67:f7:70:1d:7a:5a:0c:40:cf:62:0f:85:3c:c2:02:
+                    4e:7e:b5:f6:c5:2a:29:84:b3:1f:37:2a:e1:aa:72:
+                    42:c4:ed:6b:1a:8f:92:1c:5d:be:d1:f2:5b:f2:ab:
+                    aa:a9:d2:f5:b8:a4:41:2b:2b:91:6e:12:48:ca:98:
+                    d8:37:8d:c8:ed:00:30:b5:b6:04:4e:7e:9c:da:84:
+                    ec:c0:fa:7b:e5:1d:88:a4:53:46:b0:94:e4:5c:1b:
+                    a1:25:2c:0f:48:52:77:97:09:6c:ec:5b:18:33:83:
+                    02:e5:82:7e:cd:85:21:30:11:fd:27:4f:cf:e4:1e:
+                    ec:3f:a5:57:6c:e9:2a:30:19:2a:88:e5:c3:69:38:
+                    ab:6f:39:71:7f:84:e1:41:c3:e1:cc:2a:89:20:52:
+                    2e:83:0f:6c:39:3f:4b:2d:16:ac:2d:f0:24:ac:00:
+                    73:f4:9b:b3:06:3f:05:b8:14:85:1f:ab:9e:5c:3c:
+                    9e:62:9d:0e:6d:3b:80:09:fc:02:ea:a2:97:74:ca:
+                    c7:f9:e3:56:e1:c3:ca:a5:a6:9a:c0:90:e0:24:12:
+                    53:d2:c2:8b:da:be:ed:02:43:5e:67:e1:89:98:79:
+                    ee:cb:aa:ca:c3:1b:dc:e7:a5:46:a5:7c:6b:16:87:
+                    b6:5a:28:d7:db:27:3c:5e:a5:bd:b6:51:dd:1f:43:
+                    cf:3b:26:c8:3a:8d:25:61:c1:49:f4:3c:1b:c9:44:
+                    ea:af:1c:c2:2b:94:01:2a:0e:30:d1:5b:8b:2b:47:
+                    e5:c3:d1:04:03:9b:0e:39:2c:d6:27:d4:e6:70:5a:
+                    d9:75:cf:2a:d8:c9:00:05:e4:13:88:ec:c3:39:fb:
+                    87:61:30:36:43:03:c8:9e:9c:a2:06:c2:2f:c5:fc:
+                    f0:80:63:b1:54:04:a0:4c:a9:2e:c6:f5:76:7a:d8:
+                    d0:e4:d4:94:11:e5:15:b5:78:06:dc:b8:80:8f:99:
+                    a9:20:33:3d:10:85:4c:65:09:ca:3e:58:5e:60:93:
+                    9a:aa:62:5d:c0:51:06:1c:5d:60:a0:0d:9c:4b:43:
+                    f6:a7:16:21:a4:87:aa:f2:c1:2e:ee:92:30:b8:9e:
+                    df:df:10:01:8b:86:09:70:d8:6c:a8:b7:50:1e:16:
+                    96:b4:f7:67:fd:35:3a:21:90:2a:32:c7:00:7b:4d:
+                    07:10:09:b9:2f:73:d8:18:7e:67:99:04:4f:06:fc:
+                    50:c7:85:9b:9d:40:9d:b3:96:37:fa:a5:dc:b2:72:
+                    4e:ef:4e:09:2c:fd:91:fd:4d:f7:bb:a6:a1:3e:ab:
+                    7b:a2:03:40:a6:a9:55:27:e2:fa:f9:19:ce:87:75:
+                    aa:f1:75:36:f3:f3:b8:91:f8:91:c3:8b:75:13:8e:
+                    4c:65:9a:16:39:6a:e5:34:e8:7a:96:59:7f:35:b0:
+                    00:fd:5b:69:fc:43:26:fa:f5:28:6e:fe:87:d9:7e:
+                    24:fb:b4:a0:82:6e:54:a2:ff:ae:bf:62:b4:f4:72:
+                    01:c2:cb:98:47:98:e1:4c:b5:17:80:80:ce:8f:a6:
+                    28:ee:1e:45:6a:fb:df:f1:1d:fc:5a:3b:d6:ea:f4:
+                    6c:1d:62:49:57:3b:8a:8f:86:ea:f0:53:04:ce:9c:
+                    16:68:ff:ba:b9:fc:88:0f:47:f7:02:44:72:40:b8:
+                    ca:3b:2d:53:9d:dc:3c:56:8c:59:7b:68:1a:2c:8d:
+                    71:bb:6c:00:c7:1a:ce:6f:40:92:b1:a3:2f:0f:d9:
+                    44:f2:a3:70:2e:9e:ee:0e:ae:32:d0:3b:3e:8b:07:
+                    ea:e6:79:b3:5c:29:e2:7d:6b:a8:5e:f9:5a:31:e8:
+                    08:96:a2:8c:03:98:46:f1:b8:7d:90:54:26:ed:76:
+                    62:fe:9e:e9:9a:6e:5e:c9:49:c7:5c:34:53:29:54:
+                    d9:ec:e4:46:e1:80:3b:75:d9:df:fb:79:d5:87:f1:
+                    ba:9e:eb:19:ce:4c:52:73:e6:5b:87:ae:25:4f:39:
+                    79:cc:c6:b8:f9:10:7b:ec:f0:9b:71:a4:05:a0:d3:
+                    29:d3:4e:7f:1f:f4:2d:28:78:cc:55:95:7b:1e:91:
+                    2f:cc:56:18:73:8b:b2:db:bc:69:07:e6:d0:d8:4f:
+                    ed:a2:ff:58:85:a3:6d:e0:4a:53:b7:67:7d:8d:0c:
+                    5c:5b:7b:77:28:02:35:44:7a:04:d3:28:43:c8:6b:
+                    30:17:5d:32:b8:29:35:ba:76:da:3b:14:4a:76:18:
+                    58:a4:f8:92:3c:9e:4d:33:6f:46:6b:08:d9:31:48:
+                    68:dd:f4:fb:24:56:34:b2:cf:69:66:be:48:d2:8a:
+                    66:22:cd:f2:69:cd:c2:53:13:45:29:41:22:d6:5d:
+                    98:1f:b6:a4:b2:a3:c2:ee:02:2f:51:1b:dc:83:a4:
+                    ec:70:25:a8:d4:08:61:32:6f:e4:a1:81:2e:7c:63:
+                    72:fa:29:65:bc:70:44:cf:5d
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        55:9a:34:6a:22:06:69:09:45:33:c7:ae:a9:5c:c7:09:4e:9b:
+        86:bc:41:90:d4:94:52:f6:cd:23:29:94:4b:22:cd:e8:bd:fe:
+        9d:cd:52:f2:bd:ed:ab:87:c9:ab:ab:46:04:b4:bd:a2:3f:22:
+        30:47:50:c0:4b:8c:76:0f:03:f5:92:d2:b1:2d:c4:7a:35:9c:
+        c9:73:87:eb:a6:9f:de:0f:73:8d:d3:7f:99:d8:ba:8f:6f:c4:
+        f3:be:1a:ae:8b:a2:94:36:90:e2:e5:eb:8d:05:f4:fc:65:df:
+        95:f1:c4:94:4d:17:56:d7:9f:3c:8f:50:3c:e7:77:bf:95:86:
+        26:64:fb:6a:ff:c6:da:e9:8c:ae:42:bb:69:e5:33:c6:d8:e9:
+        0d:c6:55:21:49:c1:0c:b4:a3:f9:9b:4b:5c:de:83:4f:41:03:
+        ce:2a:79:68:38:7d:f0:54:49:20:f5:b6:10:ff:08:dc:33:66:
+        96:9b:ff:06:de:00:9e:d7:ce:56:43:9a:51:fc:70:cd:f6:f0:
+        51:a3:b7:cd:b4:5c:85:62:cd:71:b7:c6:2b:23:2b:dd:c3:6e:
+        40:42:fa:37:ff:37:1c:f6:7a:57:94:87:85:23:d7:d4:c9:c7:
+        5f:c1:4d:2f:c9:0d:d7:5c:ec:9c:25:ee:9e:30:82:91:96:72:
+        b8:75:1d:f8:09:68:57:97:b2:2d:4b:ee:25:ec:7a:24:29:ee:
+        72:d4:9c:13:db:ab:dc:03:0a:d8:4a:14:c9:08:57:44:5d:a1:
+        b5:53:80:34:f2:14:97:cf:52:de:a2:0e:8a:10:e9:14:ef:d0:
+        60:be:61:a1:f1:25:5d:d5:18:73:3f:93:10:ca:96:ee:b3:40:
+        d2:db:a3:55:cf:57:5a:a5:0e:4f:75:47:df:ea:f7:90:9a:6d:
+        f5:70:2e:1d:14:1c:37:64:04:59:50:b0:dc:72:86:6f:9c:37:
+        3d:5d:28:af:73:55:ef:d2:ee:24:74:74:13:ef:dc:db:31:49:
+        fb:3f:63:f5:d3:08:3e:33:a5:e7:9d:0a:de:53:2c:51:8e:67:
+        db:9b:41:65:41:50:bd:d4:a4:96:6c:87:bc:12:e0:94:c7:d3:
+        c0:e4:cb:73:58:00:83:e1:ac:27:85:d6:9d:53:9d:5c:bd:0a:
+        3e:03:43:9c:0c:91:f5:6d:7b:f8:40:72:75:ab:11:76:91:2b:
+        e1:c6:aa:1f:70:69:76:70:15:09:fe:93:d0:d6:2d:b7:15:6a:
+        9b:67:5c:b4:69:9f:25:a6:7d:8a:fb:7d:22:a9:71:f2:ce:4e:
+        8c:b8:21:2d:de:fe:41:71:0d:ff:9d:ec:73:a6:bb:07:4f:88:
+        0e:58:47:2e:7e:a9:c2:c7:78:dd:ba:7a:9e:4e:e0:30:4e:63:
+        6f:85:d4:20:41:e9:fa:fe:43:45:e7:fb:af:7a:b2:ce:a4:05:
+        1d:22:9a:58:86:df:e4:ce:4c:a9:fe:d8:16:a5:6f:fb:d8:ce:
+        56:7b:f5:d6:20:ef:e4:47:cd:63:24:ff:b9:be:f1:48:a3:c1:
+        01:72:e6:bd:c0:ad:ed:26:0d:ca:34:9f:fc:02:2d:20:4f:05:
+        20:ae:21:3d:0c:c2:20:3c:3f:f0:04:84:dc:cf:89:fd:b9:25:
+        91:8e:d0:43:e6:b3:20:ab:5c:2d:d5:40:9e:a0:4b:d8:f4:b2:
+        cc:7d:f1:58:0a:8e:87:ed:88:ac:36:96:e4:56:a0:11:8a:f2:
+        9a:d0:b3:57:a3:34:bb:19:ab:38:e1:74:6b:22:c4:31:ce:01:
+        d5:1b:36:e3:1e:38:4c:33:93:df:40:e3:59:57:4e:ac:6e:7b:
+        1e:5a:3d:c5:1d:5b:ac:c8:10:82:35:02:22:b2:fc:75:e8:10:
+        91:8d:c4:7d:78:93:47:9e:1c:9d:ac:6b:62:02:58:8c:d6:1c:
+        23:d6:af:78:c2:80:9c:a4:aa:24:54:14:b5:14:98:c6:f8:2b:
+        1a:24:cb:71:32:0a:e2:9b:0e:69:6b:dd:7e:8c:64:d1:2e:63:
+        ef:0e:7f:b1:3e:88:4c:9d:55:e5:c9:6e:17:04:b7:41:ff:bd:
+        8a:41:cb:25:31:6f:44:77:3f:47:b1:fc:81:88:07:8e:05:49:
+        20:b7:11:d9:69:03:2a:03:9d:b9:33:84:9a:df:df:7a:e3:46:
+        73:a3:d8:a2:8c:53:19:88:55:4c:74:b8:f6:44:84:2b:d1:14:
+        2d:4e:39:2e:92:68:ff:69:fc:85:62:1b:eb:55:4f:ef:25:84:
+        62:45:99:d6:d8:4e:6f:3f:53:08:7d:1d:06:95:81:80:7f:4f:
+        4e:74:36:98:b5:e2:87:70:98:dc:d7:f5:dc:52:15:e6:c6:d6:
+        79:96:39:7f:8f:95:cf:ab:80:53:ad:1b:0b:45:40:0e:d4:18:
+        bd:2c:de:8a:77:76:fd:f2:44:47:c6:21:d0:e4:74:f0:d8:18:
+        05:c8:7c:30:72:c7:df:f1:bb:fc:02:30:a9:f4:42:26:59:0d:
+        93:05:82:a1:73:ed:34:e5:38:5d:cd:50:90:fe:94:fc:13:bc:
+        bd:fc:a8:a2:88:a7:73:c4:b2:a8:d1:5d:88:c4:02:a2:7a:f1:
+        04:c9:fe:8c:74:c9:ef:1d:64:41:9f:ac:1e:96:67:64:ac:ab:
+        28:41:c7:9d:f7:c0:98:1b:6e:07:c2:64:7d:5a:83:66:56:28:
+        36:9c:e7:fb:1c:77:0e:28:a0:c4:f7:6b:79:39:04:20:84:c7:
+        57:93:bc:1b:a0:ea:bc:eb:42:e5:a8:11:fe:fc:ac:65:cc:fd:
+        f8:28:88:f4:a5:9a:e5:73:51:e0:a8:9b:0d:03:77:4e:e5:e0:
+        98:b3:88:da:7d:e6:c6:9e:7c:14:66:c1:2e:53:4a:92:07:37:
+        a0:7e:e9:3d:09:e4:15:7c:cf:fd:b8:41:a5:ef:9e:66:9d:c4:
+        5e:07:1d:87:f8:41:ad:ea:e7:2f:d2:41:63:18:37:f9:14:e3:
+        4d:d0:e5:f7:43:fd:15:e3:f9:36:73:06:26:df:01:4f:a9:c3:
+        4e:de:20:46:77:98:b4:7a:24:2b:3b:75:2b:4e:58:8d:9b:5d:
+        a4:c7:16:a0:bc:32:88:3f:a1:83:f3:00:c8:f8:d8:58:e9:63:
+        5d:4c:2b:b5:f0:72:41:d8:ab:77:37:d6:72:74:ae:b6:36:9c:
+        c8:a6:83:49:4b:e0:c9:56:0b:29:be:00:30:cb:dd:d6:c8:42:
+        8a:00:d9:ec:15:d1:34:71:f2:5b:64:87:f6:27:d2:b7:eb:86:
+        b0:90:bf:29:db:21:9e:36:8c:e3:20:2f:95:23:51:6c:1b:c2:
+        a4:d5:e6:d8:02:43:67:a0:fe:9b:50:03:44:7f:bb:e4:72:d5:
+        d1:e4:da:8f:92:14:64:fb:5d:14:10:12:4a:95:06:c9:65:08:
+        29:ca:21:a3:26:38:11:c9:27:df:70:67:04:fd:ca:48:32:7f:
+        63:b2:45:74:31:50:4f:87:d9:20:70:d2:21:70:b1:d6:10:9d:
+        33:5d:78:83:91:6d:55:82:ec:da:e4:62:63:c7:81:46:d7:19:
+        65:72:2a:43:19:90:b8:d7:23:4d:4c:1c:e0:44:a9:66:67:ac:
+        ee:71:79:27:26:78:6d:72:0e:f5:5d:4b:23:b5:7c:7c:65:e9:
+        17:c6:3a:0b:0d:dd:5e:1e:51:c3:86:b8:ec:7f:c7:27:4a:a5:
+        46:e8:6a:2d:19:c1:87:a3:cb:99:93:87:64:a2:55:14:4c:b7:
+        43:a5:93:d7:e7:d2:4e:79:40:ca:65:99:46:3d:3f:7a:80:7a:
+        88:6a:cc:1e:e5:6b:33:46:f4:50:c0:d5:1f:09:b8:cd:8a:2e:
+        a1:27:eb:5d:73:a7:e8:6b:0a:e5:57:82:2a:b0:fc:e2:54:52:
+        56:f0:ab:a9:12:c6:23:96:07:24:9c:e0:bc:46:a5:b4:20:04:
+        da:09:93:63:e5:d4:2e:c2:7e:c5:31:ed:b5:15:74:86:17:b9:
+        b3:f3:26:8a:1d:02:6a:da:1a:3f:e8:ba:f1:04:6d:94:51:54:
+        e2:5a:b4:59:83:1d:60:d0:2d:73:cc:07:b5:26:8c:f9:d7:c6:
+        88:91:ef:80:cf:5d:0f:a1:60:cb:45:d4:42:22:d1:b1:70:1d:
+        fd:d0:b7:30:90:3a:c6:48:6d:67:e5:32:da:8f:db:e3:a8:e3:
+        1d:20:25:a2:1c:e1:4c:b9:a4:f6:c6:3f:5c:58:0d:bb:c6:b2:
+        77:01:16:91:9f:17:06:0d:b7:40:3e:cc:8f:8e:9c:4b:e0:9d:
+        7e:9b:1e:05:ab:88:22:fa:d3:28:1b:57:14:64:4a:3e:24:2c:
+        38:4d:21:69:00:73:2e:d0:55:2d:74:f2:15:e8:94:43:3e:40:
+        2a:c6:c6:b9:6a:5b:de:a2:cc:18:50:54:5d:4e:2a:85:6c:f6:
+        92:8b:29:19:7e:e7:ea:4a:e0:22:2b:25:bc:f7:66:cf:77:9a:
+        41:74:f2:3c:14:0d:74:69:f5:50:83:cd:cd:2f:21:db:22:46:
+        8a:d0:f7:51:1a:95:57:f2:05:8b:1a:19:ed:3b:45:e8:36:c2:
+        6e:7e:fb:57:22:00:1f:06:53:a9:ae:93:c6:8f:71:2a:31:45:
+        92:e7:8e:6d:e6:99:22:c0:83:fc:ef:dc:57:66:77:4f:a2:36:
+        31:fb:a1:13:8d:e5:ca:a3:95:7d:01:0c:64:70:3b:53:42:68:
+        80:c7:bb:9d:a8:00:35:69:98:0c:a8:67:d8:43:e5:aa:cf:95:
+        e0:51:95:a4:17:3f:42:9d:b8:04:ce:d3:79:79:c8:d3:8a:16:
+        32:92:e0:d7:a2:ee:d7:37:4c:2f:ac:b8:7b:be:45:f6:f1:18:
+        33:9c:7b:37:a6:24:d9:bc:40:ab:00:e9:c3:37:8b:ab:d8:b6:
+        f3:5e:81:4e:b0:14:6b:07:3e:1f:ec:c2:f6:44:22:95:bb:b3:
+        e6:6f:d6:f9:70:65:ba:0a:83:65:aa:0e:13:2f:83:13:23:53:
+        8b:40:16:fa:ce:2f:fc:4d:04:f8:eb:d8:ac:c5:36:c2:15:57:
+        48:38:ec:55:b3:b4:1e:ba:ad:d2:42:06:17:0d:73:c8:57:a6:
+        be:96:4d:a9:f2:c0:fb:7a:21:1c:f5:c9:70:a9:82:90:b5:f1:
+        0c:d4:79:10:be:81:a6:e9:5c:61:9c:77:79:9a:a4:c3:37:26:
+        57:37:c9:52:2c:fa:08:ff:d0:5f:c6:61:c0:f4:76:be:fc:de:
+        4e:cf:ab:51:99:71:c7:df:7e:f4:d6:cf:06:56:19:13:53:0b:
+        6d:74:59:48:19:9b:53:05:2d:9d:32:54:d3:e5:2c:53:8b:64:
+        3e:d4:64:7b:e3:80:09:14:cc:fe:16:46:63:6b:71:69:f8:f9:
+        cb:27:f6:88:54:bc:45:b3:ce:02:c8:94:ee:40:5b:f9:42:02:
+        c2:ff:b0:d8:2c:eb:28:7f:5e:c9:26:01:99:a7
+
 UPS Document Exchange by DST
 ============================
 MD5 Fingerprint: 78:A5:FB:10:4B:E4:63:2E:D2:6B:FB:F2:B6:C2:4B:8E
@@ -2768,6 +3411,174 @@ Certificate Ingredients:
         1b:38:71:9f:2c:07:90:ea:1d:e0:d3:89:5f:cb:ef:14:8d:27:
         54:a5:bd:46
 
+ValiCert Class 1 VA
+===================
+MD5 Fingerprint: 65:58:AB:15:AD:57:6C:1E:A8:A7:B5:69:AC:BF:FF:EB
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
+NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
+LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
+TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
+LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
+I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
+nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Validity
+            Not Before: Jun 25 22:23:48 1999 GMT
+            Not After : Jun 25 22:23:48 2019 GMT
+        Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:d8:59:82:7a:89:b8:96:ba:a6:2f:68:6f:58:2e:
+                    a7:54:1c:06:6e:f4:ea:8d:48:bc:31:94:17:f0:f3:
+                    4e:bc:b2:b8:35:92:76:b0:d0:a5:a5:01:d7:00:03:
+                    12:22:19:08:f8:ff:11:23:9b:ce:07:f5:bf:69:1a:
+                    26:fe:4e:e9:d1:7f:9d:2c:40:1d:59:68:6e:a6:f8:
+                    58:b0:9d:1a:8f:d3:3f:f1:dc:19:06:81:a8:0e:e0:
+                    3a:dd:c8:53:45:09:06:e6:0f:70:c3:fa:40:a6:0e:
+                    e2:56:05:0f:18:4d:fc:20:82:d1:73:55:74:8d:76:
+                    72:a0:1d:9d:1d:c0:dd:3f:71
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        50:68:3d:49:f4:2c:1c:06:94:df:95:60:7f:96:7b:17:fe:4f:
+        71:ad:64:c8:dd:77:d2:ef:59:55:e8:3f:e8:8e:05:2a:21:f2:
+        07:d2:b5:a7:52:fe:9c:b1:b6:e2:5b:77:17:40:ea:72:d6:23:
+        cb:28:81:32:c3:00:79:18:ec:59:17:89:c9:c6:6a:1e:71:c9:
+        fd:b7:74:a5:25:45:69:c5:48:ab:19:e1:45:8a:25:6b:19:ee:
+        e5:bb:12:f5:7f:f7:a6:8d:51:c3:f0:9d:74:b7:a9:3e:a0:a5:
+        ff:b6:49:03:13:da:22:cc:ed:71:82:2b:99:cf:3a:b7:f5:2d:
+        72:c8
+
+ValiCert Class 2 VA
+===================
+MD5 Fingerprint: A9:23:75:9B:BA:49:36:6E:31:C2:DB:F2:E7:66:BA:87
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
+NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
+dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
+WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
+v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
+UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
+IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
+W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Validity
+            Not Before: Jun 26 00:19:54 1999 GMT
+            Not After : Jun 26 00:19:54 2019 GMT
+        Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:ce:3a:71:ca:e5:ab:c8:59:92:55:d7:ab:d8:74:
+                    0e:f9:ee:d9:f6:55:47:59:65:47:0e:05:55:dc:eb:
+                    98:36:3c:5c:53:5d:d3:30:cf:38:ec:bd:41:89:ed:
+                    25:42:09:24:6b:0a:5e:b3:7c:dd:52:2d:4c:e6:d4:
+                    d6:7d:5a:59:a9:65:d4:49:13:2d:24:4d:1c:50:6f:
+                    b5:c1:85:54:3b:fe:71:e4:d3:5c:42:f9:80:e0:91:
+                    1a:0a:5b:39:36:67:f3:3f:55:7c:1b:3f:b4:5f:64:
+                    73:34:e3:b4:12:bf:87:64:f8:da:12:ff:37:27:c1:
+                    b3:43:bb:ef:7b:6e:2e:69:f7
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        3b:7f:50:6f:6f:50:94:99:49:62:38:38:1f:4b:f8:a5:c8:3e:
+        a7:82:81:f6:2b:c7:e8:c5:ce:e8:3a:10:82:cb:18:00:8e:4d:
+        bd:a8:58:7f:a1:79:00:b5:bb:e9:8d:af:41:d9:0f:34:ee:21:
+        81:19:a0:32:49:28:f4:c4:8e:56:d5:52:33:fd:50:d5:7e:99:
+        6c:03:e4:c9:4c:fc:cb:6c:ab:66:b3:4a:21:8c:e5:b5:0c:32:
+        3e:10:b2:cc:6c:a1:dc:9a:98:4c:02:5b:f3:ce:b9:9e:a5:72:
+        0e:4a:b7:3f:3c:e6:16:68:f8:be:ed:74:4c:bc:5b:d5:62:1f:
+        43:dd
+
+ValiCert Class 3 VA
+===================
+MD5 Fingerprint: A2:6F:53:B7:EE:40:DB:4A:68:E7:FA:18:D9:10:4B:72
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
+NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
+cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
+2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
+JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
+Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
+n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
+PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 1 (0x1)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Validity
+            Not Before: Jun 26 00:22:33 1999 GMT
+            Not After : Jun 26 00:22:33 2019 GMT
+        Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:e3:98:51:96:1c:e8:d5:b1:06:81:6a:57:c3:72:
+                    75:93:ab:cf:9e:a6:fc:f3:16:52:d6:2d:4d:9f:35:
+                    44:a8:2e:04:4d:07:49:8a:38:29:f5:77:37:e7:b7:
+                    ab:5d:df:36:71:14:99:8f:dc:c2:92:f1:e7:60:92:
+                    97:ec:d8:48:dc:bf:c1:02:20:c6:24:a4:28:4c:30:
+                    5a:76:6d:b1:5c:f3:dd:de:9e:10:71:a1:88:c7:5b:
+                    9b:41:6d:ca:b0:b8:8e:15:ee:ad:33:2b:cf:47:04:
+                    5c:75:71:0a:98:24:98:29:a7:49:59:a5:dd:f8:b7:
+                    43:62:61:f3:d3:e2:d0:55:3f
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        56:bb:02:58:84:67:08:2c:df:1f:db:7b:49:33:f5:d3:67:9d:
+        f4:b4:0a:10:b3:c9:c5:2c:e2:92:6a:71:78:27:f2:70:83:42:
+        d3:3e:cf:a9:54:f4:f1:d8:92:16:8c:d1:04:cb:4b:ab:c9:9f:
+        45:ae:3c:8a:a9:b0:71:33:5d:c8:c5:57:df:af:a8:35:b3:7f:
+        89:87:e9:e8:25:92:b8:7f:85:7a:ae:d6:bc:1e:37:58:2a:67:
+        c9:91:cf:2a:81:3e:ed:c6:39:df:c0:3e:19:9c:19:cc:13:4d:
+        82:41:b5:8c:de:e0:3d:60:08:20:0f:45:7e:6b:a2:7f:a3:8c:
+        15:ee
+
 VeriSign Class 4 Primary CA
 ===========================
 MD5 Fingerprint: 1B:D1:AD:17:8B:7F:22:13:24:F5:26:E2:5D:4E:B9:10
@@ -2933,6 +3744,85 @@ Certificate Ingredients:
         57:08:6a:d0:a0:42:42:42:1e:f4:20:cc:a5:78:82:95:26:38:
         8a:47
 
+Verisign Class 1 Public Primary Certification Authority - G3
+============================================================
+MD5 Fingerprint: B1:47:BC:18:57:D1:18:A0:78:2D:EC:71:E8:2A:95:73
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
+nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
+8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
+ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
+PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
+6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
+n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
+qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
+wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
+ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
+pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
+E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            8b:5b:75:56:84:54:85:0b:00:cf:af:38:48:ce:b1:a4
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3
+        Validity
+            Not Before: Oct  1 00:00:00 1999 GMT
+            Not After : Jul 16 23:59:59 2036 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:dd:84:d4:b9:b4:f9:a7:d8:f3:04:78:9c:de:3d:
+                    dc:6c:13:16:d9:7a:dd:24:51:66:c0:c7:26:59:0d:
+                    ac:06:08:c2:94:d1:33:1f:f0:83:35:1f:6e:1b:c8:
+                    de:aa:6e:15:4e:54:27:ef:c4:6d:1a:ec:0b:e3:0e:
+                    f0:44:a5:57:c7:40:58:1e:a3:47:1f:71:ec:60:f6:
+                    6d:94:c8:18:39:ed:fe:42:18:56:df:e4:4c:49:10:
+                    78:4e:01:76:35:63:12:36:dd:66:bc:01:04:36:a3:
+                    55:68:d5:a2:36:09:ac:ab:21:26:54:06:ad:3f:ca:
+                    14:e0:ac:ca:ad:06:1d:95:e2:f8:9d:f1:e0:60:ff:
+                    c2:7f:75:2b:4c:cc:da:fe:87:99:21:ea:ba:fe:3e:
+                    54:d7:d2:59:78:db:3c:6e:cf:a0:13:00:1a:b8:27:
+                    a1:e4:be:67:96:ca:a0:c5:b3:9c:dd:c9:75:9e:eb:
+                    30:9a:5f:a3:cd:d9:ae:78:19:3f:23:e9:5c:db:29:
+                    bd:ad:55:c8:1b:54:8c:63:f6:e8:a6:ea:c7:37:12:
+                    5c:a3:29:1e:02:d9:db:1f:3b:b4:d7:0f:56:47:81:
+                    15:04:4a:af:83:27:d1:c5:58:88:c1:dd:f6:aa:a7:
+                    a3:18:da:68:aa:6d:11:51:e1:bf:65:6b:9f:96:76:
+                    d1:3d
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        ab:66:8d:d7:b3:ba:c7:9a:b6:e6:55:d0:05:f1:9f:31:8d:5a:
+        aa:d9:aa:46:26:0f:71:ed:a5:ad:53:56:62:01:47:2a:44:e9:
+        fe:3f:74:0b:13:9b:b9:f4:4d:1b:b2:d1:5f:b2:b6:d2:88:5c:
+        b3:9f:cd:cb:d4:a7:d9:60:95:84:3a:f8:c1:37:1d:61:ca:e7:
+        b0:c5:e5:91:da:54:a6:ac:31:81:ae:97:de:cd:08:ac:b8:c0:
+        97:80:7f:6e:72:a4:e7:69:13:95:65:1f:c4:93:3c:fd:79:8f:
+        04:d4:3e:4f:ea:f7:9e:ce:cd:67:7c:4f:65:02:ff:91:85:54:
+        73:c7:ff:36:f7:86:2d:ec:d0:5e:4f:ff:11:9f:72:06:d6:b8:
+        1a:f1:4c:0d:26:65:e2:44:80:1e:c7:9f:e3:dd:e8:0a:da:ec:
+        a5:20:80:69:68:a1:4f:7e:e1:6b:cf:07:41:fa:83:8e:bc:38:
+        dd:b0:2e:11:b1:6b:b2:42:cc:9a:bc:f9:48:22:79:4a:19:0f:
+        b2:1c:3e:20:74:d9:6a:c3:be:f2:28:78:13:56:79:4f:6d:50:
+        ea:1b:b0:b5:57:b1:37:66:58:23:f3:dc:0f:df:0a:87:c4:ef:
+        86:05:d5:38:14:60:99:a3:4b:de:06:96:71:2c:f2:db:b6:1f:
+        a4:ef:3f:ee
+
 Verisign Class 2 Public Primary Certification Authority
 =======================================================
 MD5 Fingerprint: B3:9C:25:B1:C3:2E:32:53:80:15:30:9D:4D:02:77:3E
@@ -3044,6 +3934,85 @@ Certificate Ingredients:
         12:df:67:a0:f4:ad:32:64:5e:b1:46:72:27:8c:12:7b:c5:44:
         b4:ae
 
+Verisign Class 2 Public Primary Certification Authority - G3
+============================================================
+MD5 Fingerprint: F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
+aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
+Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
+BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
+Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
+Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
+IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
+J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
+JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
+wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
+koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
+qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
+Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
+xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
+7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
+sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
+sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
+cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            61:70:cb:49:8c:5f:98:45:29:e7:b0:a6:d9:50:5b:7a
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3
+        Validity
+            Not Before: Oct  1 00:00:00 1999 GMT
+            Not After : Jul 16 23:59:59 2036 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:af:0a:0d:c2:d5:2c:db:67:b9:2d:e5:94:27:dd:
+                    a5:be:e0:b0:4d:8f:b3:61:56:3c:d6:7c:c3:f4:cd:
+                    3e:86:cb:a2:88:e2:e1:d8:a4:69:c5:b5:e2:bf:c1:
+                    a6:47:50:5e:46:39:8b:d5:96:ba:b5:6f:14:bf:10:
+                    ce:27:13:9e:05:47:9b:31:7a:13:d8:1f:d9:d3:02:
+                    37:8b:ad:2c:47:f0:8e:81:06:a7:0d:30:0c:eb:f7:
+                    3c:0f:20:1d:dc:72:46:ee:a5:02:c8:5b:c3:c9:56:
+                    69:4c:c5:18:c1:91:7b:0b:d5:13:00:9b:bc:ef:c3:
+                    48:3e:46:60:20:85:2a:d5:90:b6:cd:8b:a0:cc:32:
+                    dd:b7:fd:40:55:b2:50:1c:56:ae:cc:8d:77:4d:c7:
+                    20:4d:a7:31:76:ef:68:92:8a:90:1e:08:81:56:b2:
+                    ad:69:a3:52:d0:cb:1c:c4:23:3d:1f:99:fe:4c:e8:
+                    16:63:8e:c6:08:8e:f6:31:f6:d2:fa:e5:76:dd:b5:
+                    1c:92:a3:49:cd:cd:01:cd:68:cd:a9:69:ba:a3:eb:
+                    1d:0d:9c:a4:20:a6:c1:a0:c5:d1:46:4c:17:6d:d2:
+                    ac:66:3f:96:8c:e0:84:d4:36:ff:22:59:c5:f9:11:
+                    60:a8:5f:04:7d:f2:1a:f6:25:42:61:0f:c4:4a:b8:
+                    3e:89
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        34:26:15:3c:c0:8d:4d:43:49:1d:bd:e9:21:92:d7:66:9c:b7:
+        de:c5:b8:d0:e4:5d:5f:76:22:c0:26:f9:84:3a:3a:f9:8c:b5:
+        fb:ec:60:f1:e8:ce:04:b0:c8:dd:a7:03:8f:30:f3:98:df:a4:
+        e6:a4:31:df:d3:1c:0b:46:dc:72:20:3f:ae:ee:05:3c:a4:33:
+        3f:0b:39:ac:70:78:73:4b:99:2b:df:30:c2:54:b0:a8:3b:55:
+        a1:fe:16:28:cd:42:bd:74:6e:80:db:27:44:a7:ce:44:5d:d4:
+        1b:90:98:0d:1e:42:94:b1:00:2c:04:d0:74:a3:02:05:22:63:
+        63:cd:83:b5:fb:c1:6d:62:6b:69:75:fd:5d:70:41:b9:f5:bf:
+        7c:df:be:c1:32:73:22:21:8b:58:81:7b:15:91:7a:ba:e3:64:
+        48:b0:7f:fb:36:25:da:95:d0:f1:24:14:17:dd:18:80:6b:46:
+        23:39:54:f5:8e:62:09:04:1d:94:90:a6:9b:e6:25:e2:42:45:
+        aa:b8:90:ad:be:08:8f:a9:0b:42:18:94:cf:72:39:e1:b1:43:
+        e0:28:cf:b7:e7:5a:6c:13:6b:49:b3:ff:e3:18:7c:89:8b:33:
+        5d:ac:33:d7:a7:f9:da:3a:55:c9:58:10:f9:aa:ef:5a:b6:cf:
+        4b:4b:df:2a
+
 Verisign Class 3 Public Primary Certification Authority
 =======================================================
 MD5 Fingerprint: 10:FC:63:5D:F6:26:3E:0D:F3:25:BE:5F:79:CD:67:67
@@ -3155,6 +4124,85 @@ Certificate Ingredients:
         57:26:79:00:f6:f8:0d:a2:33:30:28:d4:aa:58:a0:9d:9d:69:
         91:fd
 
+Verisign Class 3 Public Primary Certification Authority - G3
+============================================================
+MD5 Fingerprint: CD:68:B6:A7:C7:C4:CE:75:E0:1D:4F:57:44:61:92:09
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
+N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
+KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
+kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
+CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
+Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
+imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
+2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
+DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
+F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
+TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            9b:7e:06:49:a3:3e:62:b9:d5:ee:90:48:71:29:ef:57
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3
+        Validity
+            Not Before: Oct  1 00:00:00 1999 GMT
+            Not After : Jul 16 23:59:59 2036 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:cb:ba:9c:52:fc:78:1f:1a:1e:6f:1b:37:73:bd:
+                    f8:c9:6b:94:12:30:4f:f0:36:47:f5:d0:91:0a:f5:
+                    17:c8:a5:61:c1:16:40:4d:fb:8a:61:90:e5:76:20:
+                    c1:11:06:7d:ab:2c:6e:a6:f5:11:41:8e:fa:2d:ad:
+                    2a:61:59:a4:67:26:4c:d0:e8:bc:52:5b:70:20:04:
+                    58:d1:7a:c9:a4:69:bc:83:17:64:ad:05:8b:bc:d0:
+                    58:ce:8d:8c:f5:eb:f0:42:49:0b:9d:97:27:67:32:
+                    6e:e1:ae:93:15:1c:70:bc:20:4d:2f:18:de:92:88:
+                    e8:6c:85:57:11:1a:e9:7e:e3:26:11:54:a2:45:96:
+                    55:83:ca:30:89:e8:dc:d8:a3:ed:2a:80:3f:7f:79:
+                    65:57:3e:15:20:66:08:2f:95:93:bf:aa:47:2f:a8:
+                    46:97:f0:12:e2:fe:c2:0a:2b:51:e6:76:e6:b7:46:
+                    b7:e2:0d:a6:cc:a8:c3:4c:59:55:89:e6:e8:53:5c:
+                    1c:ea:9d:f0:62:16:0b:a7:c9:5f:0c:f0:de:c2:76:
+                    ce:af:f7:6a:f2:fa:41:a6:a2:33:14:c9:e5:7a:63:
+                    d3:9e:62:37:d5:85:65:9e:0e:e6:53:24:74:1b:5e:
+                    1d:12:53:5b:c7:2c:e7:83:49:3b:15:ae:8a:68:b9:
+                    57:97
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        11:14:96:c1:ab:92:08:f7:3f:2f:c9:b2:fe:e4:5a:9f:64:de:
+        db:21:4f:86:99:34:76:36:57:dd:d0:15:2f:c5:ad:7f:15:1f:
+        37:62:73:3e:d4:e7:5f:ce:17:03:db:35:fa:2b:db:ae:60:09:
+        5f:1e:5f:8f:6e:bb:0b:3d:ea:5a:13:1e:0c:60:6f:b5:c0:b5:
+        23:22:2e:07:0b:cb:a9:74:cb:47:bb:1d:c1:d7:a5:6b:cc:2f:
+        d2:42:fd:49:dd:a7:89:cf:53:ba:da:00:5a:28:bf:82:df:f8:
+        ba:13:1d:50:86:82:fd:8e:30:8f:29:46:b0:1e:3d:35:da:38:
+        62:16:18:4a:ad:e6:b6:51:6c:de:af:62:eb:01:d0:1e:24:fe:
+        7a:8f:12:1a:12:68:b8:fb:66:99:14:14:45:5c:ae:e7:ae:69:
+        17:81:2b:5a:37:c9:5e:2a:f4:c6:e2:a1:5c:54:9b:a6:54:00:
+        cf:f0:f1:c1:c7:98:30:1a:3b:36:16:db:a3:6e:ea:fd:ad:b2:
+        c2:da:ef:02:47:13:8a:c0:f1:b3:31:ad:4f:1c:e1:4f:9c:af:
+        0f:0c:9d:f7:78:0d:d8:f4:35:56:80:da:b7:6d:17:8f:9d:1e:
+        81:64:e1:fe:c5:45:ba:ad:6b:b9:0a:7a:4e:4f:4b:84:ee:4b:
+        f1:7d:dd:11
+
 Verisign Class 4 Public Primary Certification Authority - G2
 ============================================================
 MD5 Fingerprint: 26:6D:2C:19:98:B6:70:68:38:50:54:19:EC:90:34:60
@@ -3213,6 +4261,85 @@ Certificate Ingredients:
         3f:22:8d:a1:c1:66:50:81:72:4c:ed:22:64:4f:4f:ca:80:91:
         b6:29
 
+Verisign Class 4 Public Primary Certification Authority - G3
+============================================================
+MD5 Fingerprint: DB:C8:F2:27:2E:B1:EA:6A:29:23:5D:FE:56:3E:33:DF
+PEM Data:
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
+GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
+U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
+NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
+ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
+ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
+CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
+g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
+2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
+bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+Certificate Ingredients:
+    Data:
+        Version: 1 (0x0)
+        Serial Number:
+            ec:a0:a7:8b:6e:75:6a:01:cf:c4:7c:cc:2f:94:5e:d7
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3
+        Validity
+            Not Before: Oct  1 00:00:00 1999 GMT
+            Not After : Jul 16 23:59:59 2036 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (2048 bit)
+                Modulus (2048 bit):
+                    00:ad:cb:a5:11:69:c6:59:ab:f1:8f:b5:19:0f:56:
+                    ce:cc:b5:1f:20:e4:9e:26:25:4b:e0:73:65:89:59:
+                    de:d0:83:e4:f5:0f:b5:bb:ad:f1:7c:e8:21:fc:e4:
+                    e8:0c:ee:7c:45:22:19:76:92:b4:13:b7:20:5b:09:
+                    fa:61:ae:a8:f2:a5:8d:85:c2:2a:d6:de:66:36:d2:
+                    9b:02:f4:a8:92:60:7c:9c:69:b4:8f:24:1e:d0:86:
+                    52:f6:32:9c:41:58:1e:22:bd:cd:45:62:95:08:6e:
+                    d0:66:dd:53:a2:cc:f0:10:dc:54:73:8b:04:a1:46:
+                    33:33:5c:17:40:b9:9e:4d:d3:f3:be:55:83:e8:b1:
+                    89:8e:5a:7c:9a:96:22:90:3b:88:25:f2:d2:53:88:
+                    02:0c:0b:78:f2:e6:37:17:4b:30:46:07:e4:80:6d:
+                    a6:d8:96:2e:e8:2c:f8:11:b3:38:0d:66:a6:9b:ea:
+                    c9:23:5b:db:8e:e2:f3:13:8e:1a:59:2d:aa:02:f0:
+                    ec:a4:87:66:dc:c1:3f:f5:d8:b9:f4:ec:82:c6:d2:
+                    3d:95:1d:e5:c0:4f:84:c9:d9:a3:44:28:06:6a:d7:
+                    45:ac:f0:6b:6a:ef:4e:5f:f8:11:82:1e:38:63:34:
+                    66:50:d4:3e:93:73:fa:30:c3:66:ad:ff:93:2d:97:
+                    ef:03
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha1WithRSAEncryption
+        8f:fa:25:6b:4f:5b:e4:a4:4e:27:55:ab:22:15:59:3c:ca:b5:
+        0a:d4:4a:db:ab:dd:a1:5f:53:c5:a0:57:39:c2:ce:47:2b:be:
+        3a:c8:56:bf:c2:d9:27:10:3a:b1:05:3c:c0:77:31:bb:3a:d3:
+        05:7b:6d:9a:1c:30:8c:80:cb:93:93:2a:83:ab:05:51:82:02:
+        00:11:67:6b:f3:88:61:47:5f:03:93:d5:5b:0d:e0:f1:d4:a1:
+        32:35:85:b2:3a:db:b0:82:ab:d1:cb:0a:bc:4f:8c:5b:c5:4b:
+        00:3b:1f:2a:82:a6:7e:36:85:dc:7e:3c:67:00:b5:e4:3b:52:
+        e0:a8:eb:5d:15:f9:c6:6d:f0:ad:1d:0e:85:b7:a9:9a:73:14:
+        5a:5b:8f:41:28:c0:d5:e8:2d:4d:a4:5e:cd:aa:d9:ed:ce:dc:
+        d8:d5:3c:42:1d:17:c1:12:5d:45:38:c3:38:f3:fc:85:2e:83:
+        46:48:b2:d7:20:5f:92:36:8f:e7:79:0f:98:5e:99:e8:f0:d0:
+        a4:bb:f5:53:bd:2a:ce:59:b0:af:6e:7f:6c:bb:d2:1e:00:b0:
+        21:ed:f8:41:62:82:b9:d8:b2:c4:bb:46:50:f3:31:c5:8f:01:
+        a8:74:eb:f5:78:27:da:e7:f7:66:43:f3:9e:83:3e:20:aa:c3:
+        35:60:91:ce
+
 Verisign/RSA Commercial CA
 ==========================
 MD5 Fingerprint: 5A:0B:DD:42:9E:B2:B4:62:97:32:7F:7F:0A:AA:9A:39
index 58e05e2..9e01964 100644 (file)
@@ -72,7 +72,13 @@ DIFS='
 ##
 ##  avoid brain dead shells on Ultrix and friends
 ##
-test -f /bin/sh5 && exec /bin/sh5 $0 "$@"
+if [ -f /bin/sh5 ]; then
+    if [ ".$APACI_SH5_UPGRADE_STEP" != .done ]; then
+         APACI_SH5_UPGRADE_STEP=done
+         export APACI_SH5_UPGRADE_STEP
+         exec /bin/sh5 $0 "$@"
+    fi
+fi
 
 ##
 ##  the paths to the Apache source tree
@@ -423,7 +429,10 @@ do
             echo " --libexecdir=DIR       install program  executables in DIR"
             echo " --mandir=DIR           install manual pages in DIR"
             echo " --sysconfdir=DIR       install configuration files in DIR"
-            echo " --datadir=DIR          install read-only  data files in DIR"
+            echo " --datadir=DIR          install read-only data files in DIR"
+            echo " --iconsdir=DIR         install read-only icon files in DIR"
+            echo " --htdocsdir=DIR        install read-only document files in DIR"
+            echo " --cgidir=DIR           install read-only cgi files in DIR"
             echo " --includedir=DIR       install includes files in DIR"
             echo " --localstatedir=DIR    install modifiable data files in DIR"
             echo " --runtimedir=DIR       install runtime data in DIR"
@@ -448,7 +457,7 @@ do
             echo " --without-confadjust   disable the user/situation adjustments in config"
             echo " --without-execstrip    disable the stripping of executables on installation"
             echo " --server-uid=UID       set the user ID the web server should run as [nobody]"
-            echo " --server-gid=GID       set the group ID the web server UID is a memeber of [-1]"
+            echo " --server-gid=GID       set the group ID the web server UID is a memeber of [#-1]"
             echo ""
             echo "suEXEC options:"
             echo " --enable-suexec        enable the suEXEC feature"
index 7d85c93..109c5f8 100644 (file)
@@ -21,7 +21,7 @@
 
   <H1 ALIGN="CENTER">Apache Server Frequently Asked Questions</H1>
   <P>
-  $Revision: 1.5 $ ($Date: 2000/01/25 18:29:23 $)
+  $Revision: 1.6 $ ($Date: 2000/03/19 11:16:29 $)
   </P>
   <P>
   The latest version of this FAQ is always available from the main
    </LI>
    <LI><A HREF="#regex">What are "regular expressions"?</A>
    </LI>
+   <li><a href="#binaries">Why isn't there a binary for my platform?</a></li>
   </OL>
  </LI>
 
    </P>
   <HR>
  </LI>
+
+ <li><a name="binaries">
+      <b>Why isn't there a binary for my platform?</b></a>
+   <p>
+   The developers make sure that the software builds and works
+   correctly on the platforms available to them; this does
+   <i>not</i> necessarily mean that <i>your</i> platform
+   is one of them.  In addition, the Apache HTTP server project
+   is primarily source oriented, meaning that distributing
+   valid and buildable source code is the purpose of a release,
+   not making sure that there is a binary package for all of the
+   supported platforms.
+   </p>
+   <p>
+   If you don't see a kit for your platform listed in the
+   binary distribution area
+   (&lt;URL:<a href="http://www.apache.org/dist/binaries/"
+            >http://www.apache.org/dist/binaries/</a>&gt;),
+   it means either that the platform isn't available to any of
+   the developers, or that they just haven't gotten around to
+   preparing a binary for it.  As this is a voluntary project,
+   they are under no obligation to do so.  Users are encouraged
+   and expected to build the software themselves.
+   </p>
+   <p>
+   The sole exception to these practices is the Windows package.
+   Unlike most Unix and Unix-like platforms, Windows systems
+   do not come with a bundled software development environment,
+   so we <i>do</i> prepare binary kits for Windows when we make
+   a release.  Again, however, it's a voluntary thing and only
+   a limited number of the developers have the capability to build
+   the InstallShield package, so the Windows release may lag
+   somewhat behind the source release.  This lag should be
+   no more than a few days at most.
+   </p>
+  <hr>
+ </li>
+
 </OL>
 
 
   several third party modules available through the <A
   HREF="http://modules.apache.org/">Apache Module Registry</A> which
   will add footers to documents.  These include mod_trailer, PHP
-  (<SAMP>php3_auto_append_file</SAMP>), and mod_perl
+  (<SAMP>php3_auto_append_file</SAMP>), mod_layout, and mod_perl
   (<SAMP>Apache::Sandwich</SAMP>).
   </P>
   <HR>
index 12363e9..25a0a23 100644 (file)
@@ -34,14 +34,14 @@ December 1997</ADDRESS>
 </DIV>
 
 <P>
-This document supplements the mod_rewrite <a
-href="../mod/mod_rewrite.html">reference documentation</a>. It describes
+This document supplements the mod_rewrite <A
+HREF="../mod/mod_rewrite.html">reference documentation</A>. It describes
 how one can use Apache's mod_rewrite to solve typical URL-based problems
 webmasters are usually confronted with in practice. I give detailed
 descriptions on how to solve each problem by configuring URL rewriting
 rulesets.
 
-<H2><a name="ToC1">Introduction to mod_rewrite</a></H2>
+<H2><A name="ToC1">Introduction to mod_rewrite</A></H2>
 
 The Apache module mod_rewrite is a killer one, i.e. it is a really
 sophisticated module which provides a powerful way to do URL manipulations.
@@ -56,19 +56,21 @@ first time and never use it again or love it for the rest of your life because
 of its power. This paper tries to give you a few initial success events to
 avoid the first case by presenting already invented solutions to you.
 
-<H2><a name="ToC2">Practical Solutions</a></H2>
+<H2><A name="ToC2">Practical Solutions</A></H2>
 
 Here come a lot of practical solutions I've either invented myself or
 collected from other peoples solutions in the past. Feel free to learn the
 black magic of URL rewriting from these examples.
 
 <P>
+<TABLE BGCOLOR="#FFE0E0" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD>
 ATTENTION: Depending on your server-configuration it can be necessary to
 slightly change the examples for your situation, e.g. adding the [PT] flag
 when additionally using mod_alias and mod_userdir, etc. Or rewriting a ruleset
-to fit in <tt>.htaccess</tt> context instead of per-server context. Always try
+to fit in <CODE>.htaccess</CODE> context instead of per-server context. Always try
 to understand what a particular ruleset really does before you use it. It
 avoid problems.
+</TD></TR></TABLE>
 
 <H1>URL Layout</H1>
 
@@ -89,12 +91,12 @@ supplied with the request he should finally see the canonical one only.
 <DD>
 We do an external HTTP redirect for all non-canonical URLs to fix them in the
 location view of the Browser and for all subsequent requests. In the example
-ruleset below we replace <tt>/~user</tt> by the canonical <tt>/u/user</tt> and
-fix a missing trailing slash for <tt>/u/user</tt>.
+ruleset below we replace <CODE>/~user</CODE> by the canonical <CODE>/u/user</CODE> and
+fix a missing trailing slash for <CODE>/u/user</CODE>.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-RewriteRule   ^/<b>~</b>([^/]+)/?(.*)    /<b>u</b>/$1/$2  [<b>R</b>]
-RewriteRule   ^/([uge])/(<b>[^/]+</b>)$  /$1/$2<b>/</b>   [<b>R</b>]
+RewriteRule   ^/<STRONG>~</STRONG>([^/]+)/?(.*)    /<STRONG>u</STRONG>/$1/$2  [<STRONG>R</STRONG>]
+RewriteRule   ^/([uge])/(<STRONG>[^/]+</STRONG>)$  /$1/$2<STRONG>/</STRONG>   [<STRONG>R</STRONG>]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -132,26 +134,26 @@ RewriteRule ^/(.*)         http://fully.qualified.domain.name/$1 [L,R]
 <DT><STRONG>Description:</STRONG>
 <DD>
 Usually the DocumentRoot of the webserver directly relates to the URL
-``<tt>/</tt>''. But often this data is not really of top-level priority, it is
+``<CODE>/</CODE>''. But often this data is not really of top-level priority, it is
 perhaps just one entity of a lot of data pools. For instance at our Intranet
-sites there are <tt>/e/www/</tt> (the homepage for WWW), <tt>/e/sww/</tt> (the
+sites there are <CODE>/e/www/</CODE> (the homepage for WWW), <CODE>/e/sww/</CODE> (the
 homepage for the Intranet) etc. Now because the data of the DocumentRoot stays
-at <tt>/e/www/</tt> we had to make sure that all inlined images and other
+at <CODE>/e/www/</CODE> we had to make sure that all inlined images and other
 stuff inside this data pool work for subsequent requests. 
 
 <P>
 <DT><STRONG>Solution:</STRONG>
 <DD>
-We just redirect the URL <tt>/</tt> to <tt>/e/www/</tt>.  While is seems
+We just redirect the URL <CODE>/</CODE> to <CODE>/e/www/</CODE>.  While is seems
 trivial it is actually trivial with mod_rewrite, only.  Because the typical
-old mechanisms of URL <i>Aliases</i> (as provides by mod_alias and friends)
-only used <i>prefix</i> matching. With this you cannot do such a redirection
+old mechanisms of URL <EM>Aliases</EM> (as provides by mod_alias and friends)
+only used <EM>prefix</EM> matching. With this you cannot do such a redirection
 because the DocumentRoot is a prefix of all URLs. With mod_rewrite it is
 really trivial:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
-RewriteRule   <b>^/$</b>  /e/www/  [<b>R</b>]
+RewriteRule   <STRONG>^/$</STRONG>  /e/www/  [<STRONG>R</STRONG>]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -165,9 +167,9 @@ RewriteRule   <b>^/$</b>  /e/www/  [<b>R</b>]
 <DD>
 Every webmaster can sing a song about the problem of the trailing slash on
 URLs referencing directories. If they are missing, the server dumps an error,
-because if you say <tt>/~quux/foo</tt> instead of
-<tt>/~quux/foo/</tt> then the server searches for a <i>file</i> named
-<tt>foo</tt>. And because this file is a directory it complains. Actually
+because if you say <CODE>/~quux/foo</CODE> instead of
+<CODE>/~quux/foo/</CODE> then the server searches for a <EM>file</EM> named
+<CODE>foo</CODE>. And because this file is a directory it complains. Actually
 is tries to fix it themself in most of the cases, but sometimes this mechanism
 need to be emulated by you. For instance after you have done a lot of
 complicated URL rewritings to CGI scripts etc. 
@@ -181,27 +183,27 @@ so the browser correctly requests subsequent images etc. If we only did a
 internal rewrite, this would only work for the directory page, but would go
 wrong when any images are included into this page with relative URLs, because
 the browser would request an in-lined object. For instance, a request for
-<tt>image.gif</tt> in <tt>/~quux/foo/index.html</tt> would become
-<tt>/~quux/image.gif</tt> without the external redirect!
+<CODE>image.gif</CODE> in <CODE>/~quux/foo/index.html</CODE> would become
+<CODE>/~quux/image.gif</CODE> without the external redirect!
 <P>
 So, to do this trick we write:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine  on
 RewriteBase    /~quux/
-RewriteRule    ^foo<b>$</b>  foo<b>/</b>  [<b>R</b>]
+RewriteRule    ^foo<STRONG>$</STRONG>  foo<STRONG>/</STRONG>  [<STRONG>R</STRONG>]
 </PRE></TD></TR></TABLE>
 
 <P>
 The crazy and lazy can even do the following in the top-level
-<tt>.htaccess</tt> file of their homedir. But notice that this creates some
+<CODE>.htaccess</CODE> file of their homedir. But notice that this creates some
 processing overhead.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine  on
 RewriteBase    /~quux/
-RewriteCond    %{REQUEST_FILENAME}  <b>-d</b>
-RewriteRule    ^(.+<b>[^/]</b>)$           $1<b>/</b>  [R]
+RewriteCond    %{REQUEST_FILENAME}  <STRONG>-d</STRONG>
+RewriteRule    ^(.+<STRONG>[^/]</STRONG>)$           $1<STRONG>/</STRONG>  [R]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -215,7 +217,7 @@ RewriteRule    ^(.+<b>[^/]</b>)$           $1<b>/</b>  [R]
 <DD>
 We want to create a homogenous and consistent URL layout over all WWW servers
 on a Intranet webcluster, i.e. all URLs (per definition server local and thus
-server dependent!) become actually server <i>independed</i>!  What we want is
+server dependent!) become actually server <EM>independed</EM>!  What we want is
 to give the WWW namespace a consistent server-independend layout: no URL
 should have to include any physically correct target server. The cluster
 itself should drive us automatically to the physical target host.
@@ -233,7 +235,7 @@ user2  server_of_user2
 :      :
 </PRE><P>
 
-We put them into files <tt>map.xxx-to-host</tt>.  Second we need to instruct
+We put them into files <CODE>map.xxx-to-host</CODE>.  Second we need to instruct
 all servers to redirect URLs of the forms
 
 <P><PRE>
@@ -261,9 +263,9 @@ RewriteMap      user-to-host   txt:/path/to/map.user-to-host
 RewriteMap     group-to-host   txt:/path/to/map.group-to-host
 RewriteMap    entity-to-host   txt:/path/to/map.entity-to-host
 
-RewriteRule   ^/u/<b>([^/]+)</b>/?(.*)   http://<b>${user-to-host:$1|server0}</b>/u/$1/$2
-RewriteRule   ^/g/<b>([^/]+)</b>/?(.*)  http://<b>${group-to-host:$1|server0}</b>/g/$1/$2
-RewriteRule   ^/e/<b>([^/]+)</b>/?(.*) http://<b>${entity-to-host:$1|server0}</b>/e/$1/$2
+RewriteRule   ^/u/<STRONG>([^/]+)</STRONG>/?(.*)   http://<STRONG>${user-to-host:$1|server0}</STRONG>/u/$1/$2
+RewriteRule   ^/g/<STRONG>([^/]+)</STRONG>/?(.*)  http://<STRONG>${group-to-host:$1|server0}</STRONG>/g/$1/$2
+RewriteRule   ^/e/<STRONG>([^/]+)</STRONG>/?(.*) http://<STRONG>${entity-to-host:$1|server0}</STRONG>/e/$1/$2
 
 RewriteRule   ^/([uge])/([^/]+)/?$          /$1/$2/.www/
 RewriteRule   ^/([uge])/([^/]+)/([^.]+.+)   /$1/$2/.www/$3\
@@ -287,12 +289,12 @@ replace the old one over time.
 <DT><STRONG>Solution:</STRONG>
 <DD>
 The solution is trivial with mod_rewrite. On the old webserver we just
-redirect all <tt>/~user/anypath</tt> URLs to
-<tt>http://newserver/~user/anypath</tt>.
+redirect all <CODE>/~user/anypath</CODE> URLs to
+<CODE>http://newserver/~user/anypath</CODE>.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
-RewriteRule   ^/~(.+)  http://<b>newserver</b>/~$1  [R,L]
+RewriteRule   ^/~(.+)  http://<STRONG>newserver</STRONG>/~$1  [R,L]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -306,9 +308,9 @@ RewriteRule   ^/~(.+)  http://<b>newserver</b>/~$1  [R,L]
 <DD>
 Some sites with thousend of users usually use a structured homedir layout,
 i.e.  each homedir is in a subdirectory which begins for instance with the
-first character of the username. So, <tt>/~foo/anypath</tt> is
-<tt>/home/<b>f</b>/foo/.www/anypath</tt> while <tt>/~bar/anypath</tt> is
-<tt>/home/<b>b</b>/bar/.www/anypath</tt>.
+first character of the username. So, <CODE>/~foo/anypath</CODE> is
+<CODE>/home/<STRONG>f</STRONG>/foo/.www/anypath</CODE> while <CODE>/~bar/anypath</CODE> is
+<CODE>/home/<STRONG>b</STRONG>/bar/.www/anypath</CODE>.
 
 <P>
 <DT><STRONG>Solution:</STRONG>
@@ -318,7 +320,7 @@ layout.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
-RewriteRule   ^/~(<b>([a-z])</b>[a-z0-9]+)(.*)  /home/<b>$2</b>/$1/.www$3
+RewriteRule   ^/~(<STRONG>([a-z])</STRONG>[a-z0-9]+)(.*)  /home/<STRONG>$2</STRONG>/$1/.www$3
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -331,10 +333,10 @@ RewriteRule   ^/~(<b>([a-z])</b>[a-z0-9]+)(.*)  /home/<b>$2</b>/$1/.www$3
 <DT><STRONG>Description:</STRONG>
 <DD>
 This really is a hardcore example: a killer application which heavily uses
-per-directory <tt>RewriteRules</tt> to get a smooth look and feel on the Web
+per-directory <CODE>RewriteRules</CODE> to get a smooth look and feel on the Web
 while its data structure is never touched or adjusted.
 
-Background: <b><i>net.sw</i></b> is my archive of freely available Unix
+Background: <STRONG><EM>net.sw</EM></STRONG> is my archive of freely available Unix
 software packages, which I started to collect in 1992. It is both my hobby and
 job to to this, because while I'm studying computer science I have also worked
 for many years as a system and network administrator in my spare time. Every
@@ -360,21 +362,20 @@ drwxrwxr-x  12 netsw  users    512 Aug  3 20:15 Typesetting/
 drwxrwxr-x  10 netsw  users    512 Jul  9 14:08 X11/
 </PRE><P>
 
-In July 1996 I decided to make this 350 MB archive public to the world via a
-nice Web interface (<a href="http://net.sw.engelschall.com/net.sw/"><tt>
-http://net.sw.engelschall.com/net.sw/</tt></a>). "Nice" means that I wanted to
-offer a interface where you can browse directly through the archive hierarchy.
+In July 1996 I decided to make this archive public to the world via a
+nice Web interface. "Nice" means that I wanted to
+offer an interface where you can browse directly through the archive hierarchy.
 And "nice" means that I didn't wanted to change anything inside this hierarchy
 - not even by putting some CGI scripts at the top of it.  Why? Because the
 above structure should be later accessible via FTP as well, and I didn't
-want any Web or CGI stuuf to be there.
+want any Web or CGI stuff to be there.
 
 <P>
 <DT><STRONG>Solution:</STRONG>
 <DD>
 The solution has two parts: The first is a set of CGI scripts which create all
 the pages at all directory levels on-the-fly. I put them under
-<tt>/e/netsw/.www/</tt> as follows:
+<CODE>/e/netsw/.www/</CODE> as follows:
 
 <P><PRE>
 -rw-r--r--   1 netsw  users    1318 Aug  1 18:10 .wwwacl
@@ -392,18 +393,18 @@ drwxr-xr-x   2 netsw  users     512 Jul  8 23:47 netsw-img/
 -rw-r--r--   1 netsw  users     234 Jul 30 16:35 netsw-unlimit.lst
 </PRE><P>
 
-The <tt>DATA/</tt> subdirectory holds the above directory structure, i.e.  the
-real <b><i>net.sw</i></b> stuff and gets automatically updated via
-<tt>rdist</tt> from time to time. 
+The <CODE>DATA/</CODE> subdirectory holds the above directory structure, i.e.  the
+real <STRONG><EM>net.sw</EM></STRONG> stuff and gets automatically updated via
+<CODE>rdist</CODE> from time to time. 
 
- The second part of the problem remains: how to link these two structures
-together into one smooth-looking URL tree? We want to hide the <tt>DATA/</tt>
+The second part of the problem remains: how to link these two structures
+together into one smooth-looking URL tree? We want to hide the <CODE>DATA/</CODE>
 directory from the user while running the appropriate CGI scripts for the
 various URLs. 
 
 Here is the solution: first I put the following into the per-directory
 configuration file in the Document Root of the server to rewrite the announced
-URL <tt>/net.sw/</tt> to the internal path <tt>/e/netsw</tt>:
+URL <CODE>/net.sw/</CODE> to the internal path <CODE>/e/netsw</CODE>:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteRule  ^net.sw$       net.sw/        [R]
@@ -413,7 +414,7 @@ RewriteRule  ^net.sw/(.*)$  e/netsw/$1
 <P>
 The first rule is for requests which miss the trailing slash!  The second rule
 does the real thing. And then comes the killer configuration which stays in
-the per-directory config file <tt>/e/netsw/.www/.wwwacl</tt>:
+the per-directory config file <CODE>/e/netsw/.www/.wwwacl</CODE>:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 Options       ExecCGI FollowSymLinks Includes MultiViews 
@@ -467,11 +468,11 @@ Some hints for interpretation:
 <DD>
 When switching from the NCSA webserver to the more modern Apache webserver a
 lot of people want a smooth transition. So they want pages which use their old
-NCSA <tt>imagemap</tt> program to work under Apache with the modern
-<tt>mod_imap</tt>. The problem is that there are a lot of
-hyperlinks around which reference the <tt>imagemap</tt> program via
-<tt>/cgi-bin/imagemap/path/to/page.map</tt>. Under Apache this
-has to read just <tt>/path/to/page.map</tt>.
+NCSA <CODE>imagemap</CODE> program to work under Apache with the modern
+<CODE>mod_imap</CODE>. The problem is that there are a lot of
+hyperlinks around which reference the <CODE>imagemap</CODE> program via
+<CODE>/cgi-bin/imagemap/path/to/page.map</CODE>. Under Apache this
+has to read just <CODE>/path/to/page.map</CODE>.
 
 <P>
 <DT><STRONG>Solution:</STRONG>
@@ -505,13 +506,13 @@ RewriteEngine on
 
 #   first try to find it in custom/...
 #   ...and if found stop and be happy:
-RewriteCond         /your/docroot/<b>dir1</b>/%{REQUEST_FILENAME}  -f
-RewriteRule  ^(.+)  /your/docroot/<b>dir1</b>/$1  [L]
+RewriteCond         /your/docroot/<STRONG>dir1</STRONG>/%{REQUEST_FILENAME}  -f
+RewriteRule  ^(.+)  /your/docroot/<STRONG>dir1</STRONG>/$1  [L]
 
 #   second try to find it in pub/...
 #   ...and if found stop and be happy:
-RewriteCond         /your/docroot/<b>dir2</b>/%{REQUEST_FILENAME}  -f
-RewriteRule  ^(.+)  /your/docroot/<b>dir2</b>/$1  [L]
+RewriteCond         /your/docroot/<STRONG>dir2</STRONG>/%{REQUEST_FILENAME}  -f
+RewriteRule  ^(.+)  /your/docroot/<STRONG>dir2</STRONG>/$1  [L]
 
 #   else go on for other Alias or ScriptAlias directives,
 #   etc.
@@ -536,13 +537,13 @@ strip out this information.
 <DD>
 We use a rewrite rule to strip out the status information and remember it via
 an environment variable which can be later dereferenced from within XSSI or
-CGI. This way a URL <tt>/foo/S=java/bar/</tt> gets translated to
-<tt>/foo/bar/</tt> and the environment variable named <tt>STATUS</tt> is set
+CGI. This way a URL <CODE>/foo/S=java/bar/</CODE> gets translated to
+<CODE>/foo/bar/</CODE> and the environment variable named <CODE>STATUS</CODE> is set
 to the value "java".
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
-RewriteRule   ^(.*)/<b>S=([^/]+)</b>/(.*)    $1/$3 [E=<b>STATUS:$2</b>]
+RewriteRule   ^(.*)/<STRONG>S=([^/]+)</STRONG>/(.*)    $1/$3 [E=<STRONG>STATUS:$2</STRONG>]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -554,7 +555,7 @@ RewriteRule   ^(.*)/<b>S=([^/]+)</b>/(.*)    $1/$3 [E=<b>STATUS:$2</b>]
 <DL>
 <DT><STRONG>Description:</STRONG>
 <DD>
-Assume that you want to provide <tt>www.<b>username</b>.host.domain.com</tt>
+Assume that you want to provide <CODE>www.<STRONG>username</STRONG>.host.domain.com</CODE>
 for the homepage of username via just DNS A records to the same machine and
 without any virtualhosts on this machine. 
 
@@ -563,14 +564,14 @@ without any virtualhosts on this machine.
 <DD>
 For HTTP/1.0 requests there is no solution, but for HTTP/1.1 requests which
 contain a Host: HTTP header we can use the following ruleset to rewrite
-<tt>http://www.username.host.com/anypath</tt> internally to
-<tt>/home/username/anypath</tt>:
+<CODE>http://www.username.host.com/anypath</CODE> internally to
+<CODE>/home/username/anypath</CODE>:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
-RewriteCond   %{<b>HTTP_HOST</b>}                 ^www\.<b>[^.]+</b>\.host\.com$
+RewriteCond   %{<STRONG>HTTP_HOST</STRONG>}                 ^www\.<STRONG>[^.]+</STRONG>\.host\.com$
 RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
-RewriteRule   ^www\.<b>([^.]+)</b>\.host\.com(.*) /home/<b>$1</b>$2
+RewriteRule   ^www\.<STRONG>([^.]+)</STRONG>\.host\.com(.*) /home/<STRONG>$1</STRONG>$2
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -583,8 +584,8 @@ RewriteRule   ^www\.<b>([^.]+)</b>\.host\.com(.*) /home/<b>$1</b>$2
 <DT><STRONG>Description:</STRONG>
 <DD>
 We want to redirect homedir URLs to another webserver
-<tt>www.somewhere.com</tt> when the requesting user does not stay in the local
-domain <tt>ourdomain.com</tt>. This is sometimes used in virtual host
+<CODE>www.somewhere.com</CODE> when the requesting user does not stay in the local
+domain <CODE>ourdomain.com</CODE>. This is sometimes used in virtual host
 contexts.
 
 <P>
@@ -594,7 +595,7 @@ Just a rewrite condition:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
-RewriteCond   %{REMOTE_HOST}  <b>!^.+\.ourdomain\.com$</b>
+RewriteCond   %{REMOTE_HOST}  <STRONG>!^.+\.ourdomain\.com$</STRONG>
 RewriteRule   ^(/~.+)         http://www.somewhere.com/$1 [R,L]
 </PRE></TD></TR></TABLE>
 
@@ -620,8 +621,8 @@ error safe:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
-RewriteCond   /your/docroot/%{REQUEST_FILENAME} <b>!-f</b>
-RewriteRule   ^(.+)                             http://<b>webserverB</b>.dom/$1
+RewriteCond   /your/docroot/%{REQUEST_FILENAME} <STRONG>!-f</STRONG>
+RewriteRule   ^(.+)                             http://<STRONG>webserverB</STRONG>.dom/$1
 </PRE></TD></TR></TABLE>
 
 <P>
@@ -631,8 +632,8 @@ homedirs, etc.) there is better variant:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
-RewriteCond   %{REQUEST_URI} <b>!-U</b>
-RewriteRule   ^(.+)          http://<b>webserverB</b>.dom/$1
+RewriteCond   %{REQUEST_URI} <STRONG>!-U</STRONG>
+RewriteRule   ^(.+)          http://<STRONG>webserverB</STRONG>.dom/$1
 </PRE></TD></TR></TABLE>
 
 <P>
@@ -663,7 +664,7 @@ also escape the hash character. How can we redirect to such a URL?
 <DD>
 We have to use a kludge by the use of a NPH-CGI script which does the redirect
 itself. Because here no escaping is done (NPH=non-parseable headers).  First
-we introduce a new URL scheme <tt>xredirect:</tt> by the following per-server
+we introduce a new URL scheme <CODE>xredirect:</CODE> by the following per-server
 config-line (should be one of the last rewrite rules):
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
@@ -672,8 +673,8 @@ RewriteRule ^xredirect:(.+) /path/to/nph-xredirect.cgi/$1 \
 </PRE></TD></TR></TABLE>
 
 <P>
-This forces all URLs prefixed with <tt>xredirect:</tt> to be piped through the
-<tt>nph-xredirect.cgi</tt> program. And this program just looks like:
+This forces all URLs prefixed with <CODE>xredirect:</CODE> to be piped through the
+<CODE>nph-xredirect.cgi</CODE> program. And this program just looks like:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 <PRE>
@@ -697,7 +698,7 @@ print "&lt;title&gt;302 Moved Temporarily (EXTENDED)&lt;/title&gt;\n";
 print "&lt;/head&gt;\n";
 print "&lt;body&gt;\n";
 print "&lt;h1&gt;Moved Temporarily (EXTENDED)&lt;/h1&gt;\n";
-print "The document has moved &lt;a href=\"$url\"&gt;here&lt;/a&gt;.&lt;p&gt;\n";
+print "The document has moved &lt;a HREF=\"$url\"&gt;here&lt;/a&gt;.&lt;p&gt;\n";
 print "&lt;/body&gt;\n";
 print "&lt;/html&gt;\n";
 
@@ -708,7 +709,7 @@ print "&lt;/html&gt;\n";
 <P>
 This provides you with the functionality to do redirects to all URL schemes,
 i.e. including the one which are not directly accepted by mod_rewrite. For
-instance you can now also redirect to <tt>news:newsgroup</tt> via
+instance you can now also redirect to <CODE>news:newsgroup</CODE> via
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteRule ^anyurl  xredirect:news:newsgroup
@@ -716,7 +717,7 @@ RewriteRule ^anyurl  xredirect:news:newsgroup
 
 <P>
 Notice: You have not to put [R] or [R,L] to the above rule because the
-<tt>xredirect:</tt> need to be expanded later by our special "pipe through"
+<CODE>xredirect:</CODE> need to be expanded later by our special "pipe through"
 rule above.
 
 </DL>
@@ -728,8 +729,8 @@ rule above.
 <DL>
 <DT><STRONG>Description:</STRONG>
 <DD>
-Do you know the great CPAN (Comprehensive Perl Archive Network) under <a
-href="http://www.perl.com/CPAN">http://www.perl.com/CPAN</a>? This does a
+Do you know the great CPAN (Comprehensive Perl Archive Network) under <A
+HREF="http://www.perl.com/CPAN">http://www.perl.com/CPAN</A>? This does a
 redirect to one of several FTP servers around the world which carry a CPAN
 mirror and is approximately near the location of the requesting client.
 Actually this can be called an FTP access multiplexing service. While CPAN
@@ -747,7 +748,7 @@ ruleset we can use this top-level domain as a key to our multiplexing map.
 RewriteEngine on
 RewriteMap    multiplex                txt:/path/to/map.cxan
 RewriteRule   ^/CxAN/(.*)              %{REMOTE_HOST}::$1                 [C]
-RewriteRule   ^.+\.<b>([a-zA-Z]+)</b>::(.*)$  ${multiplex:<b>$1</b>|ftp.default.dom}$2  [R,L]
+RewriteRule   ^.+\.<STRONG>([a-zA-Z]+)</STRONG>::(.*)$  ${multiplex:<STRONG>$1</STRONG>|ftp.default.dom}$2  [R,L]
 </PRE></TD></TR></TABLE>
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
@@ -778,7 +779,7 @@ How can it be done via mod_rewrite?
 <P>
 <DT><STRONG>Solution:</STRONG>
 <DD>
-There are a lot of variables named <tt>TIME_xxx</tt> for rewrite conditions.
+There are a lot of variables named <CODE>TIME_xxx</CODE> for rewrite conditions.
 In conjunction with the special lexicographic comparison patterns &lt;STRING,
 &gt;STRING and =STRING we can do time-dependend redirects:
 
@@ -791,9 +792,9 @@ RewriteRule   ^foo\.html$             foo.night.html
 </PRE></TD></TR></TABLE>
 
 <P>
-This provides the content of <tt>foo.day.html</tt> under the URL
-<tt>foo.html</tt> from 07:00-19:00 and at the remaining time the contents of
-<tt>foo.night.html</tt>. Just a nice feature for a homepage...
+This provides the content of <CODE>foo.day.html</CODE> under the URL
+<CODE>foo.html</CODE> from 07:00-19:00 and at the remaining time the contents of
+<CODE>foo.night.html</CODE>. Just a nice feature for a homepage...
 
 </DL>
 
@@ -843,8 +844,8 @@ RewriteRule   ^(.*)$ $1.html
 <DL>
 <DT><STRONG>Description:</STRONG>
 <DD>
-Assume we have recently renamed the page <tt>bar.html</tt> to
-<tt>foo.html</tt> and now want to provide the old URL for backward
+Assume we have recently renamed the page <CODE>bar.html</CODE> to
+<CODE>foo.html</CODE> and now want to provide the old URL for backward
 compatibility. Actually we want that users of the old URL even not recognize
 that the pages was renamed.
 
@@ -856,7 +857,7 @@ We rewrite the old URL to the new one internally via the following rule:
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine  on
 RewriteBase    /~quux/
-RewriteRule    ^<b>foo</b>\.html$  <b>bar</b>.html
+RewriteRule    ^<STRONG>foo</STRONG>\.html$  <STRONG>bar</STRONG>.html
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -868,8 +869,8 @@ RewriteRule    ^<b>foo</b>\.html$  <b>bar</b>.html
 <DL>
 <DT><STRONG>Description:</STRONG>
 <DD>
-Assume again that we have recently renamed the page <tt>bar.html</tt> to
-<tt>foo.html</tt> and now want to provide the old URL for backward
+Assume again that we have recently renamed the page <CODE>bar.html</CODE> to
+<CODE>foo.html</CODE> and now want to provide the old URL for backward
 compatibility. But this time we want that the users of the old URL get hinted
 to the new one, i.e. their browsers Location field should change, too.
 
@@ -882,7 +883,7 @@ browsers and thus the users view:
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine  on
 RewriteBase    /~quux/
-RewriteRule    ^<b>foo</b>\.html$  <b>bar</b>.html  [<b>R</b>]
+RewriteRule    ^<STRONG>foo</STRONG>\.html$  <STRONG>bar</STRONG>.html  [<STRONG>R</STRONG>]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -905,21 +906,21 @@ browsers and a average feature version for all others.
 We cannot use content negotiation because the browsers do not provide their
 type in that form. Instead we have to act on the HTTP header "User-Agent".
 The following condig does the following: If the HTTP header "User-Agent"
-begins with "Mozilla/3", the page <tt>foo.html</tt> is rewritten to
-<tt>foo.NS.html</tt> and and the rewriting stops.  If the browser is "Lynx" or
-"Mozilla" of version 1 or 2 the URL becomes <tt>foo.20.html</tt>.  All other
-browsers receive page <tt>foo.32.html</tt>. This is done by the following
+begins with "Mozilla/3", the page <CODE>foo.html</CODE> is rewritten to
+<CODE>foo.NS.html</CODE> and and the rewriting stops.  If the browser is "Lynx" or
+"Mozilla" of version 1 or 2 the URL becomes <CODE>foo.20.html</CODE>.  All other
+browsers receive page <CODE>foo.32.html</CODE>. This is done by the following
 ruleset:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-RewriteCond %{HTTP_USER_AGENT}  ^<b>Mozilla/3</b>.*
-RewriteRule ^foo\.html$         foo.<b>NS</b>.html          [<b>L</b>]
+RewriteCond %{HTTP_USER_AGENT}  ^<STRONG>Mozilla/3</STRONG>.*
+RewriteRule ^foo\.html$         foo.<STRONG>NS</STRONG>.html          [<STRONG>L</STRONG>]
 
-RewriteCond %{HTTP_USER_AGENT}  ^<b>Lynx/</b>.*         [OR]
-RewriteCond %{HTTP_USER_AGENT}  ^<b>Mozilla/[12]</b>.*
-RewriteRule ^foo\.html$         foo.<b>20</b>.html          [<b>L</b>]
+RewriteCond %{HTTP_USER_AGENT}  ^<STRONG>Lynx/</STRONG>.*         [OR]
+RewriteCond %{HTTP_USER_AGENT}  ^<STRONG>Mozilla/[12]</STRONG>.*
+RewriteRule ^foo\.html$         foo.<STRONG>20</STRONG>.html          [<STRONG>L</STRONG>]
 
-RewriteRule ^foo\.html$         foo.<b>32</b>.html          [<b>L</b>]
+RewriteRule ^foo\.html$         foo.<STRONG>32</STRONG>.html          [<STRONG>L</STRONG>]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -932,9 +933,9 @@ RewriteRule ^foo\.html$         foo.<b>32</b>.html          [<b>L</b>]
 <DT><STRONG>Description:</STRONG>
 <DD>
 Assume there are nice webpages on remote hosts we want to bring into our
-namespace. For FTP servers we would use the <tt>mirror</tt> program which
+namespace. For FTP servers we would use the <CODE>mirror</CODE> program which
 actually maintains an explicit up-to-date copy of the remote data on the local
-machine. For a webserver we could use the program <tt>webcopy</tt> which acts
+machine. For a webserver we could use the program <CODE>webcopy</CODE> which acts
 similar via HTTP. But both techniques have one major drawback: The local copy
 is always just as up-to-date as often we run the program. It would be much
 better if the mirror is not a static one we have to establish explicitly.
@@ -951,13 +952,13 @@ webarea to our namespace by the use of the <I>Proxy Throughput</I> feature
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine  on
 RewriteBase    /~quux/
-RewriteRule    ^<b>hotsheet/</b>(.*)$  <b>http://www.tstimpreso.com/hotsheet/</b>$1  [<b>P</b>]
+RewriteRule    ^<STRONG>hotsheet/</STRONG>(.*)$  <STRONG>http://www.tstimpreso.com/hotsheet/</STRONG>$1  [<STRONG>P</STRONG>]
 </PRE></TD></TR></TABLE>
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine  on
 RewriteBase    /~quux/
-RewriteRule    ^<b>usa-news\.html</b>$   <b>http://www.quux-corp.com/news/index.html</b>  [<b>P</b>]
+RewriteRule    ^<STRONG>usa-news\.html</STRONG>$   <STRONG>http://www.quux-corp.com/news/index.html</STRONG>  [<STRONG>P</STRONG>]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -991,9 +992,9 @@ RewriteRule   ^http://www\.remotesite\.com/(.*)$ /mirror/of/remotesite/$1
 <DT><STRONG>Description:</STRONG>
 <DD>
 This is a tricky way of virtually running a corporates (external) Internet
-webserver (<tt>www.quux-corp.dom</tt>), while actually keeping and maintaining
+webserver (<CODE>www.quux-corp.dom</CODE>), while actually keeping and maintaining
 its data on a (internal) Intranet webserver
-(<tt>www2.quux-corp.dom</tt>) which is protected by a firewall.  The
+(<CODE>www2.quux-corp.dom</CODE>) which is protected by a firewall.  The
 trick is that on the external webserver we retrieve the requested data
 on-the-fly from the internal one.
 
@@ -1006,8 +1007,8 @@ from it. For a packet-filtering firewall we could for instance configure a
 firewall ruleset like the following:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-<b>ALLOW</b> Host www.quux-corp.dom Port &gt;1024 --&gt; Host www2.quux-corp.dom Port <b>80</b>  
-<b>DENY</b>  Host *                 Port *     --&gt; Host www2.quux-corp.dom Port <b>80</b>
+<STRONG>ALLOW</STRONG> Host www.quux-corp.dom Port &gt;1024 --&gt; Host www2.quux-corp.dom Port <STRONG>80</STRONG>  
+<STRONG>DENY</STRONG>  Host *                 Port *     --&gt; Host www2.quux-corp.dom Port <STRONG>80</STRONG>
 </PRE></TD></TR></TABLE>
 
 <P>
@@ -1017,9 +1018,9 @@ proxy throughput feature:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteRule ^/~([^/]+)/?(.*)          /home/$1/.www/$2
-RewriteCond %{REQUEST_FILENAME}       <b>!-f</b>
-RewriteCond %{REQUEST_FILENAME}       <b>!-d</b>
-RewriteRule ^/home/([^/]+)/.www/?(.*) http://<b>www2</b>.quux-corp.dom/~$1/pub/$2 [<b>P</b>]
+RewriteCond %{REQUEST_FILENAME}       <STRONG>!-f</STRONG>
+RewriteCond %{REQUEST_FILENAME}       <STRONG>!-d</STRONG>
+RewriteRule ^/home/([^/]+)/.www/?(.*) http://<STRONG>www2</STRONG>.quux-corp.dom/~$1/pub/$2 [<STRONG>P</STRONG>]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -1031,8 +1032,8 @@ RewriteRule ^/home/([^/]+)/.www/?(.*) http://<b>www2</b>.quux-corp.dom/~$1/pub/$
 <DL>
 <DT><STRONG>Description:</STRONG>
 <DD>
-Suppose we want to load balance the traffic to <tt>www.foo.com</tt> over
-<tt>www[0-5].foo.com</tt> (a total of 6 servers). How can this be done?
+Suppose we want to load balance the traffic to <CODE>www.foo.com</CODE> over
+<CODE>www[0-5].foo.com</CODE> (a total of 6 servers). How can this be done?
 
 <P>
 <DT><STRONG>Solution:</STRONG>
@@ -1041,11 +1042,11 @@ There are a lot of possible solutions for this problem. We will discuss first
 a commonly known DNS-based variant and then the special one with mod_rewrite:
 
 <ol>
-<li><b>DNS Round-Robin</b>
+<li><STRONG>DNS Round-Robin</STRONG>
 
 <P>
 The simplest method for load-balancing is to use the DNS round-robin feature
-of BIND. Here you just configure <tt>www[0-9].foo.com</tt> as usual in your
+of BIND. Here you just configure <CODE>www[0-9].foo.com</CODE> as usual in your
 DNS with A(address) records, e.g.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
@@ -1072,33 +1073,33 @@ www    IN  CNAME   www0.foo.com.
 
 <P>
 Notice that this seems wrong, but is actually an intended feature of BIND and
-can be used in this way. However, now when <tt>www.foo.com</tt> gets resolved,
-BIND gives out <tt>www0-www6</tt> - but in a slightly permutated/rotated order
+can be used in this way. However, now when <CODE>www.foo.com</CODE> gets resolved,
+BIND gives out <CODE>www0-www6</CODE> - but in a slightly permutated/rotated order
 every time.  This way the clients are spread over the various servers.
 
 But notice that this not a perfect load balancing scheme, because DNS resolve
 information gets cached by the other nameservers on the net, so once a client
-has resolved <tt>www.foo.com</tt> to a particular <tt>wwwN.foo.com</tt>, all
-subsequent requests also go to this particular name <tt>wwwN.foo.com</tt>. But
+has resolved <CODE>www.foo.com</CODE> to a particular <CODE>wwwN.foo.com</CODE>, all
+subsequent requests also go to this particular name <CODE>wwwN.foo.com</CODE>. But
 the final result is ok, because the total sum of the requests are really
 spread over the various webservers.
 
 <P>
-<li><b>DNS Load-Balancing</b>
+<li><STRONG>DNS Load-Balancing</STRONG>
 
 <P>
 A sophisticated DNS-based method for load-balancing is to use the program
-<tt>lbnamed</tt> which can be found at <a
-href="http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html">http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html</a>.
+<CODE>lbnamed</CODE> which can be found at <A
+HREF="http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html">http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html</A>.
 It is a Perl 5 program in conjunction with auxilliary tools which provides a
 real load-balancing for DNS.
 
 <P>
-<li><b>Proxy Throughput Round-Robin</b>
+<li><STRONG>Proxy Throughput Round-Robin</STRONG>
 
 <P>
 In this variant we use mod_rewrite and its proxy throughput feature.  First we
-dedicate <tt>www0.foo.com</tt> to be actually <tt>www.foo.com</tt> by using a
+dedicate <CODE>www0.foo.com</CODE> to be actually <CODE>www.foo.com</CODE> by using a
 single
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
@@ -1106,11 +1107,11 @@ www    IN  CNAME   www0.foo.com.
 </PRE></TD></TR></TABLE>
 
 <P>
-entry in the DNS. Then we convert <tt>www0.foo.com</tt> to a proxy-only
+entry in the DNS. Then we convert <CODE>www0.foo.com</CODE> to a proxy-only
 server, i.e. we configure this machine so all arriving URLs are just pushed
-through the internal proxy to one of the 5 other servers (<tt>www1-www5</tt>).
+through the internal proxy to one of the 5 other servers (<CODE>www1-www5</CODE>).
 To accomplish this we first establish a ruleset which contacts a load
-balancing script <tt>lb.pl</tt> for all URLs.
+balancing script <CODE>lb.pl</CODE> for all URLs.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
@@ -1119,7 +1120,7 @@ RewriteRule   ^/(.+)$ ${lb:$1}           [P,L]
 </PRE></TD></TR></TABLE>
 
 <P>
-Then we write <tt>lb.pl</tt>:
+Then we write <CODE>lb.pl</CODE>:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 #!/path/to/perl
@@ -1145,13 +1146,13 @@ while (&lt;STDIN&gt;) {
 </PRE></TD></TR></TABLE>
 
 <P>
-A last notice: Why is this useful? Seems like <tt>www0.foo.com</tt> still is
+A last notice: Why is this useful? Seems like <CODE>www0.foo.com</CODE> still is
 overloaded? The answer is yes, it is overloaded, but with plain proxy
 throughput requests, only! All SSI, CGI, ePerl, etc. processing is completely
 done on the other machines. This is the essential point.
 
 <P>
-<li><b>Hardware/TCP Round-Robin</b>
+<li><STRONG>Hardware/TCP Round-Robin</STRONG>
 
 <P>
 There is a hardware solution available, too. Cisco has a beast called
@@ -1291,34 +1292,34 @@ boring, so a lot of webmaster don't use them.  Even Apache's Action handler
 feature for MIME-types is only appropriate when the CGI programs don't need
 special URLs (actually PATH_INFO and QUERY_STRINGS) as their input. 
 
-First, let us configure a new file type with extension <tt>.scgi</tt>
-(for secure CGI) which will be processed by the popular <tt>cgiwrap</tt>
+First, let us configure a new file type with extension <CODE>.scgi</CODE>
+(for secure CGI) which will be processed by the popular <CODE>cgiwrap</CODE>
 program. The problem here is that for instance we use a Homogeneous URL Layout
 (see above) a file inside the user homedirs has the URL
-<tt>/u/user/foo/bar.scgi</tt>. But <tt>cgiwrap</tt> needs the URL in the form
-<tt>/~user/foo/bar.scgi/</tt>. The following rule solves the problem:
+<CODE>/u/user/foo/bar.scgi</CODE>. But <CODE>cgiwrap</CODE> needs the URL in the form
+<CODE>/~user/foo/bar.scgi/</CODE>. The following rule solves the problem:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-RewriteRule ^/[uge]/<b>([^/]+)</b>/\.www/(.+)\.scgi(.*) ...
-... /internal/cgi/user/cgiwrap/~<b>$1</b>/$2.scgi$3  [NS,<b>T=application/x-http-cgi</b>]
+RewriteRule ^/[uge]/<STRONG>([^/]+)</STRONG>/\.www/(.+)\.scgi(.*) ...
+... /internal/cgi/user/cgiwrap/~<STRONG>$1</STRONG>/$2.scgi$3  [NS,<STRONG>T=application/x-http-cgi</STRONG>]
 </PRE></TD></TR></TABLE>
 
 <P>
 Or assume we have some more nifty programs:
-<tt>wwwlog</tt> (which displays the <tt>access.log</tt> for a URL subtree and
-<tt>wwwidx</tt> (which runs Glimpse on a URL subtree). We have to
+<CODE>wwwlog</CODE> (which displays the <CODE>access.log</CODE> for a URL subtree and
+<CODE>wwwidx</CODE> (which runs Glimpse on a URL subtree). We have to
 provide the URL area to these programs so they know on which area
 they have to act on. But usually this ugly, because they are all the
 times still requested from that areas, i.e. typically we would run
-the <tt>swwidx</tt> program from within <tt>/u/user/foo/</tt> via
+the <CODE>swwidx</CODE> program from within <CODE>/u/user/foo/</CODE> via
 hyperlink to
 
 <P><PRE>
 /internal/cgi/user/swwidx?i=/u/user/foo/
 </PRE><P>
 
-which is ugly. Because we have to hard-code <b>both</b> the location of the
-area <b>and</b> the location of the CGI inside the hyperlink. When we have to
+which is ugly. Because we have to hard-code <STRONG>both</STRONG> the location of the
+area <STRONG>and</STRONG> the location of the CGI inside the hyperlink. When we have to
 reorganise or area, we spend a lot of time changing the various hyperlinks.
 
 <P>
@@ -1333,10 +1334,10 @@ RewriteRule   ^/([uge])/([^/]+)(/?.*):log /internal/cgi/user/wwwlog?f=/$1/$2$3
 </PRE></TD></TR></TABLE>
 
 <P>
-Now the hyperlink to search at <tt>/u/user/foo/</tt> reads only
+Now the hyperlink to search at <CODE>/u/user/foo/</CODE> reads only
 
 <P><PRE>
-href="*"
+HREF="*"
 </PRE><P>
 
 which internally gets automatically transformed to 
@@ -1346,7 +1347,7 @@ which internally gets automatically transformed to
 </PRE><P>
 
 The same approach leads to an invocation for the access log CGI
-program when the hyperlink <tt>:log</tt> gets used.
+program when the hyperlink <CODE>:log</CODE> gets used.
 
 </DL>
 
@@ -1357,21 +1358,21 @@ program when the hyperlink <tt>:log</tt> gets used.
 <DL>
 <DT><STRONG>Description:</STRONG>
 <DD>
-How can we transform a static page <tt>foo.html</tt> into a dynamic variant
-<tt>foo.cgi</tt> in a seemless way, i.e.  without notice by the browser/user.
+How can we transform a static page <CODE>foo.html</CODE> into a dynamic variant
+<CODE>foo.cgi</CODE> in a seemless way, i.e.  without notice by the browser/user.
 
 <P>
 <DT><STRONG>Solution:</STRONG>
 <DD>
 We just rewrite the URL to the CGI-script and force the correct MIME-type so
 it gets really run as a CGI-script. This way a request to
-<tt>/~quux/foo.html</tt> internally leads to the invokation of
-<tt>/~quux/foo.cgi</tt>.
+<CODE>/~quux/foo.html</CODE> internally leads to the invokation of
+<CODE>/~quux/foo.cgi</CODE>.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine  on
 RewriteBase    /~quux/
-RewriteRule    ^foo\.<b>html</b>$  foo.<b>cgi</b>  [T=<b>application/x-httpd-cgi</b>]
+RewriteRule    ^foo\.<STRONG>html</STRONG>$  foo.<STRONG>cgi</STRONG>  [T=<STRONG>application/x-httpd-cgi</STRONG>]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -1384,10 +1385,10 @@ RewriteRule    ^foo\.<b>html</b>$  foo.<b>cgi</b>  [T=<b>application/x-httpd-cgi
 <DT><STRONG>Description:</STRONG>
 <DD>
 Here comes a really esoteric feature: Dynamically generated but statically
-served pages, i.e. pages should be delivered as pur static pages (read from
+served pages, i.e. pages should be delivered as pure static pages (read from
 the filesystem and just passed through), but they have to be generated
 dynamically by the webserver if missing. This way you can have CGI-generated
-pages which are statically unless one (or a cronjob) removes the static
+pages which are statically served unless one (or a cronjob) removes the static
 contents. Then the contents gets refreshed.
 
 <P>
@@ -1396,18 +1397,18 @@ contents. Then the contents gets refreshed.
 This is done via the following ruleset:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-RewriteCond %{REQUEST_FILENAME}   <b>!-s</b>
-RewriteCond ^page\.<b>html</b>$          page.<b>cgi</b>   [T=application/x-httpd-cgi,L]
+RewriteCond %{REQUEST_FILENAME}   <STRONG>!-s</STRONG>
+RewriteRule ^page\.<STRONG>html</STRONG>$          page.<STRONG>cgi</STRONG>   [T=application/x-httpd-cgi,L]
 </PRE></TD></TR></TABLE>
 
 <P>
-Here a request to <tt>page.html</tt> leads to a internal run of a
-corresponding <tt>page.cgi</tt> if <tt>page.html</tt> is still missing or has
-filesize null. The trick here is that <tt>page.cgi</tt> is a usual CGI script
+Here a request to <CODE>page.html</CODE> leads to a internal run of a
+corresponding <CODE>page.cgi</CODE> if <CODE>page.html</CODE> is still missing or has
+filesize null. The trick here is that <CODE>page.cgi</CODE> is a usual CGI script
 which (additionally to its STDOUT) writes its output to the file
-<tt>page.html</tt>. Once it was run, the server sends out the data of
-<tt>page.html</tt>. When the webmaster wants to force a refresh the contents,
-he just removes <tt>page.html</tt> (usually done by a cronjob).
+<CODE>page.html</CODE>. Once it was run, the server sends out the data of
+<CODE>page.html</CODE>. When the webmaster wants to force a refresh the contents,
+he just removes <CODE>page.html</CODE> (usually done by a cronjob).
 
 </DL>
 
@@ -1427,7 +1428,7 @@ our editor? Impossible?
 <DD>
 No! We just combine the MIME multipart feature, the webserver NPH feature and
 the URL manipulation power of mod_rewrite. First, we establish a new URL
-feature: Adding just <tt>:refresh</tt> to any URL causes this to be refreshed
+feature: Adding just <CODE>:refresh</CODE> to any URL causes this to be refreshed
 every time it gets updated on the filesystem.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
@@ -1563,7 +1564,7 @@ exit(0);
 <DL>
 <DT><STRONG>Description:</STRONG>
 <DD>
-The <tt>&lt;VirtualHost&gt;</tt> feature of Apache is nice and works great
+The <CODE>&lt;VirtualHost&gt;</CODE> feature of Apache is nice and works great
 when you just have a few dozens virtual hosts. But when you are an ISP and
 have hundreds of virtual hosts to provide this feature is not the best choice.
 
@@ -1646,14 +1647,14 @@ RewriteRule   ^/(.*)$   %1/$1  [E=VHOST:${lowercase:%{HTTP_HOST}}]
 <DT><STRONG>Description:</STRONG>
 <DD>
 How can we block a really annoying robot from retrieving pages of a specific
-webarea? A <tt>/robots.txt</tt> file containing entries of the "Robot
+webarea? A <CODE>/robots.txt</CODE> file containing entries of the "Robot
 Exclusion Protocol" is typically not enough to get rid of such a robot.
 
 <P>
 <DT><STRONG>Solution:</STRONG>
 <DD>
 We use a ruleset which forbids the URLs of the webarea
-<tt>/~quux/foo/arc/</tt> (perhaps a very deep directory indexed area where the
+<CODE>/~quux/foo/arc/</CODE> (perhaps a very deep directory indexed area where the
 robot traversal would create big server load).   We have to make sure that we
 forbid access only to the particular robot, i.e. just forbidding the host
 where the robot runs is not enough. This would block users from this host,
@@ -1661,9 +1662,9 @@ too. We accomplish this by also matching the User-Agent HTTP header
 information.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-RewriteCond %{HTTP_USER_AGENT}   ^<b>NameOfBadRobot</b>.*      
-RewriteCond %{REMOTE_ADDR}       ^<b>123\.45\.67\.[8-9]</b>$
-RewriteRule ^<b>/~quux/foo/arc/</b>.+   -   [<b>F</b>]
+RewriteCond %{HTTP_USER_AGENT}   ^<STRONG>NameOfBadRobot</STRONG>.*      
+RewriteCond %{REMOTE_ADDR}       ^<STRONG>123\.45\.67\.[8-9]</STRONG>$
+RewriteRule ^<STRONG>/~quux/foo/arc/</STRONG>.+   -   [<STRONG>F</STRONG>]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -1688,15 +1689,15 @@ can at least restrict the cases where the browser sends
 a HTTP Referer header.
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-RewriteCond %{HTTP_REFERER} <b>!^$</b>                                  
+RewriteCond %{HTTP_REFERER} <STRONG>!^$</STRONG>                                  
 RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
-RewriteRule <b>.*\.gif$</b>        -                                    [F]
+RewriteRule <STRONG>.*\.gif$</STRONG>        -                                    [F]
 </PRE></TD></TR></TABLE>
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteCond %{HTTP_REFERER}         !^$                                  
 RewriteCond %{HTTP_REFERER}         !.*/foo-with-gif\.html$
-RewriteRule <b>^inlined-in-foo\.gif$</b>   -                        [F]
+RewriteRule <STRONG>^inlined-in-foo\.gif$</STRONG>   -                        [F]
 </PRE></TD></TR></TABLE>
 
 </DL>
@@ -1766,19 +1767,19 @@ the Apache proxy?
 <DT><STRONG>Solution:</STRONG>
 <DD>
 We first have to make sure mod_rewrite is below(!) mod_proxy in the
-<tt>Configuration</tt> file when compiling the Apache webserver.  This way it
+<CODE>Configuration</CODE> file when compiling the Apache webserver.  This way it
 gets called _before_ mod_proxy. Then we configure the following for a
 host-dependend deny...
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-RewriteCond %{REMOTE_HOST} <b>^badhost\.mydomain\.com$</b
+RewriteCond %{REMOTE_HOST} <STRONG>^badhost\.mydomain\.com$</STRONG
 RewriteRule !^http://[^/.]\.mydomain.com.*  - [F]
 </PRE></TD></TR></TABLE>
 
 <P>...and this one for a user@host-dependend deny:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST}  <b>^badguy@badhost\.mydomain\.com$</b>
+RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST}  <STRONG>^badguy@badhost\.mydomain\.com$</STRONG>
 RewriteRule !^http://[^/.]\.mydomain.com.*  - [F]
 </PRE></TD></TR></TABLE>
 
@@ -1802,9 +1803,9 @@ when using the Basic Auth via mod_access).
 We use a list of rewrite conditions to exclude all except our friends:
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <b>!^friend1@client1.quux-corp\.com$</b
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <b>!^friend2</b>@client2.quux-corp\.com$ 
-RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <b>!^friend3</b>@client3.quux-corp\.com$ 
+RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <STRONG>!^friend1@client1.quux-corp\.com$</STRONG
+RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <STRONG>!^friend2</STRONG>@client2.quux-corp\.com$ 
+RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} <STRONG>!^friend3</STRONG>@client3.quux-corp\.com$ 
 RewriteRule ^/~quux/only-for-friends/      -                                 [F]
 </PRE></TD></TR></TABLE>
 
@@ -1878,8 +1879,8 @@ to put the resulting (usually rewritten) URL on STDOUT (same order!).
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
 RewriteEngine on
-RewriteMap    quux-map       <b>prg:</b>/path/to/map.quux.pl
-RewriteRule   ^/~quux/(.*)$  /~quux/<b>${quux-map:$1}</b>
+RewriteMap    quux-map       <STRONG>prg:</STRONG>/path/to/map.quux.pl
+RewriteRule   ^/~quux/(.*)$  /~quux/<STRONG>${quux-map:$1}</STRONG>
 </PRE></TD></TR></TABLE>
 
 <P><TABLE BGCOLOR="#E0E5F5" BORDER="0" CELLSPACING="0" CELLPADDING="5"><TR><TD><PRE>
@@ -1899,9 +1900,9 @@ while (&lt;&gt;) {
 
 <P>
 This is a demonstration-only example and just rewrites all URLs
-<tt>/~quux/foo/...</tt> to <tt>/~quux/bar/...</tt>. Actually you can program
-whatever you like. But notice that while such maps can be <b>used</b> also by
-an average user, only the system administrator can <b>define</b> it.
+<CODE>/~quux/foo/...</CODE> to <CODE>/~quux/bar/...</CODE>. Actually you can program
+whatever you like. But notice that while such maps can be <STRONG>used</STRONG> also by
+an average user, only the system administrator can <STRONG>define</STRONG> it.
 
 </DL>
 
index fdaedbd..9826fec 100644 (file)
@@ -29,6 +29,7 @@ always available.
 <UL>
 <LI><A HREF="#accessconfig">AccessConfig</A>
 <LI><A HREF="#accessfilename">AccessFileName</A>
+<LI><A HREF="#adddefaultcharset">AddDefaultCharset</A>
 <LI><A HREF="#addmodule">AddModule</A>
 <LI><A HREF="#allowoverride">AllowOverride</A>
 <LI><A HREF="#authname">AuthName</A>
@@ -169,6 +170,29 @@ for directives, unless they have been disabled with
 AllowOverride None<BR>
 &lt;/Directory&gt;</CODE></BLOCKQUOTE><P><HR>
 
+<H2><A NAME="adddefaultcharset">AddDefaultCharset directive</A></H2>
+<A HREF="directive-dict.html#Syntax" REL="Help"><STRONG>Syntax:</STRONG></A> 
+AddDefaultCharset <EM>Off / On / charset</EM><BR>
+<A HREF="directive-dict.html#Context" REL="Help" ><STRONG>Context:</STRONG></A> 
+all<BR>
+<A HREF="directive-dict.html#Status" REL="Help" ><STRONG>Status:</STRONG></A> 
+core<BR>
+<A HREF="directive-dict.html#Default" REL="Help"><STRONG>Default:</STRONG></A>
+<CODE>AddDefaultCharset Off</CODE><BR>
+<A HREF="directive-dict.html#Compatibility" REL="Help"><STRONG>Compatibility:
+</STRONG></A> AddDefaultCharset is only available in Apache 1.3.12 and 
+later<P>
+This directive specifies the name of the character set that will be added
+to any response that does not have any parameter on the content
+type in the HTTP headers. This will override any character set specified
+in the body of the document via a <CODE>META</CODE> tag. A setting
+of <CODE>AddDefaultCharset Off</CODE> disables this functionality.
+<CODE>AddDefaultCharset On</CODE> enables Apache's internal
+default charset of <code>iso-8859-1</code> as required by the
+directive. You can also specify an alternate charset to be used;
+e.g. <code>AddDefaultCharset utf-8</code>.
+<P><HR>
+
 <H2><A NAME="addmodule">AddModule directive</A></H2>
 <!--%plaintext &lt;?INDEX {\tt AddModule} directive&gt; -->
 <A
index e4bf012..6998803 100644 (file)
@@ -36,6 +36,8 @@ of the terms used in their descriptions available.
 <LI><A HREF="mod_autoindex.html#addalt">AddAlt</A>
 <LI><A HREF="mod_autoindex.html#addaltbyencoding">AddAltByEncoding</A>
 <LI><A HREF="mod_autoindex.html#addaltbytype">AddAltByType</A>
+<LI><A HREF="mod_mime.html#addcharset">AddCharset</A>
+<LI><A HREF="core.html#adddefaultcharset">AddDefaultCharset</A>
 <LI><A HREF="mod_autoindex.html#adddescription">AddDescription</A>
 <LI><A HREF="mod_mime.html#addencoding">AddEncoding</A>
 <LI><A HREF="mod_mime.html#addhandler">AddHandler</A>
index 944eb50..0e39b88 100644 (file)
@@ -95,15 +95,36 @@ Valid values are <CODE>bytes</CODE> for a count in bytes, or
 routine when printing dates.
 </DL>
 
+<A NAME="echo">
 <DT><STRONG>echo</STRONG>
 <DD>
 This command prints one of the include variables, defined below.
 If the variable is unset, it is printed as <CODE>(none)</CODE>.
 Any dates printed are subject to the currently configured <CODE>timefmt</CODE>.
+
 Attributes:
 <DL>
 <DT>var
 <DD>The value is the name of the variable to print.
+<DT>encoding 
+<DD>Specifies how Apache should encode special characters contained
+in the variable before outputting them.  If set to "none", no encoding
+will be done.  If set to "url", then URL encoding (also known as
+%-encoding; this is appropriate for use within URLs in links, etc.)
+will be performed.  At the start of an <CODE>echo</CODE> element,
+the default is set to "entity", resulting in entity encoding (which
+is appropriate in the context of a block-level HTML element, eg.
+a paragraph of text).  This can be changed by adding an
+<CODE>encoding</CODE> attribute, which will remain in effect until
+the next <CODE>encoding</CODE> attribute is encountered or the
+element ends, whichever comes first.  Note that the
+<CODE>encoding</CODE> attribute must <EM>precede</EM> the corresponding
+<CODE>var</CODE> attribute to be effective, and that only special
+characters as defined in the ISO-8859-1 character encoding will be
+encoded.  This encoding process may not have the desired result if
+a different character encoding is in use.
+Apache 1.3.12 and above; previous versions do no encoding.
+
 </DL>
 
 <DT><STRONG>exec</STRONG>
@@ -187,7 +208,9 @@ output. Thus included files can be nested.
 
 <DT><STRONG>printenv</STRONG>
 <DD>This prints out a listing of all existing variables and their values.
-    No attributes.
+   Starting with Apache 1.3.12, special characters are entity encoded (see the 
+   <A HREF="#echo"><CODE>echo</CODE></A> element for details) before being
+   output.  No attributes.
 <DD>For example: <CODE>&lt;!--#printenv --&gt;</CODE>
 <DD>Apache 1.2 and above.
 
index 957921b..ebfb84d 100644 (file)
@@ -145,12 +145,12 @@ Example:
 </pre>
 
 <P>
-Then the document <samp>xxxx.ja.jis</samp> will be treated as being a
+Then the document <CODE>xxxx.ja.jis</CODE> will be treated as being a
 Japanese document whose charset is ISO-2022-JP (as will the document
-<samp>xxxx.jis.ja</samp>). Although the content charset is reported to
-the client, the browser is unlikely to use this information. The
-AddCharset directive is more useful for
-<A HREF="../content-negotiation.html">content negotiation</A>, where
+<CODE>xxxx.jis.ja</CODE>). The AddCharset directive is useful for both
+to inform the client about the character encoding of the document so
+that the document can be interpreted and displayed appropriately, and
+for <A HREF="../content-negotiation.html">content negotiation</A>, where
 the server returns one from several documents based on the client's
 charset preference.
 </P>
index efbe657..e4397f9 100644 (file)
@@ -87,13 +87,13 @@ matching.
 <P>
 This module operates on the full URLs (including the path-info part) both in
 per-server context (<CODE>httpd.conf</CODE>) and per-directory context
-(<CODE>.htaccess</CODE>) and even can generate query-string parts on result.
+(<CODE>.htaccess</CODE>) and can even generate query-string parts on result.
 The rewritten result can lead to internal sub-processing, external request
 redirection or even to an internal proxy throughput.
 
 <P>
 But all this functionality and flexibility has its drawback: complexity. So
-don't expect to understand this module in its whole in just one day.
+don't expect to understand this entire module in just one day.
 
 <P>
 This module was invented and originally written in April 1996<BR>
@@ -158,46 +158,46 @@ you exploit its full functionality.
 First you have to understand that when Apache processes a HTTP request it does
 this in phases. A hook for each of these phases is provided by the Apache API.
 Mod_rewrite uses two of these hooks: the URL-to-filename translation hook
-which is used after the HTTP request was read and before any authorization
+which is used after the HTTP request has been read but before any authorization
 starts and the Fixup hook which is triggered after the authorization phases
-and after the per-directory config files (<CODE>.htaccess</CODE>) where read,
-but before the content handler is activated.
+and after the per-directory config files (<CODE>.htaccess</CODE>) have been 
+read, but before the content handler is activated.
 
 <P>
 So, after a request comes in and Apache has determined the corresponding
-server (or virtual server) the rewriting engine start processing of all
+server (or virtual server) the rewriting engine starts processing of all
 mod_rewrite directives from the per-server configuration in the
 URL-to-filename phase. A few steps later when the final data directories are
 found, the per-directory configuration directives of mod_rewrite are triggered
-in the Fixup phase. In both situations mod_rewrite either rewrites URLs to new
+in the Fixup phase. In both situations mod_rewrite rewrites URLs either to new
 URLs or to filenames, although there is no obvious distinction between them.
-This is a usage of the API which was not intended this way when the API
+This is a usage of the API which was not intended to be this way when the API
 was designed, but as of Apache 1.x this is the only way mod_rewrite can
 operate. To make this point more clear remember the following two points:
 
 <OL>
-<LI>The API currently provides only a URL-to-filename hook. Although
-    mod_rewrite rewrites URLs to URLs, URLs to filenames and even
-    filenames to filenames. In Apache 2.0 the two missing hooks 
-    will be added to make the processing more clear. But this
-    point has no drawbacks for the user, it is just a fact which
-    should be remembered: Apache does more in the URL-to-filename hook
-    then the API intends for it.
+<LI>Although mod_rewrite rewrites URLs to URLs, URLs to filenames and
+    even filenames to filenames, the API currently provides only a
+    URL-to-filename hook.  In Apache 2.0 the two missing hooks will be
+    added to make the processing more clear. But this point has no
+    drawbacks for the user, it is just a fact which should be
+    remembered: Apache does more in the URL-to-filename hook than the
+    API intends for it.
 <P>
 <LI>Unbelievably mod_rewrite provides URL manipulations in per-directory
-    context, <EM>i.e.</EM>, within <CODE>.htaccess</CODE> files, although
-    these are
-    reached a very long time after the URLs were translated to filenames (this
-    has to be this way, because <CODE>.htaccess</CODE> files stay in the
-    filesystem, so processing has already been reached this stage of
-    processing). In other words: According to the API phases at this time it
-    is too late for any URL manipulations.  To overcome this chicken and egg
-    problem mod_rewrite uses a trick: When you manipulate a URL/filename in
-    per-directory context mod_rewrite first rewrites the filename back to its
-    corresponding URL (which it usually impossible, but see the
-    <CODE>RewriteBase</CODE> directive below for the trick to achieve this)
-    and then initiates a new internal sub-request with the new URL. This leads
-    to a new processing of the API phases from the beginning. 
+    context, <EM>i.e.</EM>, within <CODE>.htaccess</CODE> files,
+    although these are reached a very long time after the URLs have
+    been translated to filenames.  It has to be this way because
+    <CODE>.htaccess</CODE> files live in the filesystem, so processing
+    has already reached this stage.  In other words: According to the
+    API phases at this time it is too late for any URL manipulations.
+    To overcome this chicken and egg problem mod_rewrite uses a trick:
+    When you manipulate a URL/filename in per-directory context
+    mod_rewrite first rewrites the filename back to its corresponding
+    URL (which is usually impossible, but see the <CODE>RewriteBase</CODE>
+    directive below for the trick to achieve this) and then initiates
+    a new internal sub-request with the new URL. This restarts
+    processing of the API phases.
     <P>
     Again mod_rewrite tries hard to make this complicated step totally
     transparent to the user, but you should remember here: While URL
@@ -214,21 +214,21 @@ Don't forget these two points!
 
 Now when mod_rewrite is triggered in these two API phases, it reads the
 configured rulesets from its configuration structure (which itself was either
-created on startup for per-server context or while the directory walk of the
+created on startup for per-server context or during the directory walk of the
 Apache kernel for per-directory context).  Then the URL rewriting engine is
 started with the contained ruleset (one or more rules together with their
 conditions). The operation of the URL rewriting engine itself is exactly the
-same for both configuration contexts. Just the final result processing is
+same for both configuration contexts. Only the final result processing is
 different.
 
 <P>
 The order of rules in the ruleset is important because the rewriting engine
-processes them in a special order. And this order is not very obvious. The
+processes them in a special (and not very obvious) order.  The
 rule is this: The rewriting engine loops through the ruleset rule by rule
-(<CODE>RewriteRule</CODE> directives!) and when a particular rule matched it
+(<CODE>RewriteRule</CODE> directives) and when a particular rule matches it
 optionally loops through existing corresponding conditions
-(<CODE>RewriteCond</CODE> directives). Because of historical reasons the 
-conditions are given first, the control flow is a little bit winded. See
+(<CODE>RewriteCond</CODE> directives).  For historical reasons the conditions 
+are given first, and so the control flow is a little bit long-winded. See
 Figure 1 for more details.
 
 <P>
@@ -251,29 +251,29 @@ Figure 1 for more details.
 <P>
 As you can see, first the URL is matched against the <EM>Pattern</EM> of each
 rule. When it fails mod_rewrite immediately stops processing this rule and
-continues with the next rule. If the <EM>Pattern</EM> matched, mod_rewrite
+continues with the next rule. If the <EM>Pattern</EM> matches, mod_rewrite
 looks for corresponding rule conditions. If none are present, it just
 substitutes the URL with a new value which is constructed from the string
-<EM>Substitution</EM> and goes on with its rule-looping. But
-if conditions exists, it starts an inner loop for processing them in order
-they are listed. For conditions the logic is different: We don't match a
+<EM>Substitution</EM> and goes on with its rule-looping. But if conditions
+exist, it starts an inner loop for processing them in the order that
+they are listed. For conditions the logic is different: we don't match a
 pattern against the current URL. Instead we first create a string
 <EM>TestString</EM> by expanding variables, back-references, map lookups,
 <EM>etc.</EM> and then we try to match <EM>CondPattern</EM> against it. If the
 pattern doesn't match, the complete set of conditions and the corresponding
 rule fails.  If the pattern matches, then the next condition is processed
-until no more condition is available. If all conditions matched processing is
-continued with the substitution of the URL with <EM>Substitution</EM>.
+until no more conditions are available. If all conditions match, processing
+is continued with the substitution of the URL with <EM>Substitution</EM>.
 
 <H2><A NAME="InternalBackRefs">Regex Back-Reference Availability</A></H2>
 
 One important thing here has to be remembered: Whenever you
-use parenthesis in <EM>Pattern</EM> or in one of the <EM>CondPattern</EM>
-back-reference are internally created which can be used with the
-strings <CODE>$N</CODE> and <CODE>%N</CODE> (see below). And these
+use parentheses in <EM>Pattern</EM> or in one of the <EM>CondPattern</EM>
+back-references are internally created which can be used with the
+strings <CODE>$N</CODE> and <CODE>%N</CODE> (see below). These
 are available for creating the strings <EM>Substitution</EM> and
-<EM>TestCond</EM>. Figure 2 shows at which locations the back-references are
-transfered to for expansion.
+<EM>TestCond</EM>. Figure 2 shows to which locations the back-references are
+transfered for expansion.
 
 <P>
 <DIV ALIGN=CENTER>
@@ -293,7 +293,7 @@ transfered to for expansion.
 </DIV>
 
 <P>
-We know, this was a crash course of mod_rewrite's internal processing.  But
+We know this was a crash course on mod_rewrite's internal processing.  But
 you will benefit from this knowledge when reading the following documentation
 of the available directives.
 
@@ -348,12 +348,12 @@ environment variables.
 
 <P>
 Use this directive to disable the module instead of commenting out
-all <CODE>RewriteRule</CODE> directives!
+all the <CODE>RewriteRule</CODE> directives!
 
 <P>
 Note that, by default, rewrite configurations are not inherited.
 This means that you need to have a <CODE>RewriteEngine on</CODE>
-directive for each virtual host you wish to use it in.
+directive for each virtual host in which you wish to use it.
 
 <P>
 <HR NOSHADE SIZE=1>
@@ -399,9 +399,9 @@ strings can be one of the following:
 <LI>'<STRONG><CODE>inherit</CODE></STRONG>'<BR>
     This forces the current configuration to inherit the configuration of the
     parent. In per-virtual-server context this means that the maps,
-    conditions and rules of the main server gets inherited. In per-directory
+    conditions and rules of the main server are inherited. In per-directory
     context this means that conditions and rules of the parent directory's
-    <CODE>.htaccess</CODE> configuration gets inherited.
+    <CODE>.htaccess</CODE> configuration are inherited.
 </UL>
 
 <P>
@@ -448,10 +448,10 @@ config.
 <P>
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
-<STRONG>Notice</STRONG>: To disable the logging of rewriting actions it is
+<STRONG>Note</STRONG>: To disable the logging of rewriting actions it is
 not recommended to set <EM>Filename</EM>
 to <CODE>/dev/null</CODE>, because although the rewriting engine does
-not create output to a logfile it still creates the logfile
+not then output to a logfile it still creates the logfile
 output internally. <STRONG>This will slow down the server with no advantage
 to the administrator!</STRONG>
 To disable logging either remove or comment out the
@@ -514,7 +514,7 @@ RewriteLog "/usr/local/var/apache/logs/rewrite.log"
 ><STRONG>Compatibility:</STRONG></A> Apache 1.2<BR>
 
 <P>
-The <CODE>RewriteLogLevel</CODE> directive set the verbosity level of the
+The <CODE>RewriteLogLevel</CODE> directive sets the verbosity level of the
 rewriting
 logfile.  The default level 0 means no logging, while 9 or more means
 that practically all actions are logged.
@@ -527,9 +527,8 @@ This disables all rewrite action logs.
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
 <STRONG>Notice:</STRONG> Using a high value for <EM>Level</EM> will slow down
-your Apache
-server dramatically! Use the rewriting logfile only for debugging or at least
-at <EM>Level</EM> not greater than 2!
+your Apache server dramatically! Use the rewriting logfile at
+a <EM>Level</EM> greater than 2 only for debugging!
 </TD></TR>
 </TABLE>
 
@@ -581,7 +580,7 @@ This directive sets the filename for a synchronization lockfile which
 mod_rewrite needs to communicate with <SAMP>RewriteMap</SAMP>
 <EM>programs</EM>. Set this lockfile to a local path (not on a NFS-mounted
 device) when you want to use a rewriting map-program. It is not required for
-all other types of rewriting maps.
+other types of rewriting maps.
 
 <P>
 <HR NOSHADE SIZE=1>
@@ -640,7 +639,7 @@ When such a construct occurs the map <EM>MapName</EM>
 is consulted and the key <EM>LookupKey</EM> is looked-up. If the key is
 found, the map-function construct is substituted by <EM>SubstValue</EM>. If
 the key is not found then it is substituted by <EM>DefaultValue</EM> or
-the empty string if no <EM>DefaultValue</EM> was specified.
+by the empty string if no <EM>DefaultValue</EM> was specified.
 
 <P>
 The following combinations for <EM>MapType</EM> and <EM>MapSource</EM>
@@ -689,8 +688,8 @@ RewriteMap real-to-user txt:/path/to/file/map.txt
     special
     post-processing feature: After looking up a value it is parsed according
     to contained ``<CODE>|</CODE>'' characters which have the meaning of
-    ``or''.  Or
-    in other words: they indicate a set of alternatives from which the actual
+    ``or''.
+    In other words they indicate a set of alternatives from which the actual
     returned value is chosen randomly. Although this sounds crazy and useless,
     it
     was actually designed for load balancing in a reverse proxy situation where
@@ -767,13 +766,13 @@ close(TXT)</PRE></TD></TR>
     MapType: <CODE>prg</CODE>, MapSource: Unix filesystem path to valid
     regular file
     <P>
-    Here the source is a Unix program, not a map file. To create it you can use
-    the language of your choice, but the result has to be a run-able Unix
+    Here the source is a program, not a map file. To create it you
+    can use the language of your choice, but the result has to be a
     executable (<EM>i.e.</EM>, either object-code or a script with the
-    magic cookie trick '<CODE>#!/path/to/interpreter</CODE>' as the first
-    line).
+    magic cookie trick '<CODE>#!/path/to/interpreter</CODE>' as the
+    first line).
     <P>
-    This program gets started once at startup of the Apache servers and then
+    This program is started once at startup of the Apache servers and then
     communicates with the rewriting engine over its <CODE>stdin</CODE> and
     <CODE>stdout</CODE> file-handles.  For each map-function lookup it will
     receive the key to lookup as a newline-terminated string on
@@ -789,8 +788,7 @@ close(TXT)</PRE></TD></TR>
 #!/usr/bin/perl
 $| = 1;
 while (&lt;STDIN&gt;) {
-    # ...here any transformations
-    # or lookups should occur...
+    # ...put here any transformations or lookups...
     print $_;
 }
 </PRE></TD></TR>
@@ -798,15 +796,15 @@ while (&lt;STDIN&gt;) {
     <P>
     But be very careful:<BR>
     <OL>
-    <LI>``<EM>Keep the program simple, stupid</EM>'' (KISS), because
-        if this program hangs it will lead to a hang of the Apache server
+    <LI>``<EM>Keep it simple, stupid</EM>'' (KISS), because
+        if this program hangs it will hang the Apache server
         when the rule occurs.
     <LI>Avoid one common mistake: never do buffered I/O on <CODE>stdout</CODE>!
         This will cause a deadloop! Hence the ``<CODE>$|=1</CODE>'' in the
         above example...
     <LI>Use the <SAMP>RewriteLock</SAMP> directive to define a lockfile
         mod_rewrite can use to synchronize the communication to the program.
-        Per default no such synchronization takes place.
+        By default no such synchronization takes place.
     </OL>
 </UL>
 
@@ -819,7 +817,7 @@ this map in per-directory context.
 <P>
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
-<STRONG>Notice:</STRONG> For plain text and DBM format files the looked-up
+<STRONG>Note:</STRONG> For plain text and DBM format files the looked-up
 keys are cached in-core
 until the <CODE>mtime</CODE> of the mapfile changes or the server does a
 restart. This way you can have map-functions in rules which are used
@@ -869,15 +867,15 @@ per-directory rewrites. As you will see below, <CODE>RewriteRule</CODE> can be
 used in per-directory config files (<CODE>.htaccess</CODE>). There it will act
 locally, <EM>i.e.</EM>, the local directory prefix is stripped at this stage of
 processing and your rewriting rules act only on the remainder. At the end
-it is automatically added.
+it is automatically added back to the path.
 
 <P>
 When a substitution occurs for a new URL, this module has to re-inject the URL
 into the server processing. To be able to do this it needs to know what the
 corresponding URL-prefix or URL-base is. By default this prefix is the
 corresponding filepath itself. <STRONG>But at most websites URLs are
-<STRONG>NOT</STRONG> directly related to physical filename paths, so this
-assumption will be usually be wrong!</STRONG> There you have to use the
+NOT directly related to physical filename paths, so this
+assumption will usually be wrong!</STRONG> There you have to use the
 <CODE>RewriteBase</CODE> directive to specify the correct URL-prefix.
 
 <P>
@@ -908,7 +906,7 @@ directives.
 
 RewriteEngine On
 
-#  let the server know that we are reached via /xyz and not
+#  let the server know that we were reached via /xyz and not
 #  via the physical path prefix /abc/def
 RewriteBase   /xyz
 
@@ -926,7 +924,7 @@ rewritten to the physical file <CODE>/abc/def/newstuff.html</CODE>.
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
 <FONT SIZE=-1>
-<STRONG>Notice - For the Apache hackers:</STRONG><BR>
+<STRONG>Note - For Apache hackers:</STRONG><BR>
 The following list gives detailed information about the internal
 processing steps:
 
@@ -949,7 +947,7 @@ This seems very complicated but is the correct Apache internal processing,
 because the per-directory rewriting comes too late in the process.  So,
 when it occurs the (rewritten) request has to be re-injected into the Apache
 kernel! BUT: While this seems like a serious overhead, it really isn't, because
-this re-injection happens fully internal to the Apache server and the same
+this re-injection happens fully internally to the Apache server and the same
 procedure is used by many other operations inside Apache. So, you can be
 sure the design and implementation is correct.
 </FONT>
@@ -1028,7 +1026,7 @@ the form
 <CODE>%N</CODE>
 </STRONG></BLOCKQUOTE>
 
-(1 &lt;= N &lt;= 9) which provide access to the grouped parts (parenthesis!) of
+(1 &lt;= N &lt;= 9) which provide access to the grouped parts (parentheses!) of
 the pattern from the last matched <CODE>RewriteCond</CODE> directive in the
 current bunch of conditions.
 
@@ -1041,7 +1039,7 @@ current bunch of conditions.
 </STRONG></BLOCKQUOTE>
 
 where <EM>NAME_OF_VARIABLE</EM> can be a string
-of the following list:
+taken from the following list:
 
 <P>
 <TABLE BGCOLOR="#F0F0F0" CELLSPACING=0 CELLPADDING=5>
@@ -1120,7 +1118,7 @@ IS_SUBREQ<BR>
 <P>
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
-<STRONG>Notice:</STRONG> These variables all correspond to the similar named
+<STRONG>Notice:</STRONG> These variables all correspond to the similarly named
 HTTP MIME-headers, C variables of the Apache server or <CODE>struct tm</CODE>
 fields of the Unix system.
 </TD></TR>
@@ -1157,7 +1155,7 @@ is the value of the HTTP header ``<CODE>Proxy-Connection:</CODE>''.
 <LI>There is the special format <CODE>%{LA-U:variable}</CODE> for look-aheads
 which perform an internal (URL-based) sub-request to determine the final value
 of <EM>variable</EM>. Use this when you want to use a variable for rewriting
-which actually is set later in an API phase and thus is not available at the
+which is actually set later in an API phase and thus is not available at the
 current stage. For instance when you want to rewrite according to the
 <CODE>REMOTE_USER</CODE> variable from within the per-server context
 (<CODE>httpd.conf</CODE> file) you have to use <CODE>%{LA-U:REMOTE_USER}</CODE>
@@ -1169,16 +1167,16 @@ authorization phases come <EM>before</EM> this phase, you just can use
 <CODE>%{REMOTE_USER}</CODE> there.
 
 <P>
-<LI>There is the special format: <CODE>%{LA-F:variable}</CODE> which perform an
+<LI>There is the special format: <CODE>%{LA-F:variable}</CODE> which performs an
 internal (filename-based) sub-request to determine the final value of
-<EM>variable</EM>. This is the most of the time the same as LA-U above.
+<EM>variable</EM>. Most of the time this is the same as LA-U above.
 </OL>
 
 <P>
 <EM>CondPattern</EM> is the condition pattern, <EM>i.e.</EM>, a regular
 expression
-which gets applied to the current instance of the <EM>TestString</EM>,
-<EM>i.e.</EM>, <EM>TestString</EM> gets evaluated and then matched against
+which is applied to the current instance of the <EM>TestString</EM>,
+<EM>i.e.</EM>, <EM>TestString</EM> is evaluated and then matched against
 <EM>CondPattern</EM>.
 
 <P>
@@ -1186,7 +1184,7 @@ which gets applied to the current instance of the <EM>TestString</EM>,
 <EM>Extended Regular Expression</EM> with some additions:
 
 <OL>
-<LI>You can precede the pattern string with a '<CODE>!</CODE>' character
+<LI>You can prefix the pattern string with a '<CODE>!</CODE>' character
 (exclamation mark) to specify a <STRONG>non</STRONG>-matching pattern.
 
 <P>
@@ -1195,23 +1193,23 @@ There are some special variants of <EM>CondPatterns</EM>. Instead of real
 regular expression strings you can also use one of the following:
 <P>
 <UL>
-<LI>'<STRONG>&lt;CondPattern</STRONG>' (is lexicographically lower)<BR>
+<LI>'<STRONG>&lt;CondPattern</STRONG>' (is lexically lower)<BR>
 Treats the <EM>CondPattern</EM> as a plain string and compares it
-lexicographically to <EM>TestString</EM> and results in a true expression if
-<EM>TestString</EM> is lexicographically lower than <EM>CondPattern</EM>.
+lexically to <EM>TestString</EM>. True if
+<EM>TestString</EM> is lexically lower than <EM>CondPattern</EM>.
 <P>
-<LI>'<STRONG>&gt;CondPattern</STRONG>' (is lexicographically greater)<BR>
+<LI>'<STRONG>&gt;CondPattern</STRONG>' (is lexically greater)<BR>
 Treats the <EM>CondPattern</EM> as a plain string and compares it
-lexicographically to <EM>TestString</EM> and results in a true expression if
-<EM>TestString</EM> is lexicographically greater than <EM>CondPattern</EM>.
+lexically to <EM>TestString</EM>. True if
+<EM>TestString</EM> is lexically greater than <EM>CondPattern</EM>.
 <P>
-<LI>'<STRONG>=CondPattern</STRONG>' (is lexicographically equal)<BR>
+<LI>'<STRONG>=CondPattern</STRONG>' (is lexically equal)<BR>
 Treats the <EM>CondPattern</EM> as a plain string and compares it
-lexicographically to <EM>TestString</EM> and results in a true expression if
-<EM>TestString</EM> is lexicographically equal to <EM>CondPattern</EM>, i.e the
+lexically to <EM>TestString</EM>. True if
+<EM>TestString</EM> is lexically equal to <EM>CondPattern</EM>, i.e the
 two strings are exactly equal (character by character).
 If <EM>CondPattern</EM> is just <SAMP>""</SAMP> (two quotation marks) this
-compares <EM>TestString</EM> against the empty string.
+compares <EM>TestString</EM> to the empty string.
 <P>
 <LI>'<STRONG>-d</STRONG>' (is <STRONG>d</STRONG>irectory)<BR>
 Treats the <EM>TestString</EM> as a pathname and
@@ -1246,7 +1244,7 @@ your server's performance!
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
 <STRONG>Notice:</STRONG>
-All of these tests can also be prefixed by a not ('!') character
+All of these tests can also be prefixed by an exclamation mark ('!')
 to negate their meaning.
 </TD></TR>
 </TABLE>
@@ -1264,7 +1262,7 @@ is a comma-separated list of the following flags:
 
 <UL>
 <LI>'<STRONG><CODE>nocase|NC</CODE></STRONG>' (<STRONG>n</STRONG>o <STRONG>c</STRONG>ase)<BR>
-    This makes the condition test case-insensitive, <EM>i.e.</EM>, there is
+    This makes the test case-insensitive, <EM>i.e.</EM>, there is
     no difference between 'A-Z' and 'a-z' both in the expanded
     <EM>TestString</EM> and the <EM>CondPattern</EM>.
 <P>
@@ -1278,7 +1276,7 @@ RewriteCond %{REMOTE_HOST}  ^host2.*  [OR]
 RewriteCond %{REMOTE_HOST}  ^host3.*
 RewriteRule ...some special stuff for any of these hosts...
 </PRE></BLOCKQUOTE>
-    Without this flag you had to write down the cond/rule three times.
+    Without this flag you would have to write the cond/rule three times.
 </UL>
 
 <P>
@@ -1347,12 +1345,13 @@ rewriting rule.  The <STRONG>definition order</STRONG> of these rules is
 run-time.
 
 <P>
-<A NAME="patterns"><EM>Pattern</EM></A> can be (for Apache 1.1.x a System
-V8 and for Apache 1.2.x a POSIX) <A NAME="regexp">regular expression</A>
-which gets applied to the current URL. Here ``current'' means the value of the
-URL when this rule gets applied. This may not be the original requested
-URL, because there could be any number of rules before which already matched
-and made alterations to it.
+<A NAME="patterns"><EM>Pattern</EM></A> can be (for Apache
+1.1.x a System V8 and for Apache 1.2.x and later a POSIX) <A
+NAME="regexp">regular expression</A> which gets applied to the current
+URL. Here ``current'' means the value of the URL when this rule gets
+applied. This may not be the originally requested URL, because no
+longer existingany number of rules may already have matched and made
+alterations to it.
 
 <P>
 Some hints about the syntax of regular expressions:
@@ -1370,7 +1369,7 @@ Some hints about the syntax of regular expressions:
 
 <STRONG>Quantifiers:</STRONG>
   <STRONG><CODE>?</CODE></STRONG>           0 or 1 of the preceding text
-  <STRONG><CODE>*</CODE></STRONG>           0 or N of the preceding text (N &gt; 1)
+  <STRONG><CODE>*</CODE></STRONG>           0 or N of the preceding text (N &gt; 0)
   <STRONG><CODE>+</CODE></STRONG>           1 or N of the preceding text (N &gt; 1)
 
 <STRONG>Grouping:</STRONG>
@@ -1394,8 +1393,8 @@ Some hints about the syntax of regular expressions:
 <P>
 For more information about regular expressions either have a look at your
 local regex(3) manpage or its <CODE>src/regex/regex.3</CODE> copy in the
-Apache 1.3 distribution.  When you are interested in more detailed and deeper
-information about regular expressions and its variants (POSIX regex, Perl
+Apache 1.3 distribution.  If you are interested in more detailed
+information about regular expressions and their variants (POSIX regex, Perl
 regex, <EM>etc.</EM>) have a look at the following dedicated book on this topic: 
 
 <BLOCKQUOTE>
@@ -1409,9 +1408,9 @@ ISBN 1-56592-257-3<BR>
 <P>
 Additionally in mod_rewrite the NOT character ('<CODE>!</CODE>') is a possible
 pattern prefix. This gives you the ability to negate a pattern; to say, for
-instance: ``<EM>if the current URL does <STRONG>NOT</STRONG> match to this
-pattern</EM>''. This can be used for special cases where it is better to match
-the negative pattern or as a last default rule.
+instance: ``<EM>if the current URL does <STRONG>NOT</STRONG> match this
+pattern</EM>''. This can be used for exceptional cases, where it is easier to
+match the negative pattern, or as a last default rule.
 
 <P>
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
@@ -1448,8 +1447,8 @@ the above list.
 As already mentioned above, all the rewriting rules are applied to the
 <EM>Substitution</EM> (in the order of definition in the config file).  The
 URL is <STRONG>completely replaced</STRONG> by the <EM>Substitution</EM> and the
-rewriting process goes on until there are no more rules (unless explicitly
-terminated by a <CODE><STRONG>L</STRONG></CODE> flag - see below).
+rewriting process goes on until there are no more rules unless explicitly
+terminated by a <CODE><STRONG>L</STRONG></CODE> flag - see below.
 
 <P>
 There is a special substitution string named '<CODE>-</CODE>' which means:
@@ -1468,7 +1467,7 @@ substitution string with just the question mark.
 <P>
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
-<STRONG>Notice</STRONG>: There is a special feature. When you prefix a substitution
+<STRONG>Note</STRONG>: There is a special feature: When you prefix a substitution
 field with <CODE>http://</CODE><EM>thishost</EM>[<EM>:thisport</EM>] then
 <STRONG>mod_rewrite</STRONG> automatically strips it out.   This auto-reduction on
 implicit external redirect URLs is a useful and important feature when
@@ -1508,14 +1507,14 @@ comma-separated list of the following flags:
     one of the following symbolic names: <CODE>temp</CODE> (default), <CODE>permanent</CODE>,
     <CODE>seeother</CODE>.
     Use it for rules which should
-    canonicalize the URL and gives it back to the client, <EM>e.g.</EM>, translate
+    canonicalize the URL and give it back to the client, <EM>e.g.</EM>, translate
     ``<CODE>/~</CODE>'' into ``<CODE>/u/</CODE>'' or always append a slash to
     <CODE>/u/</CODE><EM>user</EM>, etc.<BR>
     <P>
-    <STRONG>Notice:</STRONG> When you use this flag, make sure that the
+    <STRONG>Note:</STRONG> When you use this flag, make sure that the
     substitution field is a valid URL! If not, you are redirecting to an
     invalid location!  And remember that this flag itself only prefixes the
-    URL with <CODE>http://thishost[:thisport]/</CODE>, but rewriting goes on.
+    URL with <CODE>http://thishost[:thisport]/</CODE>, rewriting continues.
     Usually you also want to stop and do the redirection immediately.  To stop
     the rewriting you also have to provide the 'L' flag.
 <P>
@@ -1526,8 +1525,8 @@ comma-separated list of the following flags:
 <P>
 <LI>'<STRONG><CODE>gone|G</CODE></STRONG>' (force URL to be <STRONG>g</STRONG>one)<BR>
     This forces the current URL to be gone, <EM>i.e.</EM>, it immediately sends back a
-    HTTP response of 410 (GONE). Use this flag to mark no longer existing
-    pages as gone.
+    HTTP response of 410 (GONE). Use this flag to mark pages which no longer
+    exist as gone.
 <P>
 <LI>'<STRONG><CODE>proxy|P</CODE></STRONG>' (force <STRONG>p</STRONG>roxy)<BR>
     This flag forces the substitution part to be internally forced as a proxy
@@ -1552,7 +1551,7 @@ comma-separated list of the following flags:
     don't apply any more rewriting rules. This corresponds to the Perl
     <CODE>last</CODE> command or the <CODE>break</CODE> command from the C
     language. Use this flag to prevent the currently rewritten URL from being
-    rewritten further by following rules which may be wrong. For
+    rewritten further by following rules. For
     example, use it to rewrite the root-path URL ('<CODE>/</CODE>') to a real
     one, <EM>e.g.</EM>, '<CODE>/e/www/</CODE>'.
 <P>
@@ -1563,11 +1562,11 @@ comma-separated list of the following flags:
     <CODE>next</CODE> command or the <CODE>continue</CODE> command from the C
     language. Use this flag to restart the rewriting process, <EM>i.e.</EM>,  to
     immediately go to the top of the loop. <BR>
-    <STRONG>But be careful not to create a deadloop!</STRONG>
+    <STRONG>But be careful not to create an infinite loop!</STRONG>
 <P>
 <LI>'<STRONG><CODE>chain|C</CODE></STRONG>' (<STRONG>c</STRONG>hained with next rule)<BR>
     This flag chains the current rule with the next rule (which itself can
-    also be chained with its following rule, <EM>etc.</EM>). This has the following
+    be chained with the following rule, <EM>etc.</EM>). This has the following
     effect: if a rule matches, then processing continues as usual, <EM>i.e.</EM>, the
     flag has no effect. If the rule does <STRONG>not</STRONG> match, then all following
     chained rules are skipped.   For instance, use it to remove the
@@ -1628,7 +1627,7 @@ comma-separated list of the following flags:
     translator should do. Then <CODE>mod_alias</CODE> comes and tries to do a
     URI-to-filename transition which will not work.
     <P>
-    Notice: <STRONG>You have to use this flag if you want to intermix directives
+    Note: <STRONG>You have to use this flag if you want to intermix directives
     of different modules which contain URL-to-filename translators</STRONG>. The
     typical example is the use of <CODE>mod_alias</CODE> and
     <CODE>mod_rewrite</CODE>..
@@ -1636,12 +1635,12 @@ comma-separated list of the following flags:
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
 <font size=-1>
-    <STRONG>Notice - For the Apache hackers:</STRONG><BR>
+    <STRONG>Note - For Apache hackers:</STRONG><BR>
     If the current Apache API had a
     filename-to-filename hook additionally to the URI-to-filename hook then
     we wouldn't need this flag!  But without  such a hook this flag is the
     only solution. The Apache Group has discussed this problem and will
-    add such hooks into Apache version 2.0.
+    add such a hook in Apache version 2.0.
 </FONT>
 </TD></TR>
 </TABLE>
@@ -1650,7 +1649,7 @@ comma-separated list of the following flags:
     This flag forces the rewriting engine to skip the next <EM>num</EM> rules
     in sequence when the current rule matches. Use this to make pseudo
     if-then-else constructs: The last rule of the then-clause becomes
-    <CODE>skip=N</CODE> where N is the number of rules in the else-clause.
+    <CODE>skip=N</CODE> where N is the number of rules in the else-clause.
     (This is <STRONG>not</STRONG> the same as the 'chain|C' flag!)
 <P>
 <LI>'<STRONG><CODE>env|E=</CODE></STRONG><EM>VAR</EM>:<EM>VAL</EM>' (set <STRONG>e</STRONG>nvironment variable)<BR>
@@ -1658,9 +1657,9 @@ comma-separated list of the following flags:
     value <EM>VAL</EM>, where <EM>VAL</EM> can contain regexp backreferences
     <CODE>$N</CODE> and <CODE>%N</CODE> which will be expanded. You can use this flag
     more than once to set more than one variable. The variables can be later
-    dereferenced at a lot of situations, but the usual location will be from
+    dereferenced in many situations, but usually from
     within XSSI (via <CODE>&lt;!--#echo var="VAR"--&gt;</CODE>) or CGI (<EM>e.g.</EM>
-    <CODE>$ENV{'VAR'}</CODE>).  But additionally you can also dereference it in a
+    <CODE>$ENV{'VAR'}</CODE>).  Additionally you can dereference it in a
     following RewriteCond pattern via <CODE>%{ENV:VAR}</CODE>. Use this to strip
     but remember information from URLs.
 </UL>
@@ -1668,16 +1667,16 @@ comma-separated list of the following flags:
 <P>
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
-<STRONG>Notice:</STRONG> Never forget that <EM>Pattern</EM> gets applied to a complete URL
+<STRONG>Note:</STRONG> Never forget that <EM>Pattern</EM> is applied to a complete URL
 in per-server configuration files. <STRONG>But in per-directory configuration
 files, the per-directory prefix (which always is the same for a specific
-directory!) gets automatically <EM>removed</EM> for the pattern matching and
+directory!) is automatically <EM>removed</EM> for the pattern matching and
 automatically <EM>added</EM> after the substitution has been done.</STRONG> This feature is
 essential for many sorts of rewriting, because without this prefix stripping
 you have to match the parent directory which is not always possible.
 <P>
 There is one exception: If a substitution string starts with
-``<CODE>http://</CODE>'' then the directory prefix will be <STRONG>not</STRONG> added and a
+``<CODE>http://</CODE>'' then the directory prefix will <STRONG>not</STRONG> be added and an
 external redirect or proxy throughput (if flag <STRONG>P</STRONG> is used!) is forced!
 </TD></TR>
 </TABLE>
@@ -1685,9 +1684,9 @@ external redirect or proxy throughput (if flag <STRONG>P</STRONG> is used!) is f
 <P>
 <TABLE WIDTH="70%" BORDER=0 BGCOLOR="#E0E0F0" CELLSPACING=0 CELLPADDING=10>
 <TR><TD>
-<STRONG>Notice:</STRONG> To enable the rewriting engine for per-directory configuration files
+<STRONG>Note:</STRONG> To enable the rewriting engine for per-directory configuration files
 you need to set ``<CODE>RewriteEngine On</CODE>'' in these files <STRONG>and</STRONG>
-``<CODE>Option FollowSymLinks</CODE>'' enabled. If your administrator has
+``<CODE>Option FollowSymLinks</CODE>'' must be enabled. If your administrator has
 disabled override of <CODE>FollowSymLinks</CODE> for a user's directory, then
 you cannot use the rewriting engine.  This restriction is needed for
 security reasons.
@@ -1841,7 +1840,7 @@ variables <CODE>SCRIPT_NAME</CODE> and <CODE>SCRIPT_FILENAME</CODE> contain the
 
 <P>
 Notice: These variables hold the URI/URL <EM>as they were initially
-requested</EM>, <EM>i.e.</EM>, in a state <EM>before</EM> any rewriting. This is
+requested</EM>, <EM>i.e.</EM>, <EM>before</EM> any rewriting. This is
 important because the rewriting process is primarily used to rewrite logical
 URLs to physical pathnames.
 
index 265f4a7..30ea742 100644 (file)
@@ -148,7 +148,7 @@ H4 {
         </tr>
         <tr>
         <td align="right">
-        <font face="Arial,Helvetica">mod_ssl version 2.5</font> &nbsp;&nbsp;
+        <font face="Arial,Helvetica">mod_ssl version 2.6</font> &nbsp;&nbsp;
         </td>
         </tr>
         </table>
index e43f61d..19875df 100644 (file)
@@ -556,7 +556,7 @@ if (document.images) {
         <td>        <table width="598">
         <tr>
         <td align="left"><font face="Arial,Helvetica">
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.5, User Manual<br>
+        <a href="http://www.modssl.org/">mod_ssl</a> 2.6, User Manual<br>
         The Apache Interface to OpenSSL
         </font>
         </td>
index 1028e99..988a009 100644 (file)
@@ -1,4 +1,4 @@
-#!wml -oindex.html
+#!wml -o index.html
 
 #use "ssl_template.inc" title="Title Page" tag=title num=0 
 
@@ -17,7 +17,7 @@
         </tr>
         <tr>
         <td align=right>
-        <font face="Arial,Helvetica">mod_ssl version 2.5</font> &nbsp;&nbsp;
+        <font face="Arial,Helvetica">mod_ssl version 2.6</font> &nbsp;&nbsp;
         </td>
         </tr>
         </table>
index b633181..926a739 100644 (file)
@@ -292,46 +292,47 @@ author.
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC12"><strong>Permission problem on SSLMutex</strong></a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC13"><strong>Shared memory and process size?</strong></a><br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC14"><strong>Shared memory and pathname?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC15"><strong>About Configuration</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC16"><strong>HTTP and HTTPS with a single server?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC17"><strong>Where is the HTTPS port?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC18"><strong>How to test HTTPS manually?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC19"><strong>Why does my connection hang?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC20"><strong>Why do I get connection refused?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC21"><strong>Why are the SSL_XXX variables missing?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC22"><strong>How to switch with relative hyperlinks?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC23"><strong>About Certificates</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC24"><strong>What are Keys, CSRs and Certs?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC25"><strong>Difference on startup?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC26"><strong>How to create a dummy cert?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC27"><strong>How to create a real cert?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC28"><strong>How to create my own CA?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC29"><strong>How to change a pass phrase?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC30"><strong>How to remove a pass phrase?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC31"><strong>How to verify a key/cert pair?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC32"><strong>Bad Certificate Error?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC33"><strong>Why does a 2048-bit key not work?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC34"><strong>Why is client auth broken?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC35"><strong>How to convert from PEM to DER?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC36"><strong>Verisign and the magic getca program?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC37"><strong>Global IDs or SGC?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC38"><strong>Global IDs and Cert Chain?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC39"><strong>About SSL Protocol</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC40"><strong>Why has the server a higher load?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC41"><strong>Why are connections horribly slow?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC42"><strong>Which ciphers are supported?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC43"><strong>How to use Anonymous-DH ciphers</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC44"><strong>Why do I get 'no shared ciphers'?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC45"><strong>HTTPS and name-based vhosts</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC46"><strong>The lock icon in Netscape locks very late</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC47"><strong>Why do I get I/O errors with my MSIE clients?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC48"><strong>Why do I get I/O errors with my NS clients?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC49"><strong>About Support</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC50"><strong>Resources in case of problems?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC51"><strong>Support in case of problems?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC52"><strong>How to write a problem report?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC53"><strong>I got a core dump, can you help me?</strong></a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC54"><strong>How to get a backtrace?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC15"><strong>PRNG and not enough entropy?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC16"><strong>About Configuration</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC17"><strong>HTTP and HTTPS with a single server?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC18"><strong>Where is the HTTPS port?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC19"><strong>How to test HTTPS manually?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC20"><strong>Why does my connection hang?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC21"><strong>Why do I get connection refused?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC22"><strong>Why are the SSL_XXX variables missing?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC23"><strong>How to switch with relative hyperlinks?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC24"><strong>About Certificates</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC25"><strong>What are Keys, CSRs and Certs?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC26"><strong>Difference on startup?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC27"><strong>How to create a dummy cert?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC28"><strong>How to create a real cert?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC29"><strong>How to create my own CA?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC30"><strong>How to change a pass phrase?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC31"><strong>How to remove a pass phrase?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC32"><strong>How to verify a key/cert pair?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC33"><strong>Bad Certificate Error?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC34"><strong>Why does a 2048-bit key not work?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC35"><strong>Why is client auth broken?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC36"><strong>How to convert from PEM to DER?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC37"><strong>Verisign and the magic getca program?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC38"><strong>Global IDs or SGC?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC39"><strong>Global IDs and Cert Chain?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC40"><strong>About SSL Protocol</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC41"><strong>Why has the server a higher load?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC42"><strong>Why are connections horribly slow?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC43"><strong>Which ciphers are supported?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC44"><strong>How to use Anonymous-DH ciphers</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC45"><strong>Why do I get 'no shared ciphers'?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC46"><strong>HTTPS and name-based vhosts</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC47"><strong>The lock icon in Netscape locks very late</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC48"><strong>Why do I get I/O errors with my MSIE clients?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC49"><strong>Why do I get I/O errors with my NS clients?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC50"><strong>About Support</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC51"><strong>Resources in case of problems?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC52"><strong>Support in case of problems?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC53"><strong>How to write a problem report?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC54"><strong>I got a core dump, can you help me?</strong></a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ToC55"><strong>How to get a backtrace?</strong></a><br>
 </font>
 </td>
 </tr>
@@ -346,7 +347,7 @@ author.
 <li><a name="ToC2"></a>
     <a name="history"></a>
     <strong id="faq">What is the history of mod_ssl?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#history"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#history"><b>L</b></a>]
     <p>
     The mod_ssl v1 package was initially created in April 1998 by <a
     href="mailto:rse@engelschall.com">Ralf S. Engelschall</a> via porting <a
@@ -371,7 +372,7 @@ author.
     <a name="apssl-diff"></a>
     <strong id="faq">What are the functional differences between mod_ssl and Apache-SSL, from where
 it is originally derived?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#apssl-diff"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#apssl-diff"><b>L</b></a>]
     <p>
     This neither can be answered in short (there were too much code changes)
     nor can be answered at all by the author (there would be immediately flame
@@ -410,7 +411,7 @@ it is originally derived?</strong>&nbsp;&nbsp;
     <a name="apssl-diff"></a>
     <strong id="faq">What are the major differences between mod_ssl and
 the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#apssl-diff"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#apssl-diff"><b>L</b></a>]
     <p>
     As of this writing (end of the year 1999) the major difference is
     the RSA license which one receives (very cheaply in contrast to
@@ -458,7 +459,7 @@ the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
 <li><a name="ToC5"></a>
     <a name="what-version"></a>
     <strong id="faq">How do I know which mod_ssl version is for which Apache version?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#what-version"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#what-version"><b>L</b></a>]
     <p>
     That's trivial: mod_ssl uses version strings of the syntax
     <em>&lt;mod_ssl-version&gt;</em>-<em>&lt;apache-version&gt;</em>, for
@@ -471,7 +472,7 @@ the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
 <li><a name="ToC6"></a>
     <a name="y2k"></a>
     <strong id="faq">Is mod_ssl Year 2000 compliant?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#y2k"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#y2k"><b>L</b></a>]
     <p>
     Yes, mod_ssl is Year 2000 compliant.
     <p>
@@ -494,7 +495,7 @@ the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
 <li><a name="ToC7"></a>
     <a name="wassenaar"></a>
     <strong id="faq">What about mod_ssl and the Wassenaar Arrangement?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#wassenaar"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#wassenaar"><b>L</b></a>]
     <p>
     First, let us explain what <i>Wassenaar</i> and it's <i>Arrangement on
     Export Controls for Conventional Arms and Dual-Use Goods and
@@ -551,7 +552,7 @@ the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
 <li><a name="ToC9"></a>
     <a name="core-dbm"></a>
     <strong id="faq">When I access my website the first time via HTTPS I get a core dump?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#core-dbm"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#core-dbm"><b>L</b></a>]
     <p>
     There can be a lot of reasons why a core dump can occur, of course.
     Ranging from buggy third-party modules, over buggy vendor libraries up to
@@ -565,7 +566,7 @@ the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
 <li><a name="ToC10"></a>
     <a name="core-php3"></a>
     <strong id="faq">My Apache dumps core when I add both mod_ssl and PHP3?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#core-php3"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#core-php3"><b>L</b></a>]
     <p>
     Make sure you add mod_ssl to the Apache source tree first and then do a
     fresh configuration and installation of PHP3. For SSL support EAPI patches
@@ -576,7 +577,7 @@ the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
 <li><a name="ToC11"></a>
     <a name="dso-sym"></a>
     <strong id="faq">When I startup Apache I get errors about undefined symbols like ap_global_ctx?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#dso-sym"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#dso-sym"><b>L</b></a>]
     <p>
     This actually means you installed mod_ssl as a DSO, but without rebuilding
     Apache with EAPI. Because EAPI is a requirement for mod_ssl, you need an
@@ -587,7 +588,7 @@ the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
 <li><a name="ToC12"></a>
     <a name="mutex-perm"></a>
     <strong id="faq">When I startup Apache I get permission errors related to SSLMutex?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#mutex-perm"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#mutex-perm"><b>L</b></a>]
     <p>
     When you receive entries like ``<code>mod_ssl: Child could not open
     SSLMutex lockfile /opt/apache/logs/ssl_mutex.18332 (System error follows)
@@ -602,7 +603,7 @@ the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
     <a name="mm"></a>
     <strong id="faq">When I use the MM library and the shared memory cache each process grows
 1.5MB according to `top' although I specified 512000 as the cache size?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#mm"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#mm"><b>L</b></a>]
     <p>
     The additional 1MB are caused by the global shared memory pool EAPI
     allocates for all modules and which is not used by mod_ssl for
@@ -619,23 +620,47 @@ the commercial alternatives like Raven or Stronghold?</strong>&nbsp;&nbsp;
     <strong id="faq">Apache creates files in a directory declared by the internal
 EAPI_MM_CORE_PATH define. Is there a way to override the path using a
 configuration directive?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#mmpath"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#mmpath"><b>L</b></a>]
     <p>
     No, there is not configuration directive, because for technical
     bootstrapping reasons, a directive not possible at all. Instead
     use ``<code>CFLAGS='-DEAPI_MM_CORE_PATH="/path/to/wherever/"'
     ./configure ...</code>'' when building Apache or use option
     <b>-d</b> when starting <code>httpd</code>.
+<p>
+<li><a name="ToC15"></a>
+    <a name="entropy"></a>
+    <strong id="faq">When I fire up the server, mod_ssl stops with the error
+"Failed to generate temporary 512 bit RSA private key", why?
+And a "PRNG not seeded" error occurs if I try "make certificate".</strong>&nbsp;&nbsp;
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#entropy"><b>L</b></a>]
+    <p>
+    Cryptographic software needs a source of unpredictable data
+    to work correctly. Many open source operating systems provide
+    a "randomness device" that serves this purpose (usually named
+    <code>/dev/random</code>). On other systems, applications have to
+    seed the OpenSSL Pseudo Random Number Generator (PRNG) manually with
+    appropriate data before generating keys or performing public key
+    encryption. As of version 0.9.5, the OpenSSL functions that need
+    randomness report an error if the PRNG has not been seeded with
+    at least 128 bits of randomness. So mod_ssl has to provide enough
+    entropy to the PRNG to work correctly. For this one has to use the
+    <code>SSLRandSeed</code> directives (to solve the run-time problem)
+    and create a <code>$HOME/.rnd</code> file to make sure enough
+    entropy is available also for the "<code>make certificate</code>"
+    step (in case the "<code>make certificate</code>" procedure is not
+    able to gather enough entropy theirself by searching for system
+    files).
 </ul>
 <p>
 <br>
-<H2><a name="ToC15">About Configuration</a></H2>
+<H2><a name="ToC16">About Configuration</a></H2>
 <ul>
 <p>
-<li><a name="ToC16"></a>
+<li><a name="ToC17"></a>
     <a name="https-parallel"></a>
     <strong id="faq">Is it possible to provide HTTP and HTTPS with a single server?</strong></strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#https-parallel"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#https-parallel"><b>L</b></a>]
     <p>
     Yes, HTTP and HTTPS use different server ports, so there is no direct
     conflict between them. Either run two separate server instances (one binds
@@ -644,20 +669,20 @@ configuration directive?</strong>&nbsp;&nbsp;
     Apache dispatches: one responding to port 80 and speaking HTTP and one
     responding to port 443 speaking HTTPS.
 <p>
-<li><a name="ToC17"></a>
+<li><a name="ToC18"></a>
     <a name="https-port"></a>
     <strong id="faq">I know that HTTP is on port 80, but where is HTTPS?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#https-port"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#https-port"><b>L</b></a>]
     <p>
     You can run HTTPS on any port, but the standards specify port 443, which
     is where any HTTPS compliant browser will look by default. You can force
     your browser to look on a different port by specifying it in the URL like
     this (for port 666): <code>https://secure.server.dom:666/</code>
 <p>
-<li><a name="ToC18"></a>
+<li><a name="ToC19"></a>
     <a name="https-test"></a>
     <strong id="faq">How can I speak HTTPS manually for testing purposes?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#https-test"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#https-test"><b>L</b></a>]
     <p>
     While you usually just use
     <p>
@@ -683,10 +708,10 @@ configuration directive?</strong>&nbsp;&nbsp;
     <code><b>$ curl http://localhost/</b></code><br>
     <code><b>$ curl https://localhost/</b></code><br>
 <p>
-<li><a name="ToC19"></a>
+<li><a name="ToC20"></a>
     <a name="hang"></a>
     <strong id="faq">Why does the connection hang when I connect to my SSL-aware Apache server?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#hang"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#hang"><b>L</b></a>]
     <p>
     Because you connected with HTTP to the HTTPS port, i.e. you used an URL of
     the form ``<code>http://</code>'' instead of ``<code>https://</code>''.
@@ -696,11 +721,11 @@ configuration directive?</strong>&nbsp;&nbsp;
     virtual server that supports SSL, which is probably the IP associated with
     your hostname, not localhost (127.0.0.1).
 <p>
-<li><a name="ToC20"></a>
+<li><a name="ToC21"></a>
     <a name="hang"></a>
     <strong id="faq">Why do I get ``Connection Refused'' messages when trying to access my freshly
 installed Apache+mod_ssl server via HTTPS?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#hang"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#hang"><b>L</b></a>]
     <p>
     There can be various reasons. Some of the common mistakes is that people
     start Apache with just ``<tt>apachectl start</tt>'' (or
@@ -711,19 +736,19 @@ installed Apache+mod_ssl server via HTTPS?</strong>&nbsp;&nbsp;
     yourself a favor and start over with the default configuration mod_ssl
     provides you.
 <p>
-<li><a name="ToC21"></a>
+<li><a name="ToC22"></a>
     <a name="env-vars"></a>
     <strong id="faq">In my CGI programs and SSI scripts the various documented
 <code>SSL_XXX</code> variables do not exists. Why?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#env-vars"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#env-vars"><b>L</b></a>]
     <p>
     Just make sure you have ``<code>SSLOptions +StdEnvVars</code>''
     enabled for the context of your CGI/SSI requests.
 <p>
-<li><a name="ToC22"></a>
+<li><a name="ToC23"></a>
     <a name="relative-links"></a>
     <strong id="faq">How can I use relative hyperlinks to switch between HTTP and HTTPS?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#relative-links"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#relative-links"><b>L</b></a>]
     <p>
     Usually you have to use fully-qualified hyperlinks because
     you have to change the URL scheme. But with the help of some URL
@@ -741,13 +766,13 @@ installed Apache+mod_ssl server via HTTPS?</strong>&nbsp;&nbsp;
 </ul>
 <p>
 <br>
-<H2><a name="ToC23">About Certificates</a></H2>
+<H2><a name="ToC24">About Certificates</a></H2>
 <ul>
 <p>
-<li><a name="ToC24"></a>
+<li><a name="ToC25"></a>
     <a name="what-is"></a>
     <strong id="faq">What are RSA Private Keys, CSRs and Certificates?</strong></strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#what-is"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#what-is"><b>L</b></a>]
     <p>
     The RSA private key file is a digital file that you can use to decrypt
     messages sent to you. It has a public component which you distribute (via
@@ -762,10 +787,10 @@ installed Apache+mod_ssl server via HTTPS?</strong>&nbsp;&nbsp;
     See the <a href="ssl_intro.html">Introduction</a> chapter for a general
     description of the SSL protocol.
 <p>
-<li><a name="ToC25"></a>
+<li><a name="ToC26"></a>
     <a name="startup"></a>
     <strong id="faq">Seems like there is a difference on startup between the original Apache and an SSL-aware Apache?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#startup"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#startup"><b>L</b></a>]
     <p>
     Yes, in general, starting Apache with a built-in mod_ssl is just like
     starting an unencumbered Apache, except for the fact that when you have a
@@ -778,10 +803,10 @@ installed Apache+mod_ssl server via HTTPS?</strong>&nbsp;&nbsp;
     below under ``How can I get rid of the pass-phrase dialog at Apache
     startup time?''.
 <p>
-<li><a name="ToC26"></a>
+<li><a name="ToC27"></a>
     <a name="cert-dummy"></a>
     <strong id="faq">How can I create a dummy SSL server Certificate for testing purposes?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#cert-dummy"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#cert-dummy"><b>L</b></a>]
     <p>
     A Certificate does not have to be signed by a public CA. You can use your
     private key to sign the Certificate which contains your public key. You
@@ -800,11 +825,11 @@ installed Apache+mod_ssl server via HTTPS?</strong>&nbsp;&nbsp;
     BUT REMEMBER: YOU REALLY HAVE TO CREATE A REAL CERTIFICATE FOR THE LONG
     RUN! HOW THIS IS DONE IS DESCRIBED IN THE NEXT ANSWER.
 <p>
-<li><a name="ToC27"></a>
+<li><a name="ToC28"></a>
     <a name="cert-real"></a>
     <strong id="faq">Ok, I've got my server installed and want to create a real SSL
 server Certificate for it. How do I do it?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#cert-real"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#cert-real"><b>L</b></a>]
     <p>
     Here is a step-by-step description:
     <p>
@@ -896,10 +921,10 @@ server Certificate for it. How do I do it?</strong>&nbsp;&nbsp;
        The <code>server.csr</code> file is no longer needed.
     </ol>
 <p>
-<li><a name="ToC28"></a>
+<li><a name="ToC29"></a>
     <a name="cert-ownca"></a>
     <strong id="faq">How can I create and use my own Certificate Authority (CA)?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#cert-ownca"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#cert-ownca"><b>L</b></a>]
     <p>
     The short answer is to use the <code>CA.sh</code> or <code>CA.pl</code>
     script provided by OpenSSL. The long and manual answer is this:
@@ -946,10 +971,10 @@ server Certificate for it. How do I do it?</strong>&nbsp;&nbsp;
        This signs the server CSR and results in a <code>server.crt</code> file.
     </ol>
 <p>
-<li><a name="ToC29"></a>
+<li><a name="ToC30"></a>
     <a name="change-passphrase"></a>
     <strong id="faq">How can I change the pass-phrase on my private key file?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#change-passphrase"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#change-passphrase"><b>L</b></a>]
     <p>
     You simply have to read it with the old pass-phrase and write it again
     by specifying the new pass-phrase. You can accomplish this with the following
@@ -962,10 +987,10 @@ server Certificate for it. How do I do it?</strong>&nbsp;&nbsp;
     prompt enter the old pass-phrase and at the second prompt
     enter the new pass-phrase.
 <p>
-<li><a name="ToC30"></a>
+<li><a name="ToC31"></a>
     <a name="remove-passphrase"></a>
     <strong id="faq">How can I get rid of the pass-phrase dialog at Apache startup time?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#remove-passphrase"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#remove-passphrase"><b>L</b></a>]
     <p>
     The reason why this dialog pops up at startup and every re-start
     is that the RSA private key inside your server.key file is stored in
@@ -997,10 +1022,10 @@ server Certificate for it. How do I do it?</strong>&nbsp;&nbsp;
     exec:/path/to/program</code>'' facility. But keep in mind that this is
     neither more nor less secure, of course.
 <p>
-<li><a name="ToC31"></a>
+<li><a name="ToC32"></a>
     <a name="verify-key"></a>
     <strong id="faq">How do I verify that a private key matches its Certificate?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#verify-key"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#verify-key"><b>L</b></a>]
     <p>
     The private key contains a series of numbers. Two of those numbers form
     the "public key", the others are part of your "private key". The "public
@@ -1027,11 +1052,11 @@ server Certificate for it. How do I do it?</strong>&nbsp;&nbsp;
     <p>
     <code><strong>$ openssl req -noout -modulus -in server.csr | openssl md5</strong></code>
 <p>
-<li><a name="ToC32"></a>
+<li><a name="ToC33"></a>
     <a name="keysize1"></a>
     <strong id="faq">What does it mean when my connections fail with an "alert bad certificate"
 error?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#keysize1"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#keysize1"><b>L</b></a>]
     <p>
     Usually when you see errors like ``<tt>OpenSSL: error:14094412: SSL
     routines:SSL3_READ_BYTES:sslv3 alert bad certificate</tt>'' in the SSL
@@ -1039,10 +1064,10 @@ error?</strong>&nbsp;&nbsp;
     certificate/private-key which perhaps contain a RSA-key not equal to 1024
     bits. For instance Netscape Navigator 3.x is one of those browsers.
 <p>
-<li><a name="ToC33"></a>
+<li><a name="ToC34"></a>
     <a name="keysize2"></a>
     <strong id="faq">Why does my 2048-bit private key not work?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#keysize2"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#keysize2"><b>L</b></a>]
     <p>
     The private key sizes for SSL must be either 512 or 1024 for compatibility
     with certain web browsers. A keysize of 1024 bits is recommended because
@@ -1050,11 +1075,11 @@ error?</strong>&nbsp;&nbsp;
     Navigator and Microsoft Internet Explorer, and with other browsers that
     use RSA's BSAFE cryptography toolkit.
 <p>
-<li><a name="ToC34"></a>
+<li><a name="ToC35"></a>
     <a name="hash-symlinks"></a>
     <strong id="faq">Why is client authentication broken after upgrading from
 SSLeay version 0.8 to 0.9?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#hash-symlinks"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#hash-symlinks"><b>L</b></a>]
     <p>
     The CA certificates under the path you configured with
     <code>SSLCACertificatePath</code> are found by SSLeay through hash
@@ -1064,10 +1089,10 @@ SSLeay version 0.8 to 0.9?</strong>&nbsp;&nbsp;
     all old hash symlinks and re-create new ones after upgrading. Use the
     <code>Makefile</code> mod_ssl placed into this directory.
 <p>
-<li><a name="ToC35"></a>
+<li><a name="ToC36"></a>
     <a name="pem-to-der"></a>
     <strong id="faq">How can I convert a certificate from PEM to DER format?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#pem-to-der"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#pem-to-der"><b>L</b></a>]
     <p>
     The default certificate format for SSLeay/OpenSSL is PEM, which actually
     is Base64 encoded DER with header and footer lines. For some applications
@@ -1076,11 +1101,11 @@ SSLeay version 0.8 to 0.9?</strong>&nbsp;&nbsp;
     corresponding DER file <code>cert.der</code> with the following command:
     <code><strong>$ openssl x509 -in cert.pem -out cert.der -outform DER</strong></code>
 <p>
-<li><a name="ToC36"></a>
+<li><a name="ToC37"></a>
     <a name="verisign-getca"></a>
     <strong id="faq">I try to install a Verisign certificate. Why can't I find neither the
 <code>getca</code> nor <code>getverisign</code> programs Verisign mentions?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#verisign-getca"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#verisign-getca"><b>L</b></a>]
     <p>
     This is because Verisign has never provided specific instructions
     for Apache+mod_ssl. Rather they tell you what you should do
@@ -1094,11 +1119,11 @@ SSLeay version 0.8 to 0.9?</strong>&nbsp;&nbsp;
     href="http://www.thawte.com/certs/server/keygen/mod_ssl.html">
     Thawte's mod_ssl instructions</a>.
 <p>
-<li><a name="ToC37"></a>
+<li><a name="ToC38"></a>
     <a name="gid"></a>
     <strong id="faq">Can I use the Server Gated Cryptography (SGC) facility (aka Verisign Global
 ID) also with mod_ssl?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#gid"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#gid"><b>L</b></a>]
     <p>
     Yes, mod_ssl since version 2.1 supports the SGC facility. You don't have
     to configure anything special for this, just use a Global ID as your
@@ -1106,11 +1131,11 @@ ID) also with mod_ssl?</strong>&nbsp;&nbsp;
     automatically handled by mod_ssl under run-time. For details please read
     the <tt>README.GlobalID</tt> document in the mod_ssl distribution.
 <p>
-<li><a name="ToC38"></a>
+<li><a name="ToC39"></a>
     <a name="gid"></a>
     <strong id="faq">After I have installed my new Verisign Global ID server certificate, the
 browsers complain that they cannot verify the server certificate?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#gid"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#gid"><b>L</b></a>]
     <p>
     That is because Verisign uses an intermediate CA certificate between
     the root CA certificate (which is installed in the browsers) and
@@ -1123,34 +1148,34 @@ browsers complain that they cannot verify the server certificate?</strong>&nbsp;
 </ul>
 <p>
 <br>
-<H2><a name="ToC39">About SSL Protocol</a></H2>
+<H2><a name="ToC40">About SSL Protocol</a></H2>
 <ul>
 <p>
-<li><a name="ToC40"></a>
+<li><a name="ToC41"></a>
     <a name="load"></a>
     <strong id="faq">Why has my webserver a higher load now that I run SSL there?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#load"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#load"><b>L</b></a>]
     <p>
     Because SSL uses strong cryptographic encryption and this needs a lot of
     number crunching. And because when you request a webpage via HTTPS even
     the images are transfered encrypted. So, when you have a lot of HTTPS
     traffic the load increases.
 <p>
-<li><a name="ToC41"></a>
+<li><a name="ToC42"></a>
     <a name="random"></a>
     <strong id="faq">Often HTTPS connections to my server require up to 30 seconds for establishing
 the connection, although sometimes it works faster?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#random"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#random"><b>L</b></a>]
     <p>
     Usually this is caused by using a <code>/dev/random</code> device for
     <code>SSLRandomSeed</code> which is blocking in read(2) calls if not
     enough entropy is available. Read more about this problem in the refernce
     chapter under <code>SSLRandomSeed</code>.
 <p>
-<li><a name="ToC42"></a>
+<li><a name="ToC43"></a>
     <a name="ciphers"></a>
     <strong id="faq">What SSL Ciphers are supported by mod_ssl?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#ciphers"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#ciphers"><b>L</b></a>]
     <p>
     Usually just all SSL ciphers which are supported by the
     version of OpenSSL in use (can depend on the way you built
@@ -1171,11 +1196,11 @@ the connection, although sometimes it works faster?</strong>&nbsp;&nbsp;
     <p>
     <code><strong>$ openssl ciphers -v</strong></code><br>
 <p>
-<li><a name="ToC43"></a>
+<li><a name="ToC44"></a>
     <a name="cipher-adh"></a>
     <strong id="faq">I want to use Anonymous Diffie-Hellman (ADH) ciphers, but I always get ``no
 shared cipher'' errors?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#cipher-adh"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#cipher-adh"><b>L</b></a>]
     <p>
     In order to use Anonymous Diffie-Hellman (ADH) ciphers, it is not enough
     to just put ``<code>ADH</code>'' into your <code>SSLCipherSuite</code>.
@@ -1184,11 +1209,11 @@ shared cipher'' errors?</strong>&nbsp;&nbsp;
     allow ADH ciphers for security reasons. So if you are actually enabling
     these ciphers make sure you are informed about the side-effects.
 <p>
-<li><a name="ToC44"></a>
+<li><a name="ToC45"></a>
     <a name="cipher-shared"></a>
     <strong id="faq">I always just get a 'no shared ciphers' error if
 I try to connect to my freshly installed server?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#cipher-shared"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#cipher-shared"><b>L</b></a>]
     <p>
     Either you have messed up your <code>SSLCipherSuite</code>
     directive (compare it with the pre-configured example in
@@ -1202,10 +1227,10 @@ I try to connect to my freshly installed server?</strong>&nbsp;&nbsp;
     this, regenerate your server certificate/key pair and this time
     choose the RSA algorithm.
 <p>
-<li><a name="ToC45"></a>
+<li><a name="ToC46"></a>
     <a name="vhosts"></a>
     <strong id="faq">Why can't I use SSL with name-based/non-IP-based virtual hosts?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#vhosts"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#vhosts"><b>L</b></a>]
     <p>
     The reason is very technical. Actually it's some sort of a chicken and
     egg problem: The SSL protocol layer stays below the HTTP protocol layer
@@ -1219,12 +1244,12 @@ I try to connect to my freshly installed server?</strong>&nbsp;&nbsp;
     handshake is finished. But the information is already needed at the SSL
     handshake phase. Bingo!
 <p>
-<li><a name="ToC46"></a>
+<li><a name="ToC47"></a>
     <a name="lock-icon"></a>
     <strong id="faq">When I use Basic Authentication over HTTPS the lock icon in Netscape browsers
 still show the unlocked state when the dialog pops up. Does this mean the
 username/password is still transmitted unencrypted?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#lock-icon"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#lock-icon"><b>L</b></a>]
     <p>
     No, the username/password is already transmitted encrypted. The icon in
     Netscape browsers is just not really synchronized with the SSL/TLS layer
@@ -1236,12 +1261,12 @@ username/password is still transmitted unencrypted?</strong>&nbsp;&nbsp;
     handshake phase and switched to encrypted communication. So, don't get
     confused by this icon.
 <p>
-<li><a name="ToC47"></a>
+<li><a name="ToC48"></a>
     <a name="io-ie"></a>
     <strong id="faq">When I connect via HTTPS to an Apache+mod_ssl server with Microsoft Internet
 Explorer (MSIE) I sometimes get I/O errors and the message "bad data from the
 server". What's the reason?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#io-ie"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#io-ie"><b>L</b></a>]
     <p>
     The reason is that MSIE's SSL implementation has some subtle bugs related
     to the HTTP keep-alive facility and the SSL close notify alerts on socket
@@ -1253,12 +1278,12 @@ server". What's the reason?</strong>&nbsp;&nbsp;
     SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
     </pre>
 <p>
-<li><a name="ToC48"></a>
+<li><a name="ToC49"></a>
     <a name="io-ns"></a>
     <strong id="faq">When I connect via HTTPS to an Apache+mod_ssl server with Netscape Navigator I
 get I/O errors and the message "Netscape has encountered bad data from the
 server" What's the reason?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#io-ns"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#io-ns"><b>L</b></a>]
     <p>
     The problem usually is that you had created a new server certificate with
     the same DN, but you had told your browser to accept forever the old
@@ -1269,21 +1294,21 @@ server" What's the reason?</strong>&nbsp;&nbsp;
 </ul>
 <p>
 <br>
-<H2><a name="ToC49">About Support</a></H2>
+<H2><a name="ToC50">About Support</a></H2>
 <ul>
 <p>
-<li><a name="ToC50"></a>
+<li><a name="ToC51"></a>
     <a name="resources"></a>
     <strong id="faq">What information resources are available in case of mod_ssl problems?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#resources"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#resources"><b>L</b></a>]
     <p>
 The following information resources are available.
 In case of problems you should search here first.
 <p>
 <ol>
 <li><em>Answers in the User Manual's F.A.Q. List (this)</em><br>
-    <a href="http://www.modssl.org/docs/2.5/ssl_faq.html">
-    http://www.modssl.org/docs/2.5/ssl_faq.html</a><br>
+    <a href="http://www.modssl.org/docs/2.6/ssl_faq.html">
+    http://www.modssl.org/docs/2.6/ssl_faq.html</a><br>
     First look inside the F.A.Q. (this text), perhaps your problem is such
     popular that it was already answered a lot of times in the past.
 <p>
@@ -1301,10 +1326,10 @@ In case of problems you should search here first.
     someone else already has reported the problem.
 </ol>
 <p>
-<li><a name="ToC51"></a>
+<li><a name="ToC52"></a>
     <a name="contact"></a>
     <strong id="faq">What support contacts are available in case of mod_ssl problems?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#contact"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#contact"><b>L</b></a>]
     <p>
 The following lists all support possibilities for mod_ssl, in order of
 preference, i.e. start in this order and do not pick the support possibility
@@ -1335,11 +1360,11 @@ you just like most, please.
     usually not processed as fast as a posting on modssl-users.
 </ol>
 <p>
-<li><a name="ToC52"></a>
+<li><a name="ToC53"></a>
     <a name="report-details"></a>
     <strong id="faq">What information and details I've to provide to
 the author when writing a bug report?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#report-details"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#report-details"><b>L</b></a>]
     <p>
 You have to at least always provide the following information:
 <p>
@@ -1373,10 +1398,10 @@ You have to at least always provide the following information:
     course.
 </ul>
 <p>
-<li><a name="ToC53"></a>
+<li><a name="ToC54"></a>
     <a name="core-dumped"></a>
     <strong id="faq">I got a core dump, can you help me?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#core-dumped"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#core-dumped"><b>L</b></a>]
     <p>
     In general no, at least not unless you provide more details about the code
     location where Apache dumped core. What is usually always required in
@@ -1384,10 +1409,10 @@ You have to at least always provide the following information:
     information it is mostly impossible to find the problem and help you in
     fixing it.
 <p>
-<li><a name="ToC54"></a>
+<li><a name="ToC55"></a>
     <a name="report-backtrace"></a>
     <strong id="faq">Ok, I got a core dump but how do I get a backtrace to find out the reason for it?</strong>&nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#report-backtrace"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#report-backtrace"><b>L</b></a>]
     <p>
 Follow the following steps:
 <p>
@@ -1477,7 +1502,7 @@ if (document.images) {
         <td>        <table width="598">
         <tr>
         <td align="left"><font face="Arial,Helvetica">
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.5, User Manual<br>
+        <a href="http://www.modssl.org/">mod_ssl</a> 2.6, User Manual<br>
         The Apache Interface to OpenSSL
         </font>
         </td>
index 9a8250f..74e3659 100644 (file)
@@ -69,7 +69,7 @@ author.
     <a name="<get-var ref>"></a>
     <strong id="faq">%body</strong>\
     &nbsp;&nbsp;
-    [<a href="http://www.modssl.org/docs/2.5/ssl_faq.html#<get-var ref>"><b>L</b></a>]
+    [<a href="http://www.modssl.org/docs/2.6/ssl_faq.html#<get-var ref>"><b>L</b></a>]
     <p>
 <restore toc>
 <restore ref>
@@ -365,6 +365,29 @@ configuration directive?
     ./configure ...</code>'' when building Apache or use option
     <b>-d</b> when starting <code>httpd</code>.
 
+<faq ref="entropy" toc="PRNG and not enough entropy?">
+When I fire up the server, mod_ssl stops with the error
+"Failed to generate temporary 512 bit RSA private key", why?
+And a "PRNG not seeded" error occurs if I try "make certificate".
+</faq>
+
+    Cryptographic software needs a source of unpredictable data
+    to work correctly. Many open source operating systems provide
+    a "randomness device" that serves this purpose (usually named
+    <code>/dev/random</code>). On other systems, applications have to
+    seed the OpenSSL Pseudo Random Number Generator (PRNG) manually with
+    appropriate data before generating keys or performing public key
+    encryption. As of version 0.9.5, the OpenSSL functions that need
+    randomness report an error if the PRNG has not been seeded with
+    at least 128 bits of randomness. So mod_ssl has to provide enough
+    entropy to the PRNG to work correctly. For this one has to use the
+    <code>SSLRandSeed</code> directives (to solve the run-time problem)
+    and create a <code>$HOME/.rnd</code> file to make sure enough
+    entropy is available also for the "<code>make certificate</code>"
+    step (in case the "<code>make certificate</code>" procedure is not
+    able to gather enough entropy theirself by searching for system
+    files).
 </ul>
 
 <p>
@@ -1051,8 +1074,8 @@ In case of problems you should search here first.
 <p>
 <ol>
 <li><em>Answers in the User Manual's F.A.Q. List (this)</em><br>
-    <a href="http://www.modssl.org/docs/2.5/ssl_faq.html">
-    http://www.modssl.org/docs/2.5/ssl_faq.html</a><br>
+    <a href="http://www.modssl.org/docs/2.6/ssl_faq.html">
+    http://www.modssl.org/docs/2.6/ssl_faq.html</a><br>
     First look inside the F.A.Q. (this text), perhaps your problem is such
     popular that it was already answered a lot of times in the past.
 <p>
index 79947dd..3d2674c 100644 (file)
@@ -218,7 +218,7 @@ realize that what you heard is not what I meant.''</em>
 <tr>
 <td align="right">
 <font size="-1">
-Unknown
+Richard Nixon
 </font>
 </td>
 </tr>
@@ -406,7 +406,7 @@ if (document.images) {
         <td>        <table width="598">
         <tr>
         <td align="left"><font face="Arial,Helvetica">
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.5, User Manual<br>
+        <a href="http://www.modssl.org/">mod_ssl</a> 2.6, User Manual<br>
         The Apache Interface to OpenSSL
         </font>
         </td>
index 0284115..d29b8d0 100644 (file)
@@ -3,7 +3,7 @@
 
 <page_prev name="F.A.Q. List" url="ssl_faq.html">
 
-<quotation width=300 author="Unknown">
+<quotation width=300 author="Richard Nixon">
 ``I know you believe you understand what you think I said, but I am not sure you
 realize that what you heard is not what I meant.''
 </quotation>
index c8451ad..fe1c132 100644 (file)
@@ -884,7 +884,7 @@ if (document.images) {
         <td>        <table width="598">
         <tr>
         <td align="left"><font face="Arial,Helvetica">
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.5, User Manual<br>
+        <a href="http://www.modssl.org/">mod_ssl</a> 2.6, User Manual<br>
         The Apache Interface to OpenSSL
         </font>
         </td>
index ecee236..50e4446 100644 (file)
@@ -239,7 +239,7 @@ year until the one arises you are looking for.''</em>
 <tr>
 <td align="right">
 <font size="-1">
-A. Tannenbaum, ``Introduction to Computer Networks''
+A. Tanenbaum, ``Introduction to Computer Networks''
 </font>
 </td>
 </tr>
@@ -916,7 +916,7 @@ if (document.images) {
         <td>        <table width="598">
         <tr>
         <td align="left"><font face="Arial,Helvetica">
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.5, User Manual<br>
+        <a href="http://www.modssl.org/">mod_ssl</a> 2.6, User Manual<br>
         The Apache Interface to OpenSSL
         </font>
         </td>
index 03b4383..69af97d 100644 (file)
@@ -7,7 +7,7 @@
 #use wml::std::toc style=nbsp
 
 <quotation width=400 
-           author="A. Tannenbaum, ``Introduction to Computer Networks''">
+           author="A. Tanenbaum, ``Introduction to Computer Networks''">
 ``The nice thing about standards is that there are so many to choose from.
 And if you really don't like all the standards you just have to wait another
 year until the one arises you are looking for.''
index 2d68c6a..90e021a 100644 (file)
@@ -486,7 +486,7 @@ if (document.images) {
         <td>        <table width="598">
         <tr>
         <td align="left"><font face="Arial,Helvetica">
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.5, User Manual<br>
+        <a href="http://www.modssl.org/">mod_ssl</a> 2.6, User Manual<br>
         The Apache Interface to OpenSSL
         </font>
         </td>
index de8166b..779dc79 100644 (file)
@@ -626,10 +626,11 @@ The following <em>source</em> variants are available:
     On some platforms like FreeBSD one can even control how the entropy is
     actually generated, i.e. by which system interrupts. More details one can
     find under <i>rndcontrol(8)</i> on those platforms. Alternatively, when
-    your system lacks such a random device, you can use tool like <a
-    href="http://www.lothar.com/tech/crypto/">EGD</a> (Entropy Gathering
-    Daemon) and run it's client program with the
-    <code>exec:/path/to/program/</code> variant (see below).
+    your system lacks such a random device, you can use tool
+    like <a href="http://www.lothar.com/tech/crypto/">EGD</a>
+    (Entropy Gathering Daemon) and run it's client program with the
+    <code>exec:/path/to/program/</code> variant (see below) or use
+    <code>egd:/path/to/egd-socket</code> (see below).
 <p>
 <li><code>exec:/path/to/program</code>
     <p>
@@ -644,6 +645,14 @@ The following <em>source</em> variants are available:
     which is based on the AT&amp;T <em>truerand</em> library). Using this in
     the connection context slows down the server too dramatically, of course.
     So usually you should avoid using external programs in that context.
+<p>
+<li><code>egd:/path/to/egd-socket</code> (Unix only)
+    <p>
+    This variant uses the Unix domain socket of the
+    external Entropy Gathering Daemon (EGD) (see <a
+    href="http://www.lothar.com/tech/crypto/">http://www.lothar.com/tech
+    /crypto/</a>) to seed the PRNG. Use this if no random device exists
+    on your platform.
 </ul>
 <p>
 Example:
@@ -2485,7 +2494,7 @@ if (document.images) {
         <td>        <table width="598">
         <tr>
         <td align="left"><font face="Arial,Helvetica">
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.5, User Manual<br>
+        <a href="http://www.modssl.org/">mod_ssl</a> 2.6, User Manual<br>
         The Apache Interface to OpenSSL
         </font>
         </td>
index bd91edd..0ebebfa 100644 (file)
@@ -295,10 +295,11 @@ The following <em>source</em> variants are available:
     On some platforms like FreeBSD one can even control how the entropy is
     actually generated, i.e. by which system interrupts. More details one can
     find under <i>rndcontrol(8)</i> on those platforms.  Alternatively, when
-    your system lacks such a random device, you can use tool like <a
-    href="http://www.lothar.com/tech/crypto/">EGD</a> (Entropy Gathering
-    Daemon) and run it's client program with the
-    <code>exec:/path/to/program/</code> variant (see below).
+    your system lacks such a random device, you can use tool
+    like <a href="http://www.lothar.com/tech/crypto/">EGD</a>
+    (Entropy Gathering Daemon) and run it's client program with the
+    <code>exec:/path/to/program/</code> variant (see below) or use
+    <code>egd:/path/to/egd-socket</code> (see below).
 <p>
 <li><code>exec:/path/to/program</code>
     <p>
@@ -313,6 +314,14 @@ The following <em>source</em> variants are available:
     which is based on the AT&amp;T <em>truerand</em> library). Using this in
     the connection context slows down the server too dramatically, of course.
     So usually you should avoid using external programs in that context.
+<p>
+<li><code>egd:/path/to/egd-socket</code> (Unix only)
+    <p>
+    This variant uses the Unix domain socket of the
+    external Entropy Gathering Daemon (EGD) (see <a
+    href="http://www.lothar.com/tech/crypto/">http://www.lothar.com/tech
+    /crypto/</a>) to seed the PRNG. Use this if no random device exists
+    on your platform.
 </ul>
 
 <p>
index fd1161e..3529a50 100644 (file)
@@ -233,7 +233,7 @@ H4 {
         <tr>
         <td align=left>\
         <font face="Arial,Helvetica"> 
-        <a href="http://www.modssl.org/">mod_ssl</a> 2.5, User Manual<br>
+        <a href="http://www.modssl.org/">mod_ssl</a> 2.6, User Manual<br>
         The Apache Interface to OpenSSL
         </font>
         </td>
index 7b8993b..7aef0b6 100644 (file)
@@ -125,8 +125,9 @@ in the VirtualHost directive, with the exception of
 <A HREF="../mod/core.html#listen">Listen</A>,
 <A HREF="../mod/core.html#pidfile">PidFile</A>,
 <A HREF="../mod/mod_mime.html#typesconfig">TypesConfig</A>,
-<A HREF="../mod/core.html#serverroot">ServerRoot</A> and
-<A HREF="../mod/core.html#namevirtualhost">NameVirtualHost</A>.
+<A HREF="../mod/core.html#serverroot">ServerRoot</A>,
+<A HREF="../mod/core.html#namevirtualhost">NameVirtualHost</A>
+and a few other directives.
 <P>
 <A HREF="../mod/core.html#user">User</A> and
 <A HREF="../mod/core.html#group">Group</A> may be used inside a VirtualHost
index 26e748c..c81df48 100644 (file)
@@ -360,17 +360,17 @@ EXPORTS
        ap_SHA1Final   @355
        ap_sha1_base64   @356
         ap_send_error_response @357
-       ap_add_config_define   @357
-       ap_global_ctx   @358
-       ap_ctx_new   @359
-       ap_ctx_get   @360
-       ap_ctx_set   @361
-       ap_hook_init   @362
-       ap_hook_kill   @363
-       ap_hook_configure   @364
-       ap_hook_register_I   @365
-       ap_hook_unregister_I   @366
-       ap_hook_status   @367
-       ap_hook_use   @368
-       ap_hook_call   @369
+       ap_add_config_define   @358
+       ap_global_ctx   @359
+       ap_ctx_new   @360
+       ap_ctx_get   @361
+       ap_ctx_set   @362
+       ap_hook_init   @363
+       ap_hook_kill   @364
+       ap_hook_configure   @365
+       ap_hook_register_I   @366
+       ap_hook_unregister_I   @367
+       ap_hook_status   @368
+       ap_hook_use   @369
+       ap_hook_call   @370
 
index 229ced6..b4863aa 100644 (file)
@@ -1,3 +1,66 @@
+Changes with Apache 1.3.12
+
+  *) Only OS/2 requires the addition "t" flag for ap_pfopen()
+     (as therefore fopen() as well). This is handled by the
+     FOPEN_REQUIRES_T macro. [Ian Turner <iant@sequent.com>,
+     Jim Jagielski] PR#5760
+
+  *) The default charset is only added, when enabled, for those
+     Content-types which require it (text/plain, text/html).
+     [Jim Jagielski] PR#5766
+
+  *) Fix handling of multiple queries in APXS commands (e.g. "apxs -q
+     CC CFLAGS") and make sure Perl-related command line options (which
+     can contain the "::" constructs) do no longer cause an incorrect
+     internal parsing of the query result.
+     [Ralf S. Engelschall, Steve Robb <steve@eu.c2.net>]
+
+  *) Avoid infinite looping in APACI's configure script
+     inside Ultrix' /bin/sh5 upgrade step.
+     [Jan Gallo <gallo@viapvt.sk>, Ralf S. Engelschall] PR#4940
+
+  *) PORT: Add support for Amdahl UTS 4.3 and later.
+     [Dave Dykstra <dwd@bell-labs.com>] PR#5654
+
+  *) Make implementation/descriptions of the FLAG directives
+     AuthAuthoritative, MetaFiles and ExtendedStatus consistent with
+     documentation and the standard way of implementation those directives.
+     [David MacKenzie <djm@web.us.uu.net>, Ralf S. Engelschall] PR#5642
+
+  *) Cast integer ap_wait_t values in http_main.c to get rid of compile
+     time errors on platforms where "ap_wait_t" is not defined as "int"
+     (currently only the NEXT and UTS21 platforms).
+     [Gary Bickford <garyb@fxt.com>, Ralf S. Engelschall] PR#5053
+
+  *) The default suexec path was HTTPD_ROOT/sbin/suexec if not
+     configured via APACI. Changed to HTTPD_ROOT/bin/suexec.
+     [Lars Eilebrecht]
+
+  *) Add an explicit charset=iso-8859-1 to pages generated by
+     ap_send_error_response(), such as the default 404 page.
+     [Marc Slemko]
+
+  *) Add the AddDefaultCharset directive. This allows you to specify
+     the given character set on any document that does not have one
+     explicitly specified in the headers.  [Marc Slemko, Jim Jagielski]
+
+  *) Properly escape various messages output to the client from a number
+     of modules and places in the core code.  [Marc Slemko]
+
+  *) Change mod_actions, mod_autoindex, mod_expires, and mod_log_config to
+     not consider any parameters such as charset when making decisions 
+     based on content type.  This does remove some functionality for 
+     some users, but means that when these modules are configured to do 
+     particular things with particular MIME types, the charset should 
+     not be included.  A better way of addressing this for users who 
+     want to set things on a per charset basis is necessary in the future.  
+     [Marc Slemko]
+
+  *) mod_include now entity encodes output from "printenv" and "echo var"
+     by default.  The encoding for "echo var" can be set to URL encoding
+     or no encoding using the new "encoding" attribute to the echo tag.
+     [Marc Slemko]
 Changes with Apache 1.3.11
 
   *) MPE builds are no longer stripped, which caused the executable
@@ -266,7 +329,7 @@ Changes with Apache 1.3.10
   *) Added a CLF '-' respecting %B to the log format.
      Suggested by Ragnar Kjørstad [dirkx]
 
-  *) Added protocol(%m)/method(%H) logging to the log format.
+  *) Added protocol(%H)/method(%m) logging to the log format.
      Suggested by Peter W <peterw@usa.net> [dirkx]
 
   *) Added a HEAD method to 'ab'. [dirkx]
index 649b5e0..66b7d5d 100644 (file)
   _INTENTIONALLY_ no contributor names attached to the entries. Instead all
   contributors are listed in the CREDITS file.
 
+      ____    __   
+     |___ \  / /_  
+       __) || '_ \ 
+      / __/ | (_) |
+  __ |_____(_)___/____________________________________________
+
+  Changes with mod_ssl 2.6.2 (29-Feb-2000 to 02-Mar-2000)
+
+   *) Updated the conf/ssl.crt/ca-bundle.crt file (containing the CA
+      Root Certificates of over 60 popular CAs) to the contents extracted
+      from Netscape Communicator 4.72's cert7.db file.
+
+   *) Fixed compilation of the new HTTPS proxy code (SSL_EXPERIMENTAL):
+      The SSL_VENDOR was required without need if SSL_EXPERIMENTAL was
+      enabled. This is now fixed and only SSL_EXPERIMENTAL is requied again
+      for the new HTTPS proxy stuff.
+
+   *) Added an FAQ entry about the "less entropy for the PRNG"
+      problem which now becomes "popular" ;) with OpenSSL 0.9.5.
+
+   *) Fixed conf/ssl.crl/Makefile: the files which have to be
+      checked for existance are named foo.rNNN and not just foo.NNN
+
+   *) Fixed a typo related to a RAND_status call in ssl_engine_rand.c
+      which was introduced in 2.6.1 and which caused mod_ssl fail to
+      compile if OpenSSL >= 0.9.5 was used [Sorry, my gcc hasn't catched
+      this typo :-(...]
+
+   *) Added also some random files which exists under Mach/Rhapshody
+      platforms to the list of files in src/support/mkcert.sh to make
+      sure enough entropy is available on these platforms under "make
+      certificate" with OpenSSL 0.9.5
+
+   *) Enhanced SSLRequire (SH2) -> SSLRequireSSL (mod_ssl)
+      directive compatibility mapping.
+
+  Changes with mod_ssl 2.6.1 (25-Feb-2000 to 29-Feb-2000)
+
+   *) Added support for OpenSSL 0.9.5's RAND_egd() which is now used
+      to read entropy from the EGD Unix domain socket if `SSLRandSeed
+      egd:/path/to/socket' is configured. 
+
+   *) Extended builtin PRNG seeding with a run-time stack based source.
+      This way the builtin source now creates more entropy and usually
+      enough to make OpenSSL >= 0.9.5 happy again. If OpenSSL is still not
+      happy (i.e. still not sufficient entropy exists), a warning message
+      is logged by mod_ssl now.
+
+   *) Fixed Tanenbaum's name on the quote in ssl_intro.wml
+
+   *) Updated Thawte's sxnet stuff for latest OpenSSL.
+
+   *) Allow mod_ssl to compile also under Win32 & VC++ 6.0
+   
+   *) Fix OS/2 support and this way make mod_ssl again work
+      also under this platform.
+
+  Changes with mod_ssl 2.6.0 (24-Feb-2000 to 25-Feb-2000)
+
+   *) Merged in enhanced HTTPS Proxy Support which is derived from
+      Stronghold 2.x and was originally contributed by C2Net over one
+      year ago. This is still _EXPERIMENTAL_ stuff, so it is entirely
+      wrapped with SSL_EXPERIMENTAL sections and has to be abled under
+      built-time with --enable-rule=SSL_EXPERIMENTAL. Then the following
+      new configuration directives are provided to fine-tune the HTTPS
+      proxy support:
+
+          o  SSLProxyProtocol [+-][SSLv2|SSLv3|TLSv1] ...
+             (enable or disable SSL protocol flavors)
+          o  SSLProxyCipherSuite XXX:...:XXX
+             (colon-delimited list of permitted SSL ciphers)
+          o  SSLProxyVerify on|off
+             (whether to verify the remote certificate)
+          o  SSLProxyVerifyDepth N
+             (maximum certificate verification depth)
+          o  SSLProxyCACertificateFile /path/to/file
+             (file containing server certificates)
+          o  SSLProxyCACertificatePath /path/to/dir
+             (directory containing server certificates)
+          o  SSLProxyMachineCertificateFile /path/to/file
+             (file containing client certificates)
+          o  SSLProxyMachineCertificatePath /path/to/dir
+             (directory containing client certificates)
+
+      This stuff is declared experimental, because it was still _NOT_
+      tested in depth and is still _UNDOCUMENTED_. So keep in mind what
+      SSL_EXPERIMENTAL means and use this with care!
+
+   *) Extended the EAPI patches to mod_proxy to allow the new
+      HTTPS proxy support to be merged in.
+
+   *) Fixed ssl_io_suck() prototype scope in mod_ssl.h by changing
+      the old #ifdef SSL_EXPERIMENTAL to the now correct #ifndef
+      SSL_CONSERVATIVE.
+
+   *) Added "cons" and "nocons" development target to
+      src/modules/ssl/Makefile.tmpl.
+
+   *) Upgraded to Apache version 1.3.12.
+
+
       ____    ____  
      |___ \  | ___| 
        __) | |___ \ 
       / __/ _ ___) |
   __ |_____(_)____/___________________________________________
                
+  Changes with mod_ssl 2.5.1 (22-Jan-2000 to 24-Feb-2000)
+
+   *) Made sure OpenSSL's Pseudo Random Number Generator (PRNG) is
+      seeded already before the temporary RSA keys are generated.
+
+   *) Fixed possible security hole in mkcert.sh script (make
+      certificate) by making sure we already generate the foo.key files
+      with proper umask instead of chmod them later (and this way
+      perhaps too late).
+
+   *) Fixed memory leak caused by not-freed SSL_CTX in the HTTPS proxy
+      support (ssl_engine_ext.c/mod_proxy).
+
+   *) Fixed quotation author in ssl_glossary.html: it's Richard Nixon,
+      as Lukas Bradley pointed out.
+
+   *) Use "/usr/local/ssl" as the default for $SSL_BASE only if this
+      path really exists. Else use "SYSTEM" and this way be more
+      flexible. This is especially interesting for RedHat/RPM users
+      where OpenSSL stays often directly under /usr.
+
+   *) Make sure libssl.module also detects OpenSSL correctly
+      if OpenSSL was built as shared libraries (.so)
+   
+   *) Let configure script more accurately check for -h, -v and
+      -q options on command line.
+
+   *) Make `SSLSessionCache none' really work as expected.
+
+   *) Added support for the latest OpenSSL snapshot (>= version 0.9.4).
+
+   *) Removed the removal of "#ifdef lint.. #endif" lines from
+      src/modules/ssl/Makefile.tmpl to make the life of the 
+      OpenBSD guys easier in the future.
+
+   *) Removed Unix Bourne-Shell construct "2>&1" from Win32's
+      configure.bat script because Win32 hates this.
+   
+   *) Fixed ApacheCore.def for Win32: Some numbers occured 
+      multiple times.
+
   Changes with mod_ssl 2.5.0 (08-Jan-2000 to 22-Jan-2000)
 
    *) Switched the old "POST for HTTPS" support code from
index f397c14..7389603 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $OpenBSD: Configure,v 1.10 2000/01/28 18:39:57 beck Exp $
+# $OpenBSD: Configure,v 1.11 2000/03/19 11:16:52 beck Exp $
 ## ====================================================================
 ## Copyright (c) 1995-1999 The Apache Group.  All rights reserved.
 ##
@@ -678,10 +678,17 @@ case "$PLAT" in
        LIBS="$LIBS -lPW"
        ;;
     *-uts*)
-       OS='Amdahl UTS'
-       CFLAGS="$CFLAGS -Xa -eft -DUTS21 -DUSEBCOPY"
-       LIBS="$LIBS -lsocket -lbsd -la"
-       DEF_WANTHSREGEX=yes
+       PLATOSVERS=`echo $PLAT | sed 's/^.*,//'`
+       OS='Amdahl UTS $PLATOSVERS'
+       case "$PLATOSVERS" in
+           2*) CFLAGS="$CFLAGS -Xa -eft -DUTS21 -DUSEBCOPY"
+               LIBS="$LIBS -lsocket -lbsd -la"
+               DEF_WANTHSREGEX=yes
+               ;;
+           *)  CFLAGS="$CFLAGS -Xa -DSVR4"
+               LIBS="$LIBS -lsocket -lnsl"
+               ;;
+       esac
        ;;
     *-ultrix)
        OS='ULTRIX'
@@ -1221,7 +1228,7 @@ if [ "x$using_shlib" = "x1" ] ; then
            # Older SINIX machines must be linked as "shared core"-Apache
            case $CC in
                */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
-               */cc|cc   ) CFLAGS_SHLIB="-KPIC" ;;
+               *)          CFLAGS_SHLIB="-KPIC" ;;
            esac
            LDFLAGS_SHLIB="-G"
            LDFLAGS_MOD_SHLIB=$LDFLAGS_SHLIB
@@ -1843,7 +1850,7 @@ if [ "x$using_shlib" = "x1" ] ; then
        #    select the special subtarget for shared core generation
        SUBTARGET=target_shared
        #    determine additional suffixes for libhttpd.so
-       V=1 R=3 P=11
+       V=1 R=3 P=12
        if [ "x$SHLIB_SUFFIX_DEPTH" = "x0" ]; then
            SHLIB_SUFFIX_LIST=""
        fi
index 9ed6897..0cd59f4 100644 (file)
@@ -84,7 +84,7 @@
 
 #define ERR_OVERFLOW 5
 
-#ifdef MPE
+#if defined(MPE) || defined(BEOS)
 #include <termios.h>
 
 char *
index 9d44b6a..1e2f454 100644 (file)
@@ -229,7 +229,7 @@ cp README.bindist ../apache_$VER-$OS.README
   echo " " && \
   echo "echo \"Ready.\"" && \
   echo "echo \" +--------------------------------------------------------+\"" && \
-  echo "echo \" | You now have successfully installed the Apache $VER   |\"" && \
+  echo "echo \" | You now have successfully installed the Apache $VER  |\"" && \
   echo "echo \" | HTTP server. To verify that Apache actually works      |\"" && \
   echo "echo \" | correctly you should first check the (initially        |\"" && \
   echo "echo \" | created or preserved) configuration files:             |\"" && \
index 5ea94b8..f60be1c 100644 (file)
@@ -812,6 +812,7 @@ typedef int rlim_t;
 #define NO_RELIABLE_PIPED_LOGS
 #define USE_OS2SEM_SERIALIZED_ACCEPT
 #define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
+#define FOPEN_REQUIRES_T
 
 #elif defined(__MACHTEN__)
 typedef int rlim_t;
index e346079..bb043ad 100644 (file)
  *                        ap_base64encode_len(), ap_base64decode(),
  *                        ap_base64decode_binary(), ap_base64decode_len(),
  *                        ap_pbase64decode(), ap_pbase64encode()
+ * 19990320.7           - add ap_strcasestr()
  */
 
 /* 
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
 #define MODULE_MAGIC_NUMBER_MAJOR 19990320
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 6                     /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 7                     /* 0...n */
 #define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR  /* backward compat */
 
 /* Useful for testing for features. */
index 459fd24..81cd3c8 100644 (file)
@@ -243,6 +243,15 @@ typedef struct {
      */
     unsigned d_is_fnmatch : 1;
 
+    /* should we force a charset on any outgoing parameterless content-type?
+     * if so, which charset?
+     */
+#define ADD_DEFAULT_CHARSET_OFF   (0)
+#define ADD_DEFAULT_CHARSET_ON    (1)
+#define ADD_DEFAULT_CHARSET_UNSET (2)
+    unsigned add_default_charset : 2;
+    char *add_default_charset_name;
+
     /* System Resource Control */
 #ifdef RLIMIT_CPU
     struct rlimit *limit_cpu;
index 9ad9130..d817ac4 100644 (file)
@@ -269,7 +269,7 @@ extern "C" {
 
 /* The path to the suExec wrapper, can be overridden in Configuration */
 #ifndef SUEXEC_BIN
-#define SUEXEC_BIN  HTTPD_ROOT "/sbin/suexec"
+#define SUEXEC_BIN  HTTPD_ROOT "/bin/suexec"
 #endif
 
 /* The default string lengths */
@@ -438,6 +438,12 @@ extern "C" {
 #define DEFAULT_LIMIT_REQUEST_FIELDS 100
 #endif /* default limit on number of request header fields */
 
+/*
+ * The default default character set name to add if AddDefaultCharset is 
+ * enabled.  Overridden with AddDefaultCharsetName.
+ */
+#define DEFAULT_ADD_DEFAULT_CHARSET_NAME "iso-8859-1"
+
 /*
  * The below defines the base string of the Server: header. Additional
  * tokens can be added via the ap_add_version_component() API call.
@@ -451,7 +457,7 @@ extern "C" {
  * Example: "Apache/1.1.0 MrWidget/0.1-alpha" 
  */
 
-#define SERVER_BASEVERSION "Apache/1.3.11"     /* SEE COMMENTS ABOVE */
+#define SERVER_BASEVERSION "Apache/1.3.12"     /* SEE COMMENTS ABOVE */
 #define SERVER_VERSION  SERVER_BASEVERSION
 enum server_token_type {
     SrvTk_MIN,         /* eg: Apache/1.3.0 */
@@ -470,7 +476,7 @@ API_EXPORT(void) ap_add_config_define(const char *define);
  * Always increases along the same track as the source branch.
  * For example, Apache 1.4.2 would be '10402100', 2.5b7 would be '20500007'.
  */
-#define APACHE_RELEASE 10311100
+#define APACHE_RELEASE 10312100
 
 #define SERVER_PROTOCOL "HTTP/1.1"
 #ifndef SERVER_SUPPORT
@@ -1046,6 +1052,7 @@ API_EXPORT(char *) ap_make_full_path(pool *a, const char *dir, const char *f);
 API_EXPORT(int) ap_is_matchexp(const char *str);
 API_EXPORT(int) ap_strcmp_match(const char *str, const char *exp);
 API_EXPORT(int) ap_strcasecmp_match(const char *str, const char *exp);
+API_EXPORT(char *) ap_strcasestr(const char *s1, const char *s2);
 API_EXPORT(char *) ap_pbase64decode(pool *p, const char *bufcoded);
 API_EXPORT(char *) ap_pbase64encode(pool *p, char *string); 
 API_EXPORT(char *) ap_uudecode(pool *p, const char *bufcoded);
index 8c11f17..4c4c64d 100644 (file)
@@ -154,6 +154,9 @@ static void *create_core_dir_config(pool *a, char *dir)
 
     conf->server_signature = srv_sig_unset;
 
+    conf->add_default_charset = ADD_DEFAULT_CHARSET_UNSET;
+    conf->add_default_charset_name = DEFAULT_ADD_DEFAULT_CHARSET_NAME;
+
     return (void *)conf;
 }
 
@@ -281,6 +284,14 @@ static void *merge_core_dir_configs(pool *a, void *basev, void *newv)
        conf->server_signature = new->server_signature;
     }
 
+    if (new->add_default_charset != ADD_DEFAULT_CHARSET_UNSET) {
+       conf->add_default_charset = new->add_default_charset;
+    }
+
+    if (new->add_default_charset_name) {
+       conf->add_default_charset_name = new->add_default_charset_name;
+    }
+
     return (void*)conf;
 }
 
@@ -1035,6 +1046,27 @@ static const char *set_gprof_dir(cmd_parms *cmd, void *dummy, char *arg)
 }
 #endif /*GPROF*/
 
+static const char *set_add_default_charset(cmd_parms *cmd, 
+       core_dir_config *d, char *arg)
+{
+    const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT);
+    if (err != NULL) {
+        return err;
+    }
+    if (!strcasecmp(arg, "Off")) {
+       d->add_default_charset = ADD_DEFAULT_CHARSET_OFF;
+    }
+    else if (!strcasecmp(arg, "On")) {
+       d->add_default_charset = ADD_DEFAULT_CHARSET_ON;
+       d->add_default_charset_name = DEFAULT_ADD_DEFAULT_CHARSET_NAME;
+    }
+    else {
+       d->add_default_charset = ADD_DEFAULT_CHARSET_ON;
+       d->add_default_charset_name = arg;
+    }
+    return NULL;
+}
+
 static const char *set_document_root(cmd_parms *cmd, void *dummy, char *arg)
 {
     void *sconf = cmd->server->module_config;
@@ -2786,6 +2818,8 @@ static const command_rec core_cmds[] = {
 { "GprofDir", set_gprof_dir, NULL, RSRC_CONF, TAKE1,
   "Directory to plop gmon.out files" },
 #endif
+{ "AddDefaultCharset", set_add_default_charset, NULL, OR_FILEINFO, 
+  TAKE1, "The name of the default charset to add to any Content-Type without one or 'Off' to disable" },
 
 /* Old resource config file commands */
   
index a4927bf..4a1e5fe 100644 (file)
@@ -487,7 +487,8 @@ API_EXPORT(void) ap_log_rerror(const char *file, int line, int level,
     if (((level & APLOG_LEVELMASK) <= APLOG_WARNING)
        && (ap_table_get(r->notes, "error-notes") == NULL)) {
        ap_table_setn(r->notes, "error-notes",
-                     ap_pvsprintf(r->pool, fmt, args));
+                     ap_escape_html(r->pool, ap_pvsprintf(r->pool, fmt, 
+                     args)));
     }
     va_end(args);
 }
@@ -498,6 +499,9 @@ void ap_log_pid(pool *p, char *fname)
     struct stat finfo;
     static pid_t saved_pid = -1;
     pid_t mypid;
+#ifndef WIN32
+    mode_t u;
+#endif
 
     if (!fname) 
        return;
@@ -519,12 +523,19 @@ void ap_log_pid(pool *p, char *fname)
                   );
     }
 
+#ifndef WIN32
+    u = umask(022);
+    (void) umask(u | 022);
+#endif
     if(!(pid_file = fopen(fname, "w"))) {
        perror("fopen");
         fprintf(stderr, "%s: could not log pid to file %s\n",
                ap_server_argv0, fname);
         exit(1);
     }
+#ifndef WIN32
+    (void) umask(u);
+#endif
     fprintf(pid_file, "%ld\n", (long)mypid);
     fclose(pid_file);
     saved_pid = mypid;
index 839f3c6..6442b24 100644 (file)
@@ -1629,7 +1629,7 @@ API_EXPORT(void) ap_unregister_other_child(void *data)
     for (pocr = &other_children; *pocr; pocr = &(*pocr)->next) {
        if ((*pocr)->data == data) {
            nocr = (*pocr)->next;
-           (*(*pocr)->maintenance) (OC_REASON_UNREGISTER, (*pocr)->data, -1);
+           (*(*pocr)->maintenance) (OC_REASON_UNREGISTER, (*pocr)->data, (ap_wait_t)-1);
            *pocr = nocr;
            /* XXX: um, well we've just wasted some space in pconf ? */
            return;
@@ -1685,7 +1685,7 @@ static void probe_writable_fds(void)
            continue;
        if (FD_ISSET(ocr->write_fd, &writable_fds))
            continue;
-       (*ocr->maintenance) (OC_REASON_UNWRITABLE, ocr->data, -1);
+       (*ocr->maintenance) (OC_REASON_UNWRITABLE, ocr->data, (ap_wait_t)-1);
     }
 }
 
@@ -2507,16 +2507,16 @@ static void reclaim_child_processes(int terminate)
            waitret = waitpid(ocr->pid, &status, WNOHANG);
            if (waitret == ocr->pid) {
                ocr->pid = -1;
-               (*ocr->maintenance) (OC_REASON_DEATH, ocr->data, status);
+               (*ocr->maintenance) (OC_REASON_DEATH, ocr->data, (ap_wait_t)status);
            }
            else if (waitret == 0) {
-               (*ocr->maintenance) (OC_REASON_RESTART, ocr->data, -1);
+               (*ocr->maintenance) (OC_REASON_RESTART, ocr->data, (ap_wait_t)-1);
                ++not_dead_yet;
            }
            else if (waitret == -1) {
                /* uh what the heck? they didn't call unregister? */
                ocr->pid = -1;
-               (*ocr->maintenance) (OC_REASON_LOST, ocr->data, -1);
+               (*ocr->maintenance) (OC_REASON_LOST, ocr->data, (ap_wait_t)-1);
            }
        }
 #endif
@@ -5078,6 +5078,11 @@ int REALMAIN(int argc, char *argv[])
 
     child_timeouts = !ap_standalone || one_process;
 
+#ifdef BEOS
+    /* make sure we're running in single_process mode - Yuck! */
+    one_process = 1;
+#endif
+
 #ifndef TPF
     if (ap_standalone) {
        ap_open_logs(server_conf, plog);
index 1622f08..76db20a 100644 (file)
 
 #endif /*CHARSET_EBCDIC*/
 
+/*
+ * Builds the content-type that should be sent to the client from the
+ * content-type specified.  The following rules are followed:
+ *    - if type is NULL, type is set to ap_default_type(r)
+ *    - if charset adding is disabled, stop processing and return type.
+ *    - then, if there are no parameters on type, add the default charset
+ *    - return type
+ */
+static const char *make_content_type(request_rec *r, const char *type) {
+    char *needcset[] = {
+       "text/plain",
+       "text/html",
+       NULL };
+    char **pcset;
+    core_dir_config *conf = (core_dir_config *)ap_get_module_config(
+       r->per_dir_config, &core_module);
+    if (!type) type = ap_default_type(r);
+    if (conf->add_default_charset != ADD_DEFAULT_CHARSET_ON) return type;
+
+    if (ap_strcasestr(type, "charset=") != NULL) {
+       /* already has parameter, do nothing */
+       /* XXX we don't check the validity */
+       ;
+    } else {
+       /* see if it makes sense to add the charset. At present,
+        * we only add it if the Content-type is one of needcset[]
+        */
+       for (pcset = needcset; *pcset ; pcset++)
+           if (ap_strcasestr(type, *pcset) != NULL) {
+               type = ap_pstrcat(r->pool, type, "; charset=", 
+                   conf->add_default_charset_name, NULL);
+               break;
+           }
+    }
+    return type;
+}
+
 static int parse_byterange(char *range, long clength, long *start, long *end)
 {
     char *dash = strchr(range, '-');
@@ -265,7 +302,7 @@ static int internal_byterange(int realreq, long *tlength, request_rec *r,
     }
 
     if (r->byterange > 1) {
-        const char *ct = r->content_type ? r->content_type : ap_default_type(r);
+        const char *ct = make_content_type(r, r->content_type);
         char ts[MAX_STRING_LEN];
 
         ap_snprintf(ts, sizeof(ts), "%ld-%ld/%ld", range_start, range_end,
@@ -929,7 +966,7 @@ static void get_mime_headers(request_rec *r)
             r->status = HTTP_BAD_REQUEST;
             ap_table_setn(r->notes, "error-notes", ap_pstrcat(r->pool,
                 "Size of a request header field exceeds server limit.<P>\n"
-                "<PRE>\n", field, "</PRE>\n", NULL));
+                "<PRE>\n", ap_escape_html(r->pool, field), "</PRE>\n", NULL));
             return;
         }
         copy = ap_palloc(r->pool, len + 1);
@@ -939,7 +976,7 @@ static void get_mime_headers(request_rec *r)
             r->status = HTTP_BAD_REQUEST;       /* or abort the bad request */
             ap_table_setn(r->notes, "error-notes", ap_pstrcat(r->pool,
                 "Request header field is missing colon separator.<P>\n"
-                "<PRE>\n", copy, "</PRE>\n", NULL));
+                "<PRE>\n", ap_escape_html(r->pool, copy), "</PRE>\n", NULL));
             return;
         }
 
@@ -1645,10 +1682,8 @@ API_EXPORT(void) ap_send_http_header(request_rec *r)
         ap_table_setn(r->headers_out, "Content-Type",
                   ap_pstrcat(r->pool, "multipart", use_range_x(r) ? "/x-" : "/",
                           "byteranges; boundary=", r->boundary, NULL));
-    else if (r->content_type)
-        ap_table_setn(r->headers_out, "Content-Type", r->content_type);
-    else
-        ap_table_setn(r->headers_out, "Content-Type", ap_default_type(r));
+    else ap_table_setn(r->headers_out, "Content-Type", make_content_type(r, 
+       r->content_type));
 
     if (r->content_encoding)
         ap_table_setn(r->headers_out, "Content-Encoding", r->content_encoding);
@@ -2559,7 +2594,7 @@ API_EXPORT(void) ap_send_error_response(request_rec *r, int recursive_error)
         r->content_languages = NULL;
         r->content_encoding = NULL;
         r->clength = 0;
-        r->content_type = "text/html";
+        r->content_type = "text/html; charset=iso-8859-1";
 
         if ((status == METHOD_NOT_ALLOWED) || (status == NOT_IMPLEMENTED))
             ap_table_setn(r->headers_out, "Allow", make_allow(r));
index c4fff1c..5b8fba0 100644 (file)
@@ -127,6 +127,8 @@ API_EXPORT(char *) ap_field_noparam(pool *p, const char *intype)
 {
     const char *semi;
 
+    if (intype == NULL) return NULL;
+
     semi = strchr(intype, ';');
     if (semi == NULL) {
        return ap_pstrdup(p, intype);
@@ -301,6 +303,38 @@ API_EXPORT(int) ap_is_matchexp(const char *str)
     return 0;
 }
 
+/*
+ * Similar to standard strstr() but we ignore case in this version.
+ * Based on the strstr() implementation further below.
+ */
+API_EXPORT(char *) ap_strcasestr(const char *s1, const char *s2)
+{
+    char *p1, *p2;
+    if (*s2 == '\0') {
+       /* an empty s2 */
+        return((char *)s1);
+    }
+    while(1) {
+       for ( ; (*s1 != '\0') && (ap_tolower(*s1) != ap_tolower(*s2)); s1++);
+       if (*s1 == '\0') return(NULL);
+       /* found first character of s2, see if the rest matches */
+        p1 = (char *)s1;
+        p2 = (char *)s2;
+        while (ap_tolower(*++p1) == ap_tolower(*++p2)) {
+            if (*p1 == '\0') {
+                /* both strings ended together */
+                return((char *)s1);
+            }
+        }
+        if (*p2 == '\0') {
+            /* second string ended, a match */
+            break;
+        }
+       /* didn't find a match here, try starting at next character in s1 */
+        s1++;
+    }
+    return((char *)s1);
+}
 /* 
  * Apache stub function for the regex libraries regexec() to make sure the
  * whole regex(3) API is available through the Apache (exported) namespace.
@@ -807,7 +841,11 @@ API_EXPORT(configfile_t *) ap_pcfg_openfile(pool *p, const char *name)
         return NULL;
     }
 
+#ifdef FOPEN_REQUIRES_T
     file = ap_pfopen(p, name, "rt");
+#else
+    file = ap_pfopen(p, name, "r");
+#endif
 #ifdef DEBUG
     saved_errno = errno;
     ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, NULL,
index 2f0fa83..18312ae 100644 (file)
@@ -87,7 +87,7 @@
  * Name: digest_auth_module
  * ConfigStart
 
-    RULE_DEV_RANDOM=`sh helpers/CutRule DEV_RANDOM $file`
+    RULE_DEV_RANDOM=`./helpers/CutRule DEV_RANDOM $file`
     if [ "$RULE_DEV_RANDOM" = "default" ]; then
        if [ -r "/dev/random" ]; then
            RULE_DEV_RANDOM="/dev/random"
index 0587ec3..ea2b0da 100644 (file)
@@ -247,6 +247,10 @@ static int proxy_fixup(request_rec *r)
 static void proxy_init(server_rec *r, pool *p)
 {
     ap_proxy_garbage_init(r, p);
+#ifdef EAPI
+    ap_hook_use("ap::mod_proxy::init", 
+                AP_HOOK_SIG3(void,ptr,ptr), AP_HOOK_ALL, r, p);
+#endif
 }
 
 #ifdef EAPI
index 78a889a..b08dca9 100644 (file)
@@ -189,6 +189,9 @@ int ap_proxy_http_handler(request_rec *r, cache_req *c, char *url,
     const char *urlptr = NULL;
     const char *datestr;
     struct tbl_do_args tdo;
+#ifdef EAPI
+    char *peer;
+#endif
 
     void *sconf = r->server->module_config;
     proxy_server_conf *conf =
@@ -249,12 +252,18 @@ int ap_proxy_http_handler(request_rec *r, cache_req *c, char *url,
        err = ap_proxy_host2addr(proxyhost, &server_hp);
        if (err != NULL)
            return DECLINED;    /* try another */
+#ifdef EAPI
+       peer = ap_psprintf(p, "%s:%u", proxyhost, proxyport);  
+#endif
     }
     else {
        server.sin_port = htons(destport);
        err = ap_proxy_host2addr(desthost, &server_hp);
        if (err != NULL)
            return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, err);
+#ifdef EAPI
+       peer =  ap_psprintf(p, "%s:%u", desthost, destport);  
+#endif
     }
 
     sock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
@@ -315,9 +324,9 @@ int ap_proxy_http_handler(request_rec *r, cache_req *c, char *url,
     {
         char *errmsg = NULL;
         ap_hook_use("ap::mod_proxy::http::handler::new_connection", 
-                    AP_HOOK_SIG3(ptr,ptr,ptr), 
+                    AP_HOOK_SIG4(ptr,ptr,ptr,ptr), 
                     AP_HOOK_DECLINE(NULL),
-                    &errmsg, r, f);
+                    &errmsg, r, f, peer);
         if (errmsg != NULL)
             return ap_proxyerror(r, HTTP_BAD_GATEWAY, errmsg);
     }
index 52f8f50..d1d4720 100644 (file)
@@ -844,11 +844,15 @@ int ap_proxyerror(request_rec *r, int statuscode, const char *message)
     ap_table_setn(r->notes, "error-notes",
                  ap_pstrcat(r->pool, 
                             "The proxy server could not handle the request "
-                            "<EM><A HREF=\"", r->uri, "\">",
-                            r->method, "&nbsp;", r->uri, "</A></EM>.<P>\n"
-                            "Reason: <STRONG>", message, "</STRONG>", NULL));
-
-    /* Allow the "error-notes" string to be printed by ap_send_error_response() */
+                            "<EM><A HREF=\"", ap_escape_uri(r->pool, r->uri),
+                            "\">", ap_escape_html(r->pool, r->method),
+                            "&nbsp;", 
+                            ap_escape_html(r->pool, r->uri), "</A></EM>.<P>\n"
+                            "Reason: <STRONG>",
+                            ap_escape_html(r->pool, message), 
+                            "</STRONG>", NULL));
+
+    /* Allow "error-notes" string to be printed by ap_send_error_response() */
     ap_table_setn(r->notes, "verbose-error-to", ap_pstrdup(r->pool, "*"));
 
     r->status_line = ap_psprintf(r->pool, "%3.3u Proxy Error", statuscode);
index 503ad23..a960a3e 100644 (file)
@@ -171,6 +171,16 @@ ssl_expr_parse.c ssl_expr_parse.h: ssl_expr_parse.y
        sed -e 's;yy;ssl_expr_yy;g' \
            <y.tab.h >ssl_expr_parse.h && rm -f y.tab.h
 
+nocons:
+       @$(MAKE) $(MFLAGS) $(MFLAGS_STATIC) \
+            SSL_CFLAGS="`echo $(SSL_CFLAGS) |\
+            sed -e 's;-DSSL_CONSERVATIVE;;'`" all
+
+cons:
+       @$(MAKE) $(MFLAGS) $(MFLAGS_STATIC) \
+            SSL_CFLAGS="`echo $(SSL_CFLAGS) |\
+            sed -e 's;-DSSL_CONSERVATIVE;;' \
+                -e 's;^;-DSSL_CONSERVATIVE ;'`" all
 noexp:
        @$(MAKE) $(MFLAGS) $(MFLAGS_STATIC) \
             SSL_CFLAGS="`echo $(SSL_CFLAGS) |\
index 416af28..4b6679e 100644 (file)
@@ -7,7 +7,7 @@
  mod_ssl                               ``Ralf Engelschall has released an
  Apache Interface to OpenSSL             excellent module that integrates
  http://www.modssl.org/                  Apache and SSLeay.''                 
- Version 2.5                                               -- Tim J. Hudson
+ Version 2.6                                               -- Tim J. Hudson
                                            
  SYNOPSIS
 
index d30b2d3..dbb0248 100644 (file)
@@ -142,11 +142,11 @@ ConfigStart
         my_rule_SSL_CONSERVATIVE=$SSL_CONSERVATIVE
         my_rule_SSL_VENDOR=$SSL_VENDOR
     else
-        my_rule_SSL_COMPAT=`sh helpers/CutRule SSL_COMPAT $file`
-        my_rule_SSL_SDBM=`sh helpers/CutRule SSL_SDBM $file`
-        my_rule_SSL_EXPERIMENTAL=`sh helpers/CutRule SSL_EXPERIMENTAL $file`
-        my_rule_SSL_CONSERVATIVE=`sh helpers/CutRule SSL_CONSERVATIVE $file`
-        my_rule_SSL_VENDOR=`sh helpers/CutRule SSL_VENDOR $file`
+        my_rule_SSL_COMPAT=`./helpers/CutRule SSL_COMPAT $file`
+        my_rule_SSL_SDBM=`./helpers/CutRule SSL_SDBM $file`
+        my_rule_SSL_EXPERIMENTAL=`./helpers/CutRule SSL_EXPERIMENTAL $file`
+        my_rule_SSL_CONSERVATIVE=`./helpers/CutRule SSL_CONSERVATIVE $file`
+        my_rule_SSL_VENDOR=`./helpers/CutRule SSL_VENDOR $file`
     fi
 
     #
@@ -208,7 +208,7 @@ ConfigStart
         if [ ".$DBM_LIB" != . ]; then
             LIBS_ORIG="$LIBS"
             LIBS="$LIBS $DBM_LIB"
-            if sh helpers/TestCompile func dbm_open; then
+            if ./helpers/TestCompile func dbm_open; then
                 SSL_DBM_NAME="Configured DBM ($DBM_LIB)"
                 SSL_DBM_FLAG="$DBM_LIB"
             fi
@@ -216,13 +216,13 @@ ConfigStart
         fi
         #   2. check for various vendor DBM libs
         if [ ".$SSL_DBM_NAME" = . ]; then
-            if sh helpers/TestCompile func dbm_open; then
+            if ./helpers/TestCompile func dbm_open; then
                 SSL_DBM_NAME='Vendor DBM (libc)'
                 SSL_DBM_FLAG=''
-            elif sh helpers/TestCompile lib dbm dbm_open; then
+            elif ./helpers/TestCompile lib dbm dbm_open; then
                 SSL_DBM_NAME='Vendor DBM (libdbm)'
                 SSL_DBM_FLAG='-ldbm'
-            elif sh helpers/TestCompile lib ndbm dbm_open; then
+            elif ./helpers/TestCompile lib ndbm dbm_open; then
                 SSL_DBM_NAME='Vendor DBM (libndbm)'
                 SSL_DBM_FLAG='-lndbm'
             fi
@@ -272,7 +272,11 @@ ConfigStart
     if [ ".$SSL_BASE" = . ]; then
         SSL_BASE=`egrep '^SSL_BASE=' $file | tail -1 | awk -F= '{print $2}'`
         if [ ".$SSL_BASE" = . ]; then
-            SSL_BASE="/usr/local/ssl"
+            if [ -d /usr/local/ssl ]; then
+                SSL_BASE="/usr/local/ssl"
+            else
+                SSL_BASE="SYSTEM"
+            fi
         fi
     fi
     case $SSL_BASE in
@@ -391,10 +395,10 @@ ConfigStart
             exit 1
         fi
     else
-        if [ -f "$SSL_BASE/libssl.a" ]; then
+        if [ -f "$SSL_BASE/libssl.a" -o -f "$SSL_BASE/libssl.so" ]; then
             SSL_LIBDIR='$(SSL_BASE)'
             my_real_ssl_libdir="$SSL_BASE"
-        elif [ -f "$SSL_BASE/lib/libssl.a" ]; then
+        elif [ -f "$SSL_BASE/lib/libssl.a" -o -f "$SSL_BASE/lib/libssl.so" ]; then
             SSL_LIBDIR='$(SSL_BASE)/lib'
             my_real_ssl_libdir="$SSL_BASE/lib"
         else
index 92ebad8..d872b67 100644 (file)
@@ -74,7 +74,7 @@
  *  identify the module to SCCS `what' and RCS `ident' commands
  */
 static char const sccsid[] = "@(#) mod_ssl/" MOD_SSL_VERSION " >";
-static char const rcsid[]  = "$Id: mod_ssl.c,v 1.3 2000/01/25 18:29:53 beck Exp $";
+static char const rcsid[]  = "$Id: mod_ssl.c,v 1.4 2000/03/19 11:17:20 beck Exp $";
 
 /*
  *  the table of configuration directives we provide
@@ -154,6 +154,36 @@ static command_rec ssl_config_cmds[] = {
                "Enable or disable various SSL protocols"
                "(`[+-][SSLv2|SSLv3|TLSv1] ...' - see manual)")
 
+#ifdef SSL_EXPERIMENTAL
+    /* 
+     * Proxy configuration for remote SSL connections
+     */
+    AP_SRV_CMD(ProxyProtocol, RAW_ARGS,
+               "SSL Proxy: enable or disable SSL protocol flavors "
+               "(`[+-][SSLv2|SSLv3|TLSv1] ...' - see manual)")
+    AP_SRV_CMD(ProxyCipherSuite, TAKE1,
+               "SSL Proxy: colon-delimited list of permitted SSL ciphers "
+               "(`XXX:...:XXX' - see manual)")
+    AP_SRV_CMD(ProxyVerify, FLAG,
+               "SSL Proxy: whether to verify the remote certificate "
+               "(`on' or `off')")
+    AP_SRV_CMD(ProxyVerifyDepth, TAKE1,
+               "SSL Proxy: maximum certificate verification depth "
+               "(`N' - number of intermediate certificates)")
+    AP_SRV_CMD(ProxyCACertificateFile, TAKE1,
+               "SSL Proxy: file containing server certificates "
+               "(`/path/to/file' - PEM encoded certificates)")
+    AP_SRV_CMD(ProxyCACertificatePath, TAKE1,
+               "SSL Proxy: directory containing server certificates "
+               "(`/path/to/dir' - contains PEM encoded certificates)")
+    AP_SRV_CMD(ProxyMachineCertificateFile, TAKE1,
+               "SSL Proxy: file containing client certificates "
+               "(`/path/to/file' - PEM encoded certificates)")
+    AP_SRV_CMD(ProxyMachineCertificatePath, TAKE1,
+               "SSL Proxy: directory containing client certificates "
+               "(`/path/to/dir' - contains PEM encoded certificates)")
+#endif
+
     /*
      * Per-directory context configuration directives
      */
index d564b66..3725844 100644 (file)
 #include <stdlib.h>
 #include <stdarg.h>
 #include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 #include <time.h>
 #ifndef WIN32
 #include <sys/time.h>
 #endif
-#include <sys/stat.h>
+#ifdef WIN32
+#include <wincrypt.h>
+#endif
 
 /* OpenSSL headers */
 #include <openssl/ssl.h>
@@ -497,6 +501,9 @@ typedef enum {
     SSL_RSSRC_BUILTIN = 1,
     SSL_RSSRC_FILE    = 2,
     SSL_RSSRC_EXEC    = 3
+#if SSL_LIBRARY_VERSION >= 0x00905100
+   ,SSL_RSSRC_EGD     = 4
+#endif
 } ssl_rssrc_t;
 typedef struct {
     ssl_rsctx_t  nCtx;
@@ -572,6 +579,19 @@ typedef struct {
     char        *szCARevocationPath;
     char        *szCARevocationFile;
     X509_STORE  *pRevocationStore;
+#ifdef SSL_EXPERIMENTAL
+    /* Configuration details for proxy operation */
+    ssl_proto_t  nProxyProtocol;
+    int          bProxyVerify;
+    int          nProxyVerifyDepth;
+    char        *szProxyCACertificatePath;
+    char        *szProxyCACertificateFile;
+    char        *szProxyClientCertificateFile;
+    char        *szProxyClientCertificatePath;
+    char        *szProxyCipherSuite;
+    SSL_CTX     *pSSLProxyCtx;
+    STACK_OF(X509_INFO) *skProxyClientCerts;
+#endif
 #ifdef SSL_VENDOR
     ap_ctx      *ctx;
 #endif
@@ -637,6 +657,16 @@ const char  *ssl_cmd_SSLProtocol(cmd_parms *, char *, const char *);
 const char  *ssl_cmd_SSLOptions(cmd_parms *, SSLDirConfigRec *, const char *);
 const char  *ssl_cmd_SSLRequireSSL(cmd_parms *, SSLDirConfigRec *, char *);
 const char  *ssl_cmd_SSLRequire(cmd_parms *, SSLDirConfigRec *, char *);
+#ifdef SSL_EXPERIMENTAL
+const char  *ssl_cmd_SSLProxyProtocol(cmd_parms *, char *, const char *);
+const char  *ssl_cmd_SSLProxyCipherSuite(cmd_parms *, char *, char *);
+const char  *ssl_cmd_SSLProxyVerify(cmd_parms *, char *, int);
+const char  *ssl_cmd_SSLProxyVerifyDepth(cmd_parms *, char *, char *);
+const char  *ssl_cmd_SSLProxyCACertificatePath(cmd_parms *, char *, char *);
+const char  *ssl_cmd_SSLProxyCACertificateFile(cmd_parms *, char *, char *);
+const char  *ssl_cmd_SSLProxyMachineCertificatePath(cmd_parms *, char *, char *);
+const char  *ssl_cmd_SSLProxyMachineCertificateFile(cmd_parms *, char *, char *);
+#endif
 
 /*  module initialization  */
 void         ssl_init_Module(server_rec *, pool *);
@@ -753,12 +783,12 @@ char        *ssl_var_lookup(pool *, server_rec *, conn_rec *, request_rec *, cha
 void         ssl_io_register(void);
 void         ssl_io_unregister(void);
 long         ssl_io_data_cb(BIO *, int, const char *, int, long, long);
-#ifdef SSL_EXPERIMENTAL
+#ifndef SSL_CONSERVATIVE
 void         ssl_io_suck(request_rec *, SSL *);
 #endif
 
 /*  PRNG  */
-int          ssl_rand_seed(server_rec *, pool *, ssl_rsctx_t);
+int          ssl_rand_seed(server_rec *, pool *, ssl_rsctx_t, char *);
 
 /*  Extensions  */
 void         ssl_ext_register(void);
index de92ab8..1f44f44 100644 (file)
@@ -78,6 +78,7 @@
  * The mapping of obsolete directives to official ones...
  */
 
+static char *ssl_compat_RequireSSL(pool *, const char *, const char *, const char *);
 static char *ssl_compat_SSLSessionLockFile(pool *, const char *, const char *, const char *);
 static char *ssl_compat_SSLCacheDisable(pool *, const char *, const char *, const char *);
 static char *ssl_compat_SSLRequireCipher(pool *, const char *, const char *, const char *);
@@ -152,23 +153,39 @@ static struct {
     CRM_ENTRY( CRM_CMD("SSLClientCAfile"),           CRM_SUB("SSLCACertificateFile")          )
     CRM_ENTRY( CRM_CMD("SSLSessionLockFile"),        CRM_CAL(ssl_compat_SSLSessionLockFile)   )
     CRM_ENTRY( CRM_CMD("SSLCacheDisable"),           CRM_CAL(ssl_compat_SSLCacheDisable)      )
-    CRM_ENTRY( CRM_CMD("RequireSSL"),                CRM_SUB("SSLRequireSSL")                 )
+    CRM_ENTRY( CRM_CMD("RequireSSL"),                CRM_CAL(ssl_compat_RequireSSL)           )
     CRM_ENTRY( CRM_CMD("SSLCipherList"),             CRM_SUB("SSLCipherSuite")                )
     CRM_ENTRY( CRM_CMD("SSLErrorFile"),              CRM_LOG("Not needed for mod_ssl")        )
     CRM_ENTRY( CRM_CMD("SSLRoot"),                   CRM_LOG("Not supported by mod_ssl")      )
     CRM_ENTRY( CRM_CMD("SSL_CertificateLogDir"),     CRM_LOG("Not supported by mod_ssl")      )
     CRM_ENTRY( CRM_CMD("AuthCertDir"),               CRM_LOG("Not supported by mod_ssl")      )
     CRM_ENTRY( CRM_CMD("SSL_Group"),                 CRM_LOG("Not supported by mod_ssl")      )
+#ifndef SSL_EXPERIMENTAL
     CRM_ENTRY( CRM_CMD("SSLProxyMachineCertPath"),   CRM_LOG("Not supported by mod_ssl")      )
     CRM_ENTRY( CRM_CMD("SSLProxyMachineCertFile"),   CRM_LOG("Not supported by mod_ssl")      )
     CRM_ENTRY( CRM_CMD("SSLProxyCACertificatePath"), CRM_LOG("Not supported by mod_ssl")      )
     CRM_ENTRY( CRM_CMD("SSLProxyCACertificateFile"), CRM_LOG("Not supported by mod_ssl")      )
     CRM_ENTRY( CRM_CMD("SSLProxyVerifyDepth"),       CRM_LOG("Not supported by mod_ssl")      )
     CRM_ENTRY( CRM_CMD("SSLProxyCipherList"),        CRM_LOG("Not supported by mod_ssl")      )
+#else
+    CRM_ENTRY( CRM_CMD("SSLProxyCipherList"),        CRM_SUB("SSLProxyCipherSuite")           )
+#endif
 
     CRM_END
 };
 
+static char *ssl_compat_RequireSSL(
+    pool *p, const char *oline, const char *cmd, const char *args)
+{
+    char *cp;
+    
+    for (cp = (char *)args; ap_isspace(*cp); cp++)
+        ;
+    if (strcEQ(cp, "on"))
+        return "SSLRequireSSL";
+    return "";
+}
+
 static char *ssl_compat_SSLSessionLockFile(
     pool *p, const char *oline, const char *cmd, const char *args)
 {
index 3fdc86e..9f62ee6 100644 (file)
@@ -206,6 +206,18 @@ void *ssl_config_server_create(pool *p, server_rec *s)
     sc->szCARevocationFile     = NULL;
     sc->pRevocationStore       = NULL;
 
+#ifdef SSL_EXPERIMENTAL
+    sc->nProxyVerifyDepth             = UNSET;
+    sc->szProxyCACertificatePath      = NULL;
+    sc->szProxyCACertificateFile      = NULL;
+    sc->szProxyClientCertificateFile  = NULL;
+    sc->szProxyClientCertificatePath  = NULL;
+    sc->szProxyCipherSuite            = NULL;
+    sc->nProxyProtocol                = SSL_PROTOCOL_ALL & ~SSL_PROTOCOL_TLSV1;
+    sc->bProxyVerify                  = UNSET;
+    sc->pSSLProxyCtx                  = NULL;
+#endif
+
     (void)memset(sc->szPublicCertFile, 0, SSL_AIDX_MAX*sizeof(char *));
     (void)memset(sc->szPrivateKeyFile, 0, SSL_AIDX_MAX*sizeof(char *));
     (void)memset(sc->pPublicCert, 0, SSL_AIDX_MAX*sizeof(X509 *));
@@ -264,6 +276,18 @@ void *ssl_config_server_merge(pool *p, void *basev, void *addv)
                 p, base, add, new);
 #endif
 
+#ifdef SSL_EXPERIMENTAL
+    cfgMergeInt(nProxyVerifyDepth);
+    cfgMergeString(szProxyCACertificatePath);
+    cfgMergeString(szProxyCACertificateFile);
+    cfgMergeString(szProxyClientCertificateFile);
+    cfgMergeString(szProxyClientCertificatePath);
+    cfgMergeString(szProxyCipherSuite);
+    cfgMerge(nProxyProtocol, (SSL_PROTOCOL_ALL & ~SSL_PROTOCOL_TLSV1));
+    cfgMergeBool(bProxyVerify);
+    cfgMerge(pSSLProxyCtx, NULL);
+#endif
+
     return new;
 }
 
@@ -443,6 +467,12 @@ const char *ssl_cmd_SSLRandomSeed(
         pRS->nSrc   = SSL_RSSRC_EXEC;
         pRS->cpPath = ap_pstrdup(mc->pPool, ap_server_root_relative(cmd->pool, arg2+5));
     }
+#if SSL_LIBRARY_VERSION >= 0x00905100
+    else if (strlen(arg2) > 4 && strEQn(arg2, "egd:", 4)) {
+        pRS->nSrc   = SSL_RSSRC_EGD;
+        pRS->cpPath = ap_pstrdup(mc->pPool, ap_server_root_relative(cmd->pool, arg2+4));
+    }
+#endif
     else if (strcEQ(arg2, "builtin")) {
         pRS->nSrc   = SSL_RSSRC_BUILTIN;
         pRS->cpPath = NULL;
@@ -872,3 +902,133 @@ const char *ssl_cmd_SSLProtocol(
     return NULL;
 }
 
+#ifdef SSL_EXPERIMENTAL
+
+const char *ssl_cmd_SSLProxyProtocol(
+    cmd_parms *cmd, char *struct_ptr, const char *opt)
+{
+    SSLSrvConfigRec *sc;
+    ssl_proto_t options, thisopt;
+    char action;
+    char *w;
+
+    sc = mySrvConfig(cmd->server);
+    options = SSL_PROTOCOL_NONE;
+    while (opt[0] != NUL) {
+        w = ap_getword_conf(cmd->pool, &opt);
+
+        action = NUL;
+        if (*w == '+' || *w == '-')
+            action = *(w++);
+
+        if (strcEQ(w, "SSLv2"))
+            thisopt = SSL_PROTOCOL_SSLV2;
+        else if (strcEQ(w, "SSLv3"))
+            thisopt = SSL_PROTOCOL_SSLV3;
+        else if (strcEQ(w, "TLSv1"))
+            thisopt = SSL_PROTOCOL_TLSV1;
+        else if (strcEQ(w, "all"))
+            thisopt = SSL_PROTOCOL_ALL;
+        else
+            return ap_pstrcat(cmd->pool, "SSLProxyProtocol: "
+                              "Illegal protocol '", w, "'", NULL);
+        if (action == '-')
+            options &= ~thisopt;
+        else if (action == '+')
+            options |= thisopt;
+        else
+            options = thisopt;
+    }
+    sc->nProxyProtocol = options;
+    return NULL;
+}
+
+const char *ssl_cmd_SSLProxyCipherSuite(
+    cmd_parms *cmd, char *struct_ptr, char *arg)
+{
+    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
+
+    sc->szProxyCipherSuite = arg;
+    return NULL;
+}
+
+const char *ssl_cmd_SSLProxyVerify(
+    cmd_parms *cmd, char *struct_ptr, int flag)
+{
+    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
+
+    sc->bProxyVerify = (flag ? TRUE : FALSE);
+    return NULL;
+}
+
+const char *ssl_cmd_SSLProxyVerifyDepth(
+    cmd_parms *cmd, char *struct_ptr, char *arg)
+{
+    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
+    int d;
+
+    d = atoi(arg);
+    if (d < 0)
+        return "SSLProxyVerifyDepth: Invalid argument";
+    sc->nProxyVerifyDepth = d;
+    return NULL;
+}
+
+const char *ssl_cmd_SSLProxyCACertificateFile(
+    cmd_parms *cmd, char *struct_ptr, char *arg)
+{
+    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
+    char *cpPath;
+
+    cpPath = ap_server_root_relative(cmd->pool, arg);
+    if (!ssl_util_path_check(SSL_PCM_EXISTS|SSL_PCM_ISREG|SSL_PCM_ISNONZERO, cpPath))
+        return ap_pstrcat(cmd->pool, "SSLProxyCACertificateFile: file '",
+                          cpPath, "' not exists or empty", NULL);
+    sc->szProxyCACertificateFile = cpPath;
+    return NULL;
+}
+
+const char *ssl_cmd_SSLProxyCACertificatePath(
+    cmd_parms *cmd, char *struct_ptr, char *arg)
+{
+    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
+    char *cpPath;
+
+    cpPath = ap_server_root_relative(cmd->pool, arg);
+    if (!ssl_util_path_check(SSL_PCM_EXISTS|SSL_PCM_ISDIR, cpPath))
+        return ap_pstrcat(cmd->pool, "SSLProxyCACertificatePath: directory '",
+                          cpPath, "' does not exists", NULL);
+    sc->szProxyCACertificatePath = cpPath;
+    return NULL;
+}
+
+const char *ssl_cmd_SSLProxyMachineCertificateFile(
+    cmd_parms *cmd, char *struct_ptr, char *arg)
+{
+    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
+    char *cpPath;
+
+    cpPath = ap_server_root_relative(cmd->pool, arg);
+    if (!ssl_util_path_check(SSL_PCM_EXISTS|SSL_PCM_ISREG|SSL_PCM_ISNONZERO, cpPath))
+        return ap_pstrcat(cmd->pool, "SSLProxyMachineCertFile: file '",
+                          cpPath, "' not exists or empty", NULL);
+    sc->szProxyClientCertificateFile = cpPath;
+    return NULL;
+}
+
+const char *ssl_cmd_SSLProxyMachineCertificatePath(
+    cmd_parms *cmd, char *struct_ptr, char *arg)
+{
+    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
+    char *cpPath;
+
+    cpPath = ap_server_root_relative(cmd->pool, arg);
+    if (!ssl_util_path_check(SSL_PCM_EXISTS|SSL_PCM_ISDIR, cpPath))
+        return ap_pstrcat(cmd->pool, "SSLProxyMachineCertPath: directory '",
+                          cpPath, "' does not exists", NULL);
+    sc->szProxyClientCertificatePath = cpPath;
+    return NULL;
+}
+
+#endif /* SSL_EXPERIMENTAL */
+
index 87a550c..4709218 100644 (file)
@@ -213,18 +213,27 @@ static char *ssl_ext_mr_lookup_variable(request_rec *r, char *var)
 **  _________________________________________________________________
 */
 
-static int   ssl_ext_mp_canon(request_rec *r, char *url);
-static int   ssl_ext_mp_handler(request_rec *r, void *cr, char *url, char *proxyhost, int proxyport, char *protocol);
-static int   ssl_ext_mp_set_destport(request_rec *r);
-static char *ssl_ext_mp_new_connection(request_rec *r, BUFF *fb);
-static void  ssl_ext_mp_close_connection(void *_fb);
-static int   ssl_ext_mp_write_host_header(request_rec *r, BUFF *fb, char *host, int port, char *portstr);
+static int   ssl_ext_mp_canon(request_rec *, char *);
+static int   ssl_ext_mp_handler(request_rec *, void *, char *, char *, int, char *);
+static int   ssl_ext_mp_set_destport(request_rec *);
+static char *ssl_ext_mp_new_connection(request_rec *, BUFF *, char *);
+static void  ssl_ext_mp_close_connection(void *);
+static int   ssl_ext_mp_write_host_header(request_rec *, BUFF *, char *, int, char *);
+#ifdef SSL_EXPERIMENTAL
+static void  ssl_ext_mp_init(server_rec *, pool *);
+static int   ssl_ext_mp_verify_cb(int, X509_STORE_CTX *);
+static int   ssl_ext_mp_clientcert_cb(SSL *, X509 **, EVP_PKEY **);
+#endif
 
 /*
  * register us ...
  */
 static void ssl_ext_mp_register(void)
 {
+#ifdef SSL_EXPERIMENTAL
+    ap_hook_register("ap::mod_proxy::init",
+                     ssl_ext_mp_init, AP_HOOK_NOCTX);
+#endif
     ap_hook_register("ap::mod_proxy::canon",
                      ssl_ext_mp_canon, AP_HOOK_NOCTX);
     ap_hook_register("ap::mod_proxy::handler",
@@ -240,6 +249,9 @@ static void ssl_ext_mp_register(void)
 
 static void ssl_ext_mp_unregister(void)
 {
+#ifdef SSL_EXPERIMENTAL
+    ap_hook_unregister("ap::mod_proxy::init", ssl_ext_mp_init);
+#endif
     ap_hook_unregister("ap::mod_proxy::canon", ssl_ext_mp_canon);
     ap_hook_unregister("ap::mod_proxy::handler", ssl_ext_mp_handler);
     ap_hook_unregister("ap::mod_proxy::http::handler::set_destport",
@@ -251,6 +263,145 @@ static void ssl_ext_mp_unregister(void)
     return;
 }
 
+/*
+ * SSL proxy initialization
+ */
+#ifdef SSL_EXPERIMENTAL
+static void ssl_ext_mp_init(server_rec *s, pool *p)
+{
+    SSLSrvConfigRec *sc;
+    char *cpVHostID;
+    int nVerify;
+    SSL_CTX *ctx;
+    char *cp;
+    STACK_OF(X509_INFO) *sk;
+
+    /*
+     * Initialize each virtual server 
+     */
+    for (; s != NULL; s = s->next) {
+        sc = mySrvConfig(s);
+        cpVHostID = ssl_util_vhostid(p, s);
+        
+        if (sc->bProxyVerify == UNSET)
+            sc->bProxyVerify = FALSE;
+
+        /*
+         *  Create new SSL context and configure callbacks
+         */
+        if (sc->nProxyProtocol == SSL_PROTOCOL_NONE) {
+            ssl_log(s, SSL_LOG_ERROR,
+                    "Init: (%s) No Proxy SSL protocols available [hint: SSLProxyProtocol]",
+                    cpVHostID);
+            ssl_die();
+        }
+        cp = ap_pstrcat(p, (sc->nProxyProtocol & SSL_PROTOCOL_SSLV2 ? "SSLv2, " : ""), 
+                           (sc->nProxyProtocol & SSL_PROTOCOL_SSLV3 ? "SSLv3, " : ""), 
+                           (sc->nProxyProtocol & SSL_PROTOCOL_TLSV1 ? "TLSv1, " : ""), NULL);
+        cp[strlen(cp)-2] = NUL;
+        ssl_log(s, SSL_LOG_TRACE, 
+                "Init: (%s) Creating new proxy SSL context (protocols: %s)", 
+                cpVHostID, cp);
+        if (sc->nProxyProtocol == SSL_PROTOCOL_SSLV2)
+            ctx = SSL_CTX_new(SSLv2_client_method());  /* only SSLv2 is left */ 
+        else
+            ctx = SSL_CTX_new(SSLv23_client_method()); /* be more flexible */
+        if (ctx == NULL) {
+            ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
+                    "Init: (%s) Unable to create SSL Proxy context", cpVHostID);
+            ssl_die();
+        }
+        sc->pSSLProxyCtx = ctx;
+        SSL_CTX_set_options(ctx, SSL_OP_ALL);
+        if (!(sc->nProxyProtocol & SSL_PROTOCOL_SSLV2))
+            SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
+        if (!(sc->nProxyProtocol & SSL_PROTOCOL_SSLV3))
+            SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3);
+        if (!(sc->nProxyProtocol & SSL_PROTOCOL_TLSV1)) 
+            SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1);
+
+        if (sc->szProxyClientCertificateFile || sc->szProxyClientCertificatePath) {
+            sk = sk_X509_INFO_new_null();
+            if (sc->szProxyClientCertificateFile) 
+                SSL_load_CrtAndKeyInfo_file(p, sk, sc->szProxyClientCertificateFile);
+            if (sc->szProxyClientCertificatePath)
+                SSL_load_CrtAndKeyInfo_path(p, sk, sc->szProxyClientCertificatePath);
+            ssl_log(s, SSL_LOG_TRACE, "Init: (%s) loaded %d client certs for SSL proxy",
+                    cpVHostID, sk_X509_INFO_num(sk));
+            if (sk_X509_INFO_num(sk) > 0) {
+                SSL_CTX_set_client_cert_cb(ctx, ssl_ext_mp_clientcert_cb);
+                sc->skProxyClientCerts = sk;
+            }
+        }
+
+        /*
+         * Calculate OpenSSL verify type for verifying the remote server
+         * certificate. We either verify it against our list of CA's, or don't
+         * bother at all.
+         */
+        nVerify = SSL_VERIFY_NONE;
+        if (sc->bProxyVerify)
+            nVerify |= SSL_VERIFY_PEER;
+        if (   nVerify & SSL_VERIFY_PEER 
+            && sc->szProxyCACertificateFile == NULL 
+            && sc->szProxyCACertificatePath == NULL) {
+            ssl_log(s, SSL_LOG_ERROR,
+                    "Init: (%s) SSLProxyVerify set to On but no CA certificates configured",
+                    cpVHostID);
+            ssl_die();
+        }
+        if (   nVerify & SSL_VERIFY_NONE
+            && (   sc->szProxyCACertificateFile != NULL
+                || sc->szProxyCACertificatePath != NULL)) {
+            ssl_log(s, SSL_LOG_WARN, 
+                    "init: (%s) CA certificates configured but ignored because SSLProxyVerify is Off",
+                    cpVHostID);
+        }
+        SSL_CTX_set_verify(ctx, nVerify, ssl_ext_mp_verify_cb);
+
+        /*
+         * Enable session caching. We can safely use the same cache
+         * as used for communicating with the other clients.
+         */
+        SSL_CTX_sess_set_new_cb(sc->pSSLProxyCtx,    ssl_callback_NewSessionCacheEntry);
+        SSL_CTX_sess_set_get_cb(sc->pSSLProxyCtx,    ssl_callback_GetSessionCacheEntry);
+        SSL_CTX_sess_set_remove_cb(sc->pSSLProxyCtx, ssl_callback_DelSessionCacheEntry);
+
+        /*
+         *  Configure SSL Cipher Suite
+         */
+        ssl_log(s, SSL_LOG_TRACE,
+                "Init: (%s) Configuring permitted SSL ciphers for SSL proxy", cpVHostID);
+        if (sc->szProxyCipherSuite != NULL) {
+            if (!SSL_CTX_set_cipher_list(sc->pSSLProxyCtx, sc->szProxyCipherSuite)) {
+                ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR,
+                        "Init: (%s) Unable to configure permitted SSL ciphers for SSL Proxy",
+                        cpVHostID);
+                ssl_die();
+            }
+        }
+
+        /*
+         * Configure Client Authentication details
+         */
+        if (sc->szProxyCACertificateFile != NULL || sc->szProxyCACertificatePath != NULL) {
+             ssl_log(s, SSL_LOG_DEBUG, 
+                     "Init: (%s) Configuring client verification locations for SSL Proxy", 
+                     cpVHostID);
+             if (!SSL_CTX_load_verify_locations(sc->pSSLProxyCtx,
+                                                sc->szProxyCACertificateFile,
+                                                sc->szProxyCACertificatePath)) {
+                 ssl_log(s, SSL_LOG_ERROR|SSL_ADD_SSLERR, 
+                         "Init: (%s) Unable to configure SSL verify locations for SSL proxy",
+                         cpVHostID);
+                 ssl_die();
+             }
+        }
+    }
+    return;
+}
+#endif /* SSL_EXPERIMENTAL */
+
 static int ssl_ext_mp_canon(request_rec *r, char *url)
 {
     int rc;
@@ -289,39 +440,66 @@ static int ssl_ext_mp_set_destport(request_rec *r)
         return DEFAULT_HTTP_PORT;
 }
 
-static char *ssl_ext_mp_new_connection(request_rec *r, BUFF *fb)
+static char *ssl_ext_mp_new_connection(request_rec *r, BUFF *fb, char *peer)
 {
+#ifndef SSL_EXPERIMENTAL
     SSL_CTX *ssl_ctx;
+#endif
     SSL *ssl;
     char *errmsg;
     int rc;
     char *cpVHostID;
     char *cpVHostMD5;
+#ifdef SSL_EXPERIMENTAL
+    SSLSrvConfigRec *sc;
+    char *cp;
+#endif
 
     if (ap_ctx_get(r->ctx, "ssl::proxy::enabled") == PFALSE)
         return NULL;
+
+    /*
+     * Find context
+     */
+#ifdef SSL_EXPERIMENTAL
+    sc = mySrvConfig(r->server);
+#endif
     cpVHostID = ssl_util_vhostid(r->pool, r->server);
 
     /*
      * Create a SSL context and handle
      */
+#ifdef SSL_EXPERIMENTAL
+    ssl = SSL_new(sc->pSSLProxyCtx);
+#else
     ssl_ctx = SSL_CTX_new(SSLv23_client_method());
-    if ((ssl = SSL_new(ssl_ctx)) == NULL) {
-        errmsg = ap_pstrcat(r->pool, "SSL new failed (%s): ", cpVHostID,
-                            ERR_reason_error_string(ERR_get_error()), NULL);
+    ssl = SSL_new(ssl_ctx);
+#endif
+    if (ssl == NULL) {
+        errmsg = ap_psprintf(r->pool, "SSL proxy new failed (%s): peer %s: %s",
+                             cpVHostID, peer, ERR_reason_error_string(ERR_get_error()));
         ap_ctx_set(fb->ctx, "ssl", NULL);
         return errmsg;
     }
     SSL_clear(ssl);
     cpVHostMD5 = ap_md5(r->pool, cpVHostID);
     if (!SSL_set_session_id_context(ssl, (unsigned char *)cpVHostMD5, strlen(cpVHostMD5))) {
-        errmsg = ap_pstrcat(r->pool, "Unable to set session id context to `%s': ", cpVHostMD5,
-                            ERR_reason_error_string(ERR_get_error()), NULL);
+        errmsg = ap_psprintf(r->pool, "Unable to set session id context to `%s': peer %s: %s",
+                             cpVHostMD5, peer, ERR_reason_error_string(ERR_get_error()));
         ap_ctx_set(fb->ctx, "ssl", NULL);
         return errmsg;
     }
     SSL_set_fd(ssl, fb->fd);
+#ifdef SSL_EXPERIMENTAL
+    SSL_set_app_data(ssl, fb->ctx);
+#endif
     ap_ctx_set(fb->ctx, "ssl", ssl);
+#ifdef SSL_EXPERIMENTAL
+    ap_ctx_set(fb->ctx, "ssl::proxy::server_rec", r->server);
+    ap_ctx_set(fb->ctx, "ssl::proxy::peer", peer);
+    ap_ctx_set(fb->ctx, "ssl::proxy::servername", cpVHostID);
+    ap_ctx_set(fb->ctx, "ssl::proxy::verifyerror", NULL);
+#endif
 
     /*
      * Give us a chance to gracefully close the connection
@@ -333,8 +511,19 @@ static char *ssl_ext_mp_new_connection(request_rec *r, BUFF *fb)
      * Establish the SSL connection
      */
     if ((rc = SSL_connect(ssl)) <= 0) {
-        errmsg = ap_pstrcat(r->pool, "SSL connect failed (%s): ", cpVHostID,
-                            ERR_reason_error_string(ERR_get_error()), NULL);
+#ifdef SSL_EXPERIMENTAL
+        if ((cp = (char *)ap_ctx_get(fb->ctx, "ssl::proxy::verifyerror")) != NULL) {
+            SSL_set_shutdown(ssl, SSL_RECEIVED_SHUTDOWN); 
+            SSL_smart_shutdown(ssl);
+            SSL_free(ssl);
+            ap_ctx_set(fb->ctx, "ssl", NULL);
+            ap_bsetflag(fb, B_EOF|B_EOUT, 1);
+            return NULL;
+        }
+#endif
+        errmsg = ap_psprintf(r->pool, "SSL proxy connect failed (%s): peer %s: %s",
+                             cpVHostID, peer, ERR_reason_error_string(ERR_get_error()));
+        ssl_log(r->server, SSL_LOG_ERROR, errmsg);
         SSL_free(ssl);
         ap_ctx_set(fb->ctx, "ssl", NULL);
         return errmsg;
@@ -347,13 +536,17 @@ static void ssl_ext_mp_close_connection(void *_fb)
 {
     BUFF *fb = _fb;
     SSL *ssl;
+    SSL_CTX *ctx;
 
     ssl = ap_ctx_get(fb->ctx, "ssl");
     if (ssl != NULL) {
+        ctx = SSL_get_SSL_CTX(ssl);
         SSL_set_shutdown(ssl, SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
         SSL_smart_shutdown(ssl);
         SSL_free(ssl);
         ap_ctx_set(fb->ctx, "ssl", NULL);
+        if (ctx != NULL)
+            SSL_CTX_free(ctx);
     }
     return;
 }
@@ -371,6 +564,183 @@ static int ssl_ext_mp_write_host_header(
     return DECLINED;
 }
 
+#ifdef SSL_EXPERIMENTAL
+
+/* 
+ * Callback for client certificate stuff.
+ * If the remote site sent us a SSLv3 list of acceptable CA's then trawl the
+ * table of client certs and send the first one that matches.
+ */
+static int ssl_ext_mp_clientcert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey) 
+{
+    SSLSrvConfigRec *sc;
+    X509_NAME *xnx;
+    X509_NAME *issuer;
+    X509_INFO *xi;
+    char *peer;
+    char *servername;
+    server_rec *s;
+    ap_ctx *pCtx;
+    STACK_OF(X509_NAME) *sk;
+    STACK_OF(X509_INFO) *pcerts;
+    char *cp;
+    int i, j;
+    
+    pCtx       = (ap_ctx *)SSL_get_app_data(ssl);
+    s          = ap_ctx_get(pCtx, "ssl::proxy::server_rec");
+    peer       = ap_ctx_get(pCtx, "ssl::proxy::peer");
+    servername = ap_ctx_get(pCtx, "ssl::proxy::servername");
+
+    sc         = mySrvConfig(s);
+    pcerts     = sc->skProxyClientCerts;
+
+    ssl_log(s, SSL_LOG_DEBUG, "Proxy client certificate callback: (%s) entered");
+
+    if ((pcerts == NULL) || (sk_X509_INFO_num(pcerts) <= 0)) {
+        ssl_log(s, SSL_LOG_TRACE,
+                "Proxy client certificate callback: (%s) "
+                "site wanted client certificate but none available", 
+                servername);
+        return 0;
+    }                                                                     
+
+    sk = SSL_get_client_CA_list(ssl);
+
+    if ((sk == NULL) || (sk_X509_NAME_num(sk) <= 0)) {
+        /* 
+         * remote site didn't send us a list of acceptable CA certs, 
+         * so lets send the first one we came across 
+         */   
+        xi = sk_X509_INFO_value(pcerts, 0);
+        cp  = X509_NAME_oneline(X509_get_subject_name(xi->x509), NULL, 0);
+        ssl_log(s, SSL_LOG_DEBUG,
+                "SSL Proxy: (%s) no acceptable CA list, sending %s", 
+                servername, cp != NULL ? cp : "-unknown-");
+        free(cp);
+        /* export structures to the caller */
+        *x509 = xi->x509;
+        *pkey = xi->x_pkey->dec_pkey;
+        /* prevent OpenSSL freeing these structures */
+        CRYPTO_add(&((*x509)->references), +1, CRYPTO_LOCK_X509_PKEY);
+        CRYPTO_add(&((*pkey)->references), +1, CRYPTO_LOCK_X509_PKEY);
+        return 1;
+    }         
+
+    for (i = 0; i < sk_X509_NAME_num(sk); i++) {
+        xnx = sk_X509_NAME_value(sk, i);
+        for (j = 0; j < sk_X509_INFO_num(pcerts); j++) {
+            xi = sk_X509_INFO_value(pcerts,j);
+            issuer = X509_get_issuer_name(xi->x509);
+            if (X509_NAME_cmp(issuer, xnx) == 0) {
+                cp = X509_NAME_oneline(X509_get_subject_name(xi->x509), NULL, 0);
+                ssl_log(s, SSL_LOG_DEBUG, "SSL Proxy: (%s) sending %s", 
+                        servername, cp != NULL ? cp : "-unknown-");
+                free(cp);
+                /* export structures to the caller */
+                *x509 = xi->x509;
+                *pkey = xi->x_pkey->dec_pkey;
+                /* prevent OpenSSL freeing these structures */
+                CRYPTO_add(&((*x509)->references), +1, CRYPTO_LOCK_X509_PKEY);
+                CRYPTO_add(&((*pkey)->references), +1, CRYPTO_LOCK_X509_PKEY);
+                return 1;
+            }
+        }
+    }
+    ssl_log(s, SSL_LOG_TRACE,
+            "Proxy client certificate callback: (%s) "
+            "no client certificate found!?", servername);
+    return 0; 
+}
+
+/*
+ * This is the verify callback when we are connecting to a remote SSL server
+ * from the proxy. Information is passed in via the SSL "ctx" app_data
+ * mechanism. We pass in an Apache context in this field, which contains
+ * server_rec of the server making the proxy connection from the
+ * "ssl::proxy::server_rec" context.
+ *
+ * The result of the verification is passed back out to SSLERR via the return
+ * value. We also store the error message in the "proxyverifyfailed" context,
+ * so the caller of SSL_connect() can log a detailed error message.
+ */
+static int ssl_ext_mp_verify_cb(int ok, X509_STORE_CTX *ctx)
+{
+    SSLSrvConfigRec *sc;
+    X509 *xs;
+    int errnum;
+    int errdepth;
+    char *cp, *cp2;
+    ap_ctx *pCtx;
+    server_rec *s;
+    SSL *ssl;
+    char *peer;
+    char *servername;
+
+    ssl        = (SSL *)X509_STORE_CTX_get_app_data(ctx);
+    pCtx       = (ap_ctx *)SSL_get_app_data(ssl);
+    s          = ap_ctx_get(pCtx, "ssl::proxy::server_rec");
+    peer       = ap_ctx_get(pCtx, "ssl::proxy::peer");
+    servername = ap_ctx_get(pCtx, "ssl::proxy::servername");
+    sc         = mySrvConfig(s);
+
+    /*
+     * Get verify ingredients
+     */
+    xs       = X509_STORE_CTX_get_current_cert(ctx);
+    errnum   = X509_STORE_CTX_get_error(ctx);
+    errdepth = X509_STORE_CTX_get_error_depth(ctx);
+
+    /* 
+     * Log verification information
+     */
+    cp  = X509_NAME_oneline(X509_get_subject_name(xs), NULL, 0);
+    cp2 = X509_NAME_oneline(X509_get_issuer_name(xs),  NULL, 0);
+    ssl_log(s, SSL_LOG_DEBUG,
+            "SSL Proxy: (%s) Certificate Verification for remote server %s: "
+            "depth: %d, subject: %s, issuer: %s", 
+            servername, peer != NULL ? peer : "-unknown-",
+            errdepth, cp != NULL ? cp : "-unknown-", 
+            cp2 != NULL ? cp2 : "-unknown");
+    free(cp);
+    free(cp2);
+
+    /*
+     * If we already know it's not ok, log the real reason
+     */
+    if (!ok) {
+        ssl_log(s, SSL_LOG_ERROR,
+                "SSL Proxy: (%s) Certificate Verification failed for %s: "
+                "Error (%d): %s", servername,
+                peer != NULL ? peer : "-unknown-",
+                errnum, X509_verify_cert_error_string(errnum));
+        ap_ctx_set(pCtx, "ssl::proxy::verifyerror", 
+                   (void *)X509_verify_cert_error_string(errnum));
+        return ok;
+    }
+
+    /*
+     * Check the depth of the certificate chain
+     */
+    if (sc->nProxyVerifyDepth > 0) {
+        if (errdepth > sc->nProxyVerifyDepth) {
+            ssl_log(s, SSL_LOG_ERROR,
+                "SSL Proxy: (%s) Certificate Verification failed for %s: "
+                "Certificate Chain too long "
+                "(chain has %d certificates, but maximum allowed are only %d)", 
+                servername, peer, errdepth, sc->nProxyVerifyDepth);
+            ap_ctx_set(pCtx, "ssl::proxy::verifyerror",
+                       (void *)X509_verify_cert_error_string(X509_V_ERR_CERT_CHAIN_TOO_LONG));
+            ok = FALSE;
+        }
+    }
+
+    /*
+     * And finally signal OpenSSL the (perhaps changed) state
+     */
+    return (ok);
+}
+
+#endif /* SSL_EXPERIMENTAL */
 
 /*  _________________________________________________________________
 **
index a590687..0b38b9a 100644 (file)
@@ -123,7 +123,6 @@ void ssl_init_Module(server_rec *s, pool *p)
     SSLSrvConfigRec *sc;
     server_rec *s2;
     char *cp;
-    int n;
 
     mc->nInitCount++;
 
@@ -152,6 +151,10 @@ void ssl_init_Module(server_rec *s, pool *p)
             sc->nVerifyClient = SSL_CVERIFY_NONE;
         if (sc->nVerifyDepth == UNSET)
             sc->nVerifyDepth = 1;
+#ifdef SSL_EXPERIMENTAL
+        if (sc->nProxyVerifyDepth == UNSET)
+            sc->nProxyVerifyDepth = 1;
+#endif
         if (sc->nSessionCacheTimeout == UNSET)
             sc->nSessionCacheTimeout = SSL_SESSION_CACHE_TIMEOUT;
         if (sc->nPassPhraseDialogType == SSL_PPTYPE_UNSET)
@@ -265,8 +268,7 @@ void ssl_init_Module(server_rec *s, pool *p)
     /*
      * Seed the Pseudo Random Number Generator (PRNG)
      */
-    n = ssl_rand_seed(s, p, SSL_RSCTX_STARTUP);
-    ssl_log(s, SSL_LOG_INFO, "Init: Seeding PRNG with %d bytes of entropy", n);
+    ssl_rand_seed(s, p, SSL_RSCTX_STARTUP, "Init: ");
 
     /*
      *  allocate the temporary RSA keys and DH params
@@ -342,12 +344,19 @@ void ssl_init_TmpKeysHandle(int action, server_rec *s, pool *p)
     /* Generate Keys and Params */
     if (action == SSL_TKP_GEN) {
 
-        ssl_log(s, SSL_LOG_INFO, "Init: Generating temporary RSA private keys (512/1024 bits)");
+        /* seed PRNG */
+        ssl_rand_seed(s, p, SSL_RSCTX_STARTUP, "Init: ");
 
         /* generate 512 bit RSA key */
+        ssl_log(s, SSL_LOG_INFO, "Init: Generating temporary RSA private keys (512/1024 bits)");
         if ((rsa = RSA_generate_key(512, RSA_F4, NULL, NULL)) == NULL) {
             ssl_log(s, SSL_LOG_ERROR, "Init: Failed to generate temporary 512 bit RSA private key");
+#if 0
             ssl_die();
+#else 
+           ssl_log(s, SSL_LOG_ERROR, "Init: You probably have no RSA support in libcrypto. See ssl(8)");
+           return;
+#endif 
         }
         asn1 = (ssl_asn1_t *)ssl_ds_table_push(mc->tTmpKeys, "RSA:512");
         asn1->nData  = i2d_RSAPrivateKey(rsa, NULL);
@@ -540,7 +549,7 @@ void ssl_init_ConfigureServer(server_rec *s, pool *p, SSLSrvConfigRec *sc)
      * Configure additional context ingredients
      */
     SSL_CTX_set_options(ctx, SSL_OP_SINGLE_DH_USE);
-    if (mc->nSessionCacheMode == SSL_SCMODE_UNSET)
+    if (mc->nSessionCacheMode == SSL_SCMODE_NONE)
         SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
     else
         SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_SERVER);
index fc1f0d8..2c3a4d4 100644 (file)
@@ -248,7 +248,7 @@ void ssl_io_suck(request_rec *r, SSL *ssl)
     return;
 }
     
-/* the SSL_read replacement routine which known about the suck buffer */
+/* the SSL_read replacement routine which knows about the suck buffer */
 static int ssl_io_suck_read(SSL *ssl, char *buf, int len)
 {
     ap_ctx *actx;
index ff45e99..50e9f88 100644 (file)
@@ -137,7 +137,6 @@ void ssl_hook_NewConnection(conn_rec *conn)
     char *cpVHostMD5;
     X509 *xs;
     int rc;
-    int n;
 
     /*
      * Get context
@@ -170,8 +169,7 @@ void ssl_hook_NewConnection(conn_rec *conn)
     /*
      * Seed the Pseudo Random Number Generator (PRNG)
      */
-    n = ssl_rand_seed(srvr, conn->pool, SSL_RSCTX_CONNECT);
-    ssl_log(srvr, SSL_LOG_TRACE, "Seeding PRNG with %d bytes of entropy", n);
+    ssl_rand_seed(srvr, conn->pool, SSL_RSCTX_CONNECT, "");
 
     /*
      * Create a new SSL connection with the configured server SSL context and
index 06ed510..dfc4d96 100644 (file)
@@ -156,8 +156,10 @@ void ssl_mutex_file_create(server_rec *s, pool *p)
     ap_pclosef(p, mc->nMutexFD);
 
     /* make sure the childs have access to this file */
+#ifndef OS2
     if (geteuid() == 0 /* is superuser */)
         chown(mc->szMutexFile, ap_user_id, -1 /* no gid change */);
+#endif
 
     /* open the lockfile for real */
     if ((mc->nMutexFD = ap_popenf(p, mc->szMutexFile,
index 2b50b43..2af0d20 100644 (file)
 static int ssl_rand_choosenum(int, int);
 static int ssl_rand_feedfp(pool *, FILE *, int);
 
-int ssl_rand_seed(server_rec *s, pool *p, ssl_rsctx_t nCtx)
+int ssl_rand_seed(server_rec *s, pool *p, ssl_rsctx_t nCtx, char *prefix)
 {
     SSLModConfigRec *mc;
     array_header *apRandSeed;
     ssl_randseed_t *pRandSeeds;
     ssl_randseed_t *pRandSeed;
+    unsigned char stackdata[256];
     int nReq, nDone;
     FILE *fp;
     int i, n, l;
@@ -114,6 +115,17 @@ int ssl_rand_seed(server_rec *s, pool *p, ssl_rsctx_t nCtx)
                 nDone += ssl_rand_feedfp(p, fp, pRandSeed->nBytes);
                 ssl_util_ppclose(s, p, fp);
             }
+#if SSL_LIBRARY_VERSION >= 0x00905100
+            else if (pRandSeed->nSrc == SSL_RSSRC_EGD) {
+                /*
+                 * seed in contents provided by the external
+                 * Entropy Gathering Daemon (EGD)
+                 */
+                if ((n = RAND_egd(pRandSeed->cpPath)) == -1)
+                    continue;
+                nDone += n;
+            }
+#endif
             else if (pRandSeed->nSrc == SSL_RSSRC_BUILTIN) {
                 /*
                  * seed in the current time (usually just 4 bytes)
@@ -130,6 +142,13 @@ int ssl_rand_seed(server_rec *s, pool *p, ssl_rsctx_t nCtx)
                 l = sizeof(pid_t);
                 RAND_seed((unsigned char *)&pid, l);
                 nDone += l;
+                
+                /*
+                 * seed in some current state of the run-time stack (128 bytes)
+                 */
+                n = ssl_rand_choosenum(0, sizeof(stackdata)-128-1);
+                RAND_seed(stackdata+n, 128);
+                nDone += 128;
 
                 /*
                  * seed in an 1KB extract of the current scoreboard
@@ -142,6 +161,12 @@ int ssl_rand_seed(server_rec *s, pool *p, ssl_rsctx_t nCtx)
             }
         }
     }
+    ssl_log(s, SSL_LOG_INFO, "%sSeeding PRNG with %d bytes of entropy", prefix, nDone);
+
+#if SSL_LIBRARY_VERSION >= 0x00905100
+    if (RAND_status() == 0)
+        ssl_log(s, SSL_LOG_WARN, "%sPRNG still contains not sufficient entropy!", prefix);
+#endif
     return nDone;
 }
 
index c08fa8f..f9a3c52 100644 (file)
@@ -296,7 +296,7 @@ static char *ssl_var_lookup_ssl(pool *p, conn_rec *c, char *var)
         result = ssl_var_lookup_ssl_version(p, var+8);
     }
     else if (ssl != NULL && strcEQ(var, "PROTOCOL")) {
-        result = SSL_get_version(ssl);
+        result = (char *)SSL_get_version(ssl);
     }
     else if (ssl != NULL && strcEQ(var, "SESSION_ID")) {
         SSL_SESSION *pSession = SSL_get_session(ssl);
index bfc9e5f..ce238a5 100644 (file)
@@ -241,7 +241,7 @@ int ssl_util_ppopen_child(void *cmd, child_info *pinfo)
     }
 #elif defined(OS2)
     /* IBM OS/2 */
-    execl(SHELL_PATH, SHELL_PATH, "/c", (char *)cmd, NULL);
+    spawnl(P_NOWAIT, SHELL_PATH, SHELL_PATH, "/c", (char *)cmd, NULL);
 #else
     /* Standard Unix */
     execl(SHELL_PATH, SHELL_PATH, "-c", (char *)cmd, NULL);
@@ -269,7 +269,7 @@ char *ssl_util_readfilter(server_rec *s, pool *p, char *cmd)
         return NULL;
     for (k = 0;    read(fileno(fp), &c, 1) == 1
                 && (k < MAX_STRING_LEN-1)       ; ) {
-        if (c == '\n')
+        if (c == '\n' || c == '\r')
             break;
         buf[k++] = c;
     }
index 16f9155..d73344a 100644 (file)
@@ -141,13 +141,15 @@ X509 *SSL_read_X509(FILE *fp, X509 **x509, int (*cb)())
     return rc;
 }
 
-static EVP_PKEY *d2i_PrivateKey_bio(BIO *bio, EVP_PKEY *key)
+#if SSL_LIBRARY_VERSION <= 0x00904100
+static EVP_PKEY *d2i_PrivateKey_bio(BIO *bio, EVP_PKEY **key)
 {
      return ((EVP_PKEY *)ASN1_d2i_bio(
              (char *(*)())EVP_PKEY_new, 
              (char *(*)())d2i_PrivateKey, 
              (bio), (unsigned char **)(key)));
 }
+#endif
 
 EVP_PKEY *SSL_read_PrivateKey(FILE *fp, EVP_PKEY **key, int (*cb)())
 {
@@ -388,6 +390,65 @@ BOOL SSL_X509_getCN(pool *p, X509 *xs, char **cppCN)
     return FALSE;
 }
 
+/*  _________________________________________________________________
+**
+**  Low-Level CA Certificate Loading
+**  _________________________________________________________________
+*/
+
+#ifdef SSL_EXPERIMENTAL
+
+BOOL SSL_load_CrtAndKeyInfo_file(pool *p, STACK_OF(X509_INFO) *sk, char *filename)
+{
+    BIO *in;
+
+    if ((in = BIO_new(BIO_s_file())) == NULL)
+        return FALSE;
+    if (BIO_read_filename(in, filename) <= 0) {
+        BIO_free(in);
+        return FALSE;
+    }
+    ERR_clear_error();
+#if SSL_LIBRARY_VERSION < 0x00904000
+    PEM_X509_INFO_read_bio(in, sk, NULL);
+#else
+    PEM_X509_INFO_read_bio(in, sk, NULL, NULL);
+#endif
+    BIO_free(in);
+    return TRUE;
+}
+
+BOOL SSL_load_CrtAndKeyInfo_path(pool *p, STACK_OF(X509_INFO) *sk, char *pathname)
+{
+    struct stat st;
+    DIR *dir;
+    pool *sp;
+    struct dirent *nextent;
+    char *fullname;
+    BOOL ok;
+
+    sp = ap_make_sub_pool(p);
+    if ((dir = ap_popendir(sp, pathname)) == NULL) {
+        ap_destroy_pool(sp);
+        return FALSE;
+    }
+    ok = FALSE;
+    while ((nextent = readdir(dir)) != NULL) {
+        fullname = ap_pstrcat(sp, pathname, "/", nextent->d_name, NULL);
+        if (stat(fullname, &st) != 0)
+            continue;
+        if (!S_ISREG(st.st_mode))
+            continue;
+        if (SSL_load_CrtAndKeyInfo_file(sp, sk, fullname))
+            ok = TRUE;
+    }
+    ap_pclosedir(p, dir);
+    ap_destroy_pool(sp);
+    return ok;
+}              
+
+#endif /* SSL_EXPERIMENTAL */
+
 /*  _________________________________________________________________
 **
 **  Extra Server Certificate Chain Support
index 43866dd..56674c3 100644 (file)
@@ -98,6 +98,10 @@ char       *SSL_make_ciphersuite(pool *, SSL *);
 BOOL        SSL_X509_isSGC(X509 *);
 BOOL        SSL_X509_getBC(X509 *, int *, int *);
 BOOL        SSL_X509_getCN(pool *, X509 *, char **);
+#ifdef SSL_EXPERIMENTAL
+BOOL        SSL_load_CrtAndKeyInfo_file(pool *, STACK_OF(X509_INFO) *, char *);
+BOOL        SSL_load_CrtAndKeyInfo_path(pool *, STACK_OF(X509_INFO) *, char *);
+#endif
 int         SSL_CTX_use_certificate_chain(SSL_CTX *, char *, int, int (*)());
 
 #endif /* SSL_UTIL_SSL_H */
index d5ab409..4b5aad2 100644 (file)
@@ -195,7 +195,8 @@ static int action_handler(request_rec *r)
 {
     action_dir_config *conf = (action_dir_config *)
         ap_get_module_config(r->per_dir_config, &action_module);
-    const char *t, *action = r->handler ? r->handler : r->content_type;
+    const char *t, *action = r->handler ? r->handler : 
+       ap_field_noparam(r->pool, r->content_type);
     const char *script;
     int i;
 
index e07dc45..bd1b4c2 100644 (file)
@@ -110,7 +110,7 @@ static const command_rec auth_cmds[] =
     {"AuthAuthoritative", ap_set_flag_slot,
      (void *) XtOffsetOf(auth_config_rec, auth_authoritative),
      OR_AUTHCFG, FLAG,
-     "Set to 'no' to allow access control to be passed along to lower modules if the UserID is not known to this module"},
+     "Set to 'off' to allow access control to be passed along to lower modules if the UserID is not known to this module"},
     {NULL}
 };
 
index dba647d..4636763 100644 (file)
@@ -2,19 +2,19 @@ Name: db_auth_module
 ConfigStart
     DB_VERSION=''
     DB_LIB=''
-    if sh helpers/TestCompile func db_create; then
+    if ./helpers/TestCompile func db_create; then
         DB_VERSION='Berkeley-DB/3.x'
-    elif sh helpers/TestCompile lib db db_create; then
+    elif ./helpers/TestCompile lib db db_create; then
         DB_VERSION='Berkeley-DB/3.x'
         DB_LIB='-ldb'
-    elif sh helpers/TestCompile func db_open; then
+    elif ./helpers/TestCompile func db_open; then
         DB_VERSION='Berkeley-DB/2.x'
-    elif sh helpers/TestCompile lib db db_open; then
+    elif ./helpers/TestCompile lib db db_open; then
         DB_VERSION='Berkeley-DB/2.x'
         DB_LIB='-ldb'
-    elif sh helpers/TestCompile func dbopen; then
+    elif ./helpers/TestCompile func dbopen; then
         DB_VERSION='Berkeley-DB/1.x'
-    elif sh helpers/TestCompile lib db dbopen; then
+    elif ./helpers/TestCompile lib db dbopen; then
         DB_VERSION='Berkeley-DB/1.x'
         DB_LIB='-ldb'
     fi
index df1365b..7ca656b 100644 (file)
@@ -732,7 +732,7 @@ struct ent {
 
 static char *find_item(request_rec *r, array_header *list, int path_only)
 {
-    const char *content_type = r->content_type;
+    const char *content_type = ap_field_noparam(r->pool, r->content_type);
     const char *content_encoding = r->content_encoding;
     char *path = r->filename;
 
index fb7d48b..d810194 100644 (file)
@@ -169,7 +169,7 @@ module MODULE_VAR_EXPORT cern_meta_module;
 typedef struct {
     char *metadir;
     char *metasuffix;
-    char *metafiles;
+    int metafiles;
 } cern_meta_dir_config;
 
 static void *create_cern_meta_dir_config(pool *p, char *dummy)
@@ -210,7 +210,7 @@ static const char *set_metasuffix(cmd_parms *parms, cern_meta_dir_config * dconf
     return NULL;
 }
 
-static const char *set_metafiles(cmd_parms *parms, cern_meta_dir_config * dconf, char *arg)
+static const char *set_metafiles(cmd_parms *parms, cern_meta_dir_config * dconf, int arg)
 {
     dconf->metafiles = arg;
     return NULL;
index 73392bd..5d1bf13 100644 (file)
@@ -437,7 +437,8 @@ static int add_expires(request_rec *r)
     if (r->content_type == NULL)
         code = NULL;
     else
-        code = (char *) ap_table_get(conf->expiresbytype, r->content_type);
+        code = (char *) ap_table_get(conf->expiresbytype, 
+               ap_field_noparam(r->pool, r->content_type));
 
     if (code == NULL) {
         /* no expires defined for that type, is there a default? */
index dacf096..65dc188 100644 (file)
@@ -922,6 +922,9 @@ static int handle_echo(FILE *in, request_rec *r, const char *error)
 {
     char tag[MAX_STRING_LEN];
     char *tag_val;
+    enum {E_NONE, E_URL, E_ENTITY} encode;
+
+    encode = E_ENTITY;
 
     while (1) {
         if (!(tag_val = get_tag(r->pool, in, tag, sizeof(tag), 1))) {
@@ -931,7 +934,15 @@ static int handle_echo(FILE *in, request_rec *r, const char *error)
             const char *val = ap_table_get(r->subprocess_env, tag_val);
 
             if (val) {
-                ap_rputs(val, r);
+               if (encode == E_NONE) {
+                   ap_rputs(val, r);
+               }
+               else if (encode == E_URL) {
+                   ap_rputs(ap_escape_uri(r->pool, val), r);
+               }
+               else if (encode == E_ENTITY) {
+                   ap_rputs(ap_escape_html(r->pool, val), r);
+               }
             }
             else {
                 ap_rputs("(none)", r);
@@ -940,6 +951,19 @@ static int handle_echo(FILE *in, request_rec *r, const char *error)
         else if (!strcmp(tag, "done")) {
             return 0;
         }
+       else if (!strcmp(tag, "encoding")) {
+           if (!strcasecmp(tag_val, "none")) encode = E_NONE;
+           else if (!strcasecmp(tag_val, "url")) encode = E_URL;
+           else if (!strcasecmp(tag_val, "entity")) encode = E_ENTITY;
+           else {
+               ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
+                           "unknown value \"%s\" to parameter \"encoding\" of "
+                           "tag echo in %s",
+                           tag_val, r->filename);
+               ap_rputs(error, r);
+           }
+       }
+
         else {
             ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
                         "unknown parameter \"%s\" to tag echo in %s",
@@ -2116,7 +2140,8 @@ static int handle_printenv(FILE *in, request_rec *r, const char *error)
     }
     else if (!strcmp(tag, "done")) {
         for (i = 0; i < arr->nelts; ++i) {
-            ap_rvputs(r, elts[i].key, "=", elts[i].val, "\n", NULL);
+            ap_rvputs(r, ap_escape_html(r->pool, elts[i].key), "=", 
+               ap_escape_html(r->pool, elts[i].val), "\n", NULL);
         }
         return 0;
     }
index 78af1c8..e92d78b 100644 (file)
@@ -394,7 +394,7 @@ static const char *log_header_out(request_rec *r, char *a)
 {
     const char *cp = ap_table_get(r->headers_out, a);
     if (!strcasecmp(a, "Content-type") && r->content_type) {
-        cp = r->content_type;
+        cp = ap_field_noparam(r->pool, r->content_type);
     }
     if (cp) {
         return cp;
index 134196f..8b27d14 100644 (file)
@@ -345,7 +345,7 @@ static int is_token(char c)
 {
     int res;
 
-    res = (ap_isascii(c) && isgraph(c)
+    res = (ap_isascii(c) && ap_isgraph(c)
           && (strchr(tspecial, c) == NULL)) ? 1 : -1;
     return res;
 }
index 328ec99..1e3a1b3 100644 (file)
@@ -455,7 +455,7 @@ static int check_speling(request_rec *r)
 
            *(const char **)ap_push_array(t) =
                          "The document name you requested (<code>";
-           *(const char **)ap_push_array(t) = r->uri;
+           *(const char **)ap_push_array(t) = ap_escape_html(sub_pool, r->uri);
            *(const char **)ap_push_array(t) =
                           "</code>) could not be found on this server.\n"
                           "However, we found documents with names similar "
@@ -474,15 +474,15 @@ static int check_speling(request_rec *r)
                                      ? r->parsed_uri.query : "",
                                  NULL);
                *(const char **)ap_push_array(v) = "\"";
-               *(const char **)ap_push_array(v) = vuri;
+               *(const char **)ap_push_array(v) = ap_escape_uri(sub_pool, vuri);
                *(const char **)ap_push_array(v) = "\";\"";
                *(const char **)ap_push_array(v) = reason;
                *(const char **)ap_push_array(v) = "\"";
 
                *(const char **)ap_push_array(t) = "<li><a href=\"";
-               *(const char **)ap_push_array(t) = vuri;
+               *(const char **)ap_push_array(t) = ap_escape_uri(sub_pool, vuri);
                *(const char **)ap_push_array(t) = "\">";
-               *(const char **)ap_push_array(t) = vuri;
+               *(const char **)ap_push_array(t) = ap_escape_html(sub_pool, vuri);
                *(const char **)ap_push_array(t) = "</a> (";
                *(const char **)ap_push_array(t) = reason;
                *(const char **)ap_push_array(t) = ")\n";
@@ -509,7 +509,7 @@ static int check_speling(request_rec *r)
                 *(const char **)ap_push_array(t) =
                               "Please consider informing the owner of the "
                               "<a href=\"";
-                *(const char **)ap_push_array(t) = ref;
+               *(const char **)ap_push_array(t) = ap_escape_uri(sub_pool, ref);
                 *(const char **)ap_push_array(t) = "\">referring page</a> "
                               "about the broken link.\n";
            }
index fba55c9..c6786a2 100644 (file)
@@ -135,24 +135,19 @@ module MODULE_VAR_EXPORT status_module;
  *command-related code. This is here to prevent use of ExtendedStatus
  * without status_module included.
  */
-static const char *set_extended_status(cmd_parms *cmd, void *dummy, char *arg) 
+static const char *set_extended_status(cmd_parms *cmd, void *dummy, int arg) 
 {
     const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
     if (err != NULL) {
         return err;
     }
-    if (!strcasecmp(arg, "off") || !strcmp(arg, "0")) {
-       ap_extended_status = 0;
-    }
-    else {
-       ap_extended_status = 1;
-    }
+    ap_extended_status = arg;
     return NULL;
 }
 
 static const command_rec status_module_cmds[] =
 {
-    { "ExtendedStatus", set_extended_status, NULL, RSRC_CONF, TAKE1,
+    { "ExtendedStatus", set_extended_status, NULL, RSRC_CONF, FLAG,
       "\"On\" to enable extended status information, \"Off\" to disable" },
     {NULL}
 };
@@ -618,9 +613,10 @@ static int status_handler(request_rec *r)
                        format_byte_out(r, bytes);
                        ap_rputs(")\n", r);
                        ap_rprintf(r, " <i>%s {%s}</i> <b>[%s]</b><br>\n\n",
-                           score_record.client,
+                           ap_escape_html(r->pool, score_record.client),
                            ap_escape_html(r->pool, score_record.request),
-                           vhost ? vhost->server_hostname : "(unavailable)");
+                           vhost ? ap_escape_html(r->pool, 
+                               vhost->server_hostname) : "(unavailable)");
                    }
                    else {              /* !no_table_report */
 #ifndef NO_PRETTYPRINT
@@ -707,8 +703,9 @@ static int status_handler(request_rec *r)
 #else
                            ap_rprintf(r,
                             "<td>%s<td nowrap>%s<td nowrap>%s</tr>\n\n",
-                            score_record.client,
-                            vhost ? vhost->server_hostname : "(unavailable)",
+                            ap_escape_html(r->pool, score_record.client),
+                            vhost ? ap_escape_html(r->pool, 
+                               vhost->server_hostname) : "(unavailable)",
                             ap_escape_html(r->pool, score_record.request));
 #endif
                    }           /* no_table_report */
index 9712cfa..3549b26 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef AP_EBCDIC_H
-#define AP_EBCDIC_H  "$Id: ebcdic.h,v 1.2 2000/01/25 18:30:05 beck Exp $"
+#define AP_EBCDIC_H  "$Id: ebcdic.h,v 1.3 2000/03/19 11:17:32 beck Exp $"
 
 #include <sys/types.h>
 
index 025a5f1..cb4e4a4 100644 (file)
@@ -38,7 +38,7 @@
 
 #define VENDOR   "Apache Group"
 #define SOFTWARE "Apache"
-#define VERSION  "1.3.11"
+#define VERSION  "1.3.12"
 
 #define REGKEY "SOFTWARE\\" VENDOR "\\" SOFTWARE "\\" VERSION
 
index e1abd8d..9135a26 100644 (file)
@@ -81,7 +81,7 @@
    **    - Cleaned up by Ralf S. Engelschall <rse@apache.org>, March 1998
    **    - POST and verbosity by Kurt Sussman <kls@merlot.com>, August 1998
    **    - HTML table output added by David N. Welton <davidw@prosa.it>, January 1999
-   **    - Added Cookie, Arbitrary header and auth support. <dirkx@webweaving.org>, April 199
+   **    - Added Cookie, Arbitrary header and auth support. <dirkx@webweaving.org>, April 1999
    **
  */
 
@@ -884,14 +884,14 @@ static void test(void)
 static void copyright(void)
 {
     if (!use_html) {
-       printf("This is ApacheBench, Version %s\n", VERSION " <$Revision: 1.4 $> apache-1.3");
+       printf("This is ApacheBench, Version %s\n", VERSION " <$Revision: 1.5 $> apache-1.3");
        printf("Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/\n");
        printf("Copyright (c) 1998-1999 The Apache Group, http://www.apache.org/\n");
        printf("\n");
     }
     else {
        printf("<p>\n");
-       printf(" This is ApacheBench, Version %s <i>&lt;%s&gt;</i> apache-1.3<br>\n", VERSION, "$Revision: 1.4 $");
+       printf(" This is ApacheBench, Version %s <i>&lt;%s&gt;</i> apache-1.3<br>\n", VERSION, "$Revision: 1.5 $");
        printf(" Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br>\n");
        printf(" Copyright (c) 1998-1999 The Apache Group, http://www.apache.org/<br>\n");
        printf("</p>\n<p>\n");
index a39b9fd..674fd1b 100644 (file)
@@ -297,7 +297,7 @@ if ($opt_q) {
         )) {
             if ($arg eq $name or $arg eq lc($name)) {
                 my $val = eval "\$CFG_$name";
-                $result .= "${val}::";
+                $result .= "${val}##";
                 $ok = 1;
             }
         }
@@ -306,8 +306,8 @@ if ($opt_q) {
             exit(1);
         }
     }
-    $result =~ s|::$||;
-    $result =~ s|::| |;
+    $result =~ s|##$||;
+    $result =~ s|##| |g;
     print $result;
 }
 
index 6d42bbd..cb98a11 100644 (file)
@@ -72,7 +72,7 @@
 #endif
 #include "ap.h"
 #include "ap_md5.h"
-#if defined(MPE) || defined(QNX) || defined(WIN32) || defined(__TANDEM) || defined(OS390)
+#if defined(MPE) || defined(QNX) || defined(WIN32) || defined(__TANDEM) || defined(OS390) || defined(BEOS)
 #include <signal.h>
 #else
 #include <sys/signal.h>
index 1687cde..58b6b33 100644 (file)
@@ -1,5 +1,5 @@
-.TH htpasswd 1 "February 1997"
-.\" Copyright (c) 1997-1999 The Apache Group. All rights reserved.
+.TH htpasswd 1 "February 2000"
+.\" Copyright (c) 1997-2000 The Apache Group. All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" modification, are permitted provided that the following conditions
@@ -61,6 +61,12 @@ htpasswd \- Create and update user authentication files
 ] 
 [
 .B \-m
+|
+.B \-d
+|
+.B \-s
+|
+.B \-p
 ] 
 .I passwdfile
 .I username
@@ -72,9 +78,12 @@ htpasswd \- Create and update user authentication files
 ] 
 [
 .B \-m
+|
 .B \-d
-.B \-p
+|
 .B \-s
+|
+.B \-p
 ] 
 .I passwdfile
 .I username
@@ -123,7 +132,10 @@ line.\fP
 Create the \fIpasswdfile\fP. If \fIpasswdfile\fP already exists, it
 is rewritten and truncated.
 .IP \-m 
-Use MD5 encryption for passwords. On Windows and TPF, this is the default.
+Use Apache's modified MD5 algorithm for passwords.  Passwords encrypted
+with this algorithm are transportable to any platform (Windows, Unix,
+BeOS, et cetera) running Apache 1.3.9 or later.  On Windows and TPF,
+this flag is the default.
 .IP \-d
 Use crypt() encryption for passwords. The default on all platforms but
 Windows and TPF. Though possibly supported by
@@ -137,7 +149,7 @@ servers using the LDAP Directory Interchange Format (ldif).
 .IP \-p
 Use plaintext passwords. Though 
 .B htpasswd
-will support creation on all platofrms, the
+will support creation on all platforms, the
 .B httpd
 deamon will only accept plain text passwords on Windows and TPF.
 .IP \fB\fIpasswdfile\fP
index 6b4ae6b..2e02e3a 100644 (file)
 #include <ctype.h>
 
 #ifndef MPE
+#ifndef BEOS
 #include <arpa/inet.h>
-#endif
+#else
+/* BeOS lacks the necessary files until we get the new networking */
+#include <netinet/in.h>
+#define NO_ADDRESS 4
+#endif /* BEOS */
+#endif /* MPE */
 
 static void cgethost(struct in_addr ipnum, char *string, int check);
 static int getline(char *s, int n);
index 5c5ca5d..46e44ee 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh
 ##
-##  mkcert.sh -- Make SSL Certificate Files for `make certificate' command
+##  mkcert.sh -- SSL Certificate Generation Utility
 ##  Copyright (c) 1998-2000 Ralf S. Engelschall, All Rights Reserved. 
 ##
 
@@ -96,9 +96,8 @@ fi
 #   (do not use /dev/random here, because this device 
 #   doesn't work as expected on all platforms)
 randfiles=''
-for file in /var/log/messages /var/adm/messages \
-            /kernel /vmunix /vmlinuz \
-            /etc/hosts /etc/resolv.conf; do
+for file in /var/log/messages /var/adm/messages /var/log/system.log \
+            /kernel /vmunix /vmlinuz /mach /etc/hosts /etc/resolv.conf; do
     if [ -f $file ]; then
         if [ ".$randfiles" = . ]; then
             randfiles="$file"
@@ -108,6 +107,15 @@ for file in /var/log/messages /var/adm/messages \
     fi
 done
 
+#   initialize random file
+if [ -f $HOME/.rnd ]; then
+    RANDFILE="$HOME/.rnd"
+else
+    RANDFILE=".mkcert.rnd"
+    touch $RANDFILE
+fi
+export RANDFILE
+
 #   canonicalize parameters
 case "x$type" in
     x ) type=test ;;
@@ -140,12 +148,11 @@ case $type in
         fi
         if [ ".$algo" = .RSA ]; then
             cp $sslcrtdir/snakeoil-rsa.crt $sslcrtdir/server.crt
-            cp $sslkeydir/snakeoil-rsa.key $sslkeydir/server.key
+            (umask 077; cp $sslkeydir/snakeoil-rsa.key $sslkeydir/server.key)
         else
             cp $sslcrtdir/snakeoil-dsa.crt $sslcrtdir/server.crt
-            cp $sslkeydir/snakeoil-dsa.key $sslkeydir/server.key
+            (umask 077; cp $sslkeydir/snakeoil-dsa.key $sslkeydir/server.key)
         fi
-        chmod 600 $sslkeydir/server.key
         echo "${T_MD}RESULT: Server Certification Files${T_ME}"
         echo ""
         echo "o  ${T_MD}conf/ssl.key/server.key${T_ME}"
@@ -203,9 +210,6 @@ case $type in
         echo "______________________________________________________________________"
         echo ""
         echo "${T_MD}STEP 1: Generating $algo private key (1024 bit) [server.key]${T_ME}"
-        if [ ! -f $HOME/.rnd ]; then
-            touch $HOME/.rnd
-        fi
         if [ ".$algo" = .RSA ]; then
             if [ ".$randfiles" != . ]; then
                 $openssl genrsa -rand $randfiles -out $sslkeydir/server.key 1024
@@ -219,16 +223,20 @@ case $type in
         else
             echo "Generating DSA private key via SnakeOil CA DSA parameters"
             if [ ".$randfiles" != . ]; then
-                $openssl gendsa -rand $randfiles -out $sslkeydir/server.key $sslprmdir/snakeoil-ca-dsa.prm
+                (umask 077
+                 $openssl gendsa -rand $randfiles \
+                                 -out $sslkeydir/server.key \
+                                 $sslprmdir/snakeoil-ca-dsa.prm)
             else
-                $openssl gendsa -out $sslkeydir/server.key $sslprmdir/snakeoil-ca-dsa.prm
+                (umask 077
+                 $openssl gendsa -out $sslkeydir/server.key \
+                                 $sslprmdir/snakeoil-ca-dsa.prm)
             fi
             if [ $? -ne 0 ]; then
                 echo "mkcert.sh:Error: Failed to generate DSA private key" 1>&2
                 exit 1
             fi
         fi
-        chmod 600 $sslkeydir/server.key
         echo "______________________________________________________________________"
         echo ""
         echo "${T_MD}STEP 2: Generating X.509 certificate signing request [server.csr]${T_ME}"
@@ -353,21 +361,22 @@ EOT
         done
         if [ ".$rc" = .y ]; then
             if [ ".$algo" = .RSA ]; then
-                $openssl rsa -des3 \
-                             -in  $sslkeydir/server.key \
-                             -out $sslkeydir/server.key.crypt
+                (umask 077
+                 $openssl rsa -des3 \
+                              -in  $sslkeydir/server.key \
+                              -out $sslkeydir/server.key.crypt)
             else
-                $openssl dsa -des3 \
-                             -in  $sslkeydir/server.key \
-                             -out $sslkeydir/server.key.crypt
+                (umask 077
+                 $openssl dsa -des3 \
+                              -in  $sslkeydir/server.key \
+                              -out $sslkeydir/server.key.crypt)
             fi
             if [ $? -ne 0 ]; then
                 echo "mkcert.sh:Error: Failed to encrypt $algo private key" 1>&2
                 exit 1
             fi
-            cp $sslkeydir/server.key.crypt $sslkeydir/server.key
+            (umask 077; cp $sslkeydir/server.key.crypt $sslkeydir/server.key)
             rm -f $sslkeydir/server.key.crypt
-            chmod 600 $sslkeydir/server.key
             echo "Fine, you're using an encrypted $algo private key."
         else
             echo "Warning, you're using an unencrypted $algo private key."
@@ -438,9 +447,6 @@ EOT
         echo "______________________________________________________________________"
         echo ""
         echo "${T_MD}STEP 1: Generating $algo private key for CA (1024 bit) [ca.key]${T_ME}"
-        if [ ! -f $HOME/.rnd ]; then
-            touch $HOME/.rnd
-        fi
         if [ ".$algo" = .RSA ]; then
             if [ ".$randfiles" != . ]; then
                 $openssl genrsa -rand $randfiles -out $sslkeydir/ca.key 1024
@@ -455,18 +461,19 @@ EOT
             if [ ".$randfiles" != . ]; then
                 $openssl dsaparam -rand $randfiles -out $sslprmdir/ca.prm 1024
                 echo "Generating DSA private key:"
-                $openssl gendsa   -rand $randfiles -out $sslkeydir/ca.key $sslprmdir/ca.prm
+                (umask 077
+                 $openssl gendsa -rand $randfiles -out $sslkeydir/ca.key $sslprmdir/ca.prm)
             else
                 $openssl dsaparam -out $sslprmdir/ca.prm 1024
                 echo "Generating DSA private key:"
-                $openssl gendsa   -out $sslkeydir/ca.key $sslprmdir/ca.prm
+                (umask 077
+                 $openssl gendsa -out $sslkeydir/ca.key $sslprmdir/ca.prm)
             fi
             if [ $? -ne 0 ]; then
                 echo "mkcert.sh:Error: Failed to generate DSA private key" 1>&2
                 exit 1
             fi
         fi
-        chmod 600 $sslkeydir/ca.key
         echo "______________________________________________________________________"
         echo ""
         echo "${T_MD}STEP 2: Generating X.509 certificate signing request for CA [ca.csr]${T_ME}"
@@ -556,9 +563,6 @@ EOT
         echo "______________________________________________________________________"
         echo ""
         echo "${T_MD}STEP 4: Generating $algo private key for SERVER (1024 bit) [server.key]${T_ME}"
-        if [ ! -f $HOME/.rnd ]; then
-            touch $HOME/.rnd
-        fi
         if [ ".$algo" = .RSA ]; then
             if [ ".$randfiles" != . ]; then
                 $openssl genrsa -rand $randfiles -out $sslkeydir/server.key 1024
@@ -571,16 +575,18 @@ EOT
             fi
         else
             if [ ".$randfiles" != . ]; then
-                $openssl gendsa -rand $randfiles -out $sslkeydir/server.key $sslprmdir/ca.prm
+                (umask 077
+                 $openssl gendsa -rand $randfiles \
+                                 -out $sslkeydir/server.key $sslprmdir/ca.prm)
             else
-                $openssl gendsa -out $sslkeydir/server.key $sslprmdir/ca.prm
+                (umask 077
+                 $openssl gendsa -out $sslkeydir/server.key $sslprmdir/ca.prm)
             fi
             if [ $? -ne 0 ]; then
                 echo "mkcert.sh:Error: Failed to generate DSA private key" 1>&2
                 exit 1
             fi
         fi
-        chmod 600 $sslkeydir/server.key
         echo "______________________________________________________________________"
         echo ""
         echo "${T_MD}STEP 5: Generating X.509 certificate signing request for SERVER [server.csr]${T_ME}"
@@ -691,21 +697,22 @@ EOT
         done
         if [ ".$rc" = .y ]; then
             if [ ".$algo" = .RSA ]; then
-                $openssl rsa -des3 \
-                             -in  $sslkeydir/ca.key \
-                             -out $sslkeydir/ca.key.crypt
+                (umask 077
+                 $openssl rsa -des3 \
+                              -in  $sslkeydir/ca.key \
+                              -out $sslkeydir/ca.key.crypt)
             else
-                $openssl dsa -des3 \
-                             -in  $sslkeydir/ca.key \
-                             -out $sslkeydir/ca.key.crypt
+                (umask 077
+                 $openssl dsa -des3 \
+                              -in  $sslkeydir/ca.key \
+                              -out $sslkeydir/ca.key.crypt)
             fi
             if [ $? -ne 0 ]; then
                 echo "mkcert.sh:Error: Failed to encrypt $algo private key" 1>&2
                 exit 1
             fi
-            cp $sslkeydir/ca.key.crypt $sslkeydir/ca.key
+            (umask 077; cp $sslkeydir/ca.key.crypt $sslkeydir/ca.key)
             rm -f $sslkeydir/ca.key.crypt
-            chmod 600 $sslkeydir/ca.key
             echo "Fine, you're using an encrypted private key."
         else
             echo "Warning, you're using an unencrypted private key."
@@ -731,21 +738,22 @@ EOT
         done
         if [ ".$rc" = .y ]; then
             if [ ".$algo" = .RSA ]; then
-                $openssl rsa -des3 \
-                             -in  $sslkeydir/server.key \
-                             -out $sslkeydir/server.key.crypt
+                (umask 077
+                 $openssl rsa -des3 \
+                              -in  $sslkeydir/server.key \
+                              -out $sslkeydir/server.key.crypt)
             else
-                $openssl dsa -des3 \
-                             -in  $sslkeydir/server.key \
-                             -out $sslkeydir/server.key.crypt
+                (umask 077
+                 $openssl dsa -des3 \
+                              -in  $sslkeydir/server.key \
+                              -out $sslkeydir/server.key.crypt)
             fi
             if [ $? -ne 0 ]; then
                 echo "mkcert.sh:Error: Failed to encrypt $algo private key" 1>&2
                 exit 1
             fi
-            cp $sslkeydir/server.key.crypt $sslkeydir/server.key
+            (umask 077; cp $sslkeydir/server.key.crypt $sslkeydir/server.key)
             rm -f $sslkeydir/server.key.crypt
-            chmod 600 $sslkeydir/server.key
             echo "Fine, you're using an encrypted $algo private key."
         else
             echo "Warning, you're using an unencrypted $algo private key."
@@ -805,15 +813,16 @@ EOT
                 exit 1
             fi
             cp $crt $sslcrtdir/server.crt
-            cp $key $sslkeydir/server.key
+            (umask 077; cp $key $sslkeydir/server.key)
         else
             key=$crt
+            umask 077
+            touch $sslkeydir/server.key
             sed -e '/-----BEGIN CERTIFICATE/,/-----END CERTIFICATE/p' -e '/.*/d' \
                 <$crt >$sslcrtdir/server.crt
             sed -e '/-----BEGIN ... PRIVATE KEY/,/-----END ... PRIVATE KEY/p' -e '/.*/d' \
                 <$key >$sslkeydir/server.key
         fi
-        chmod 600 $sslkeydir/server.key
         $openssl x509 -noout -in $sslcrtdir/server.crt
         if [ $? -ne 0 ]; then
             echo "mkcert.sh:Error: Failed to check certificate contents: $crt" 1>&2