Forum OpenACS Development: Re: Proposed corrections to OpenACS default nsopenssl configuration

} else {

    #--------------------------------------------------------------------------------------------------
    # OpenSSL for Aolserver 4
    #--------------------------------------------------------------------------------------------------
    #
    # Configuration for nsopenssl v3.x modified by Richard Hamilton on 10-26-2010
    # (email: mailto:richard.hamilton@webteamworks.com), based on example configuration from README in
    # source code directory of nsopenssl.
    #
    # Note 1: nsopenssl.so v3.x supports multiple contexts for ssl connections in Aolserver v4.5
    #         so that you can configure multiple ssl listeners for each virtual server. For example,
    #         for each virtual server, you might wish to have different listeners for users and
    #         admins, and a third context for outgoing ssl connections (the 'client' context).
    #
    #         However, in OpenACS the security::locations proc has the nsopenssl context hard-coded
    #         as 'users'. Therefore, for Openacs up to the current version (5.6.0 as at 102610)
    #         you must only configure one context and it must be called 'users'. For this reason
    #         the example naming convention (of the form 'vs1_user_ctx') has not been used since
    #         it would be meaningless until OpenACS instances read their SSL context using ns_config.
    #         This forum post refers: http://www.openacs.org/forums/message-view?message_id=2983032
    #
    # Note 2: If you do configure more than one listener, each MUST have its own dedicated SSL key.
    #         This makes sense since otherwise there would be no point in opening up another port.
    #
    # Note 3: Code has been added that checks for the presence of the required key and certfiles for
    #         the OpenACS default context 'users'. The nsopenssl module will not load unless
    #         'users_cert.pem', 'users_key.pem', and './ca/users_cacert.pem' exist.
    #
    #         The default location assumed for key and certificate files is :
    #             /usr/local/aolserver/servers/${server}/modules/nsopenssl
    #
    #
    #--------------------------------------------------------------------------------------------------

    set httpsport_users $httpsport ;# Multiple contexts cannot share ports.

    ns_section "ns/server/${server}/module/nsopenssl"
        ns_param RandomFile /proc/kcore
        ns_param SeedBytes 1024
        # ServerPort is required by procs in acs-tcl/tcl/security-procs.tcl to find the https port.
        ns_param ServerPort           $httpsport_users
        # setting maxinput higher than practical may leave the server vulnerable to resource DoS attacks
        # see http://www.panoptic.com/wiki/aolserver/166
        # must set maxinput for nsopenssl as well as nssock
        ns_param   maxinput           [expr {$max_file_upload_mb * 1024 * 1024}] ;# Maximum File Size for uploads in bytes

    ns_section "ns/server/${server}/module/nsopenssl/sslcontexts"
        ns_param users        "SSL context used for regular user access"
    #    ns_param admins       "SSL context used for administrator access - not supported by OpenACS"
    #    ns_param client       "SSL context used for outgoing script socket connections - not supported by OpenACS"

    ns_section "ns/server/${server}/module/nsopenssl/defaults"
        ns_param server               users ;# Hard-coded into openACS security::locations proc
    #    ns_param client               client

    ns_section "ns/server/${server}/module/nsopenssl/sslcontext/users"
        ns_param Role                  server
        ns_param ModuleDir             ${homedir}/servers/${server}/modules/nsopenssl
        ns_param CertFile              users_cert.pem
        ns_param KeyFile               users_key.pem
        ns_param CADir                 ca ;# Directory containing certificate of signing authority
        ns_param CAFile                ca/users_cacert.pem
        # for Protocols                "ALL" = "SSLv2, SSLv3, TLSv1"
        ns_param Protocols             "SSLv3, TLSv1"
        ns_param CipherSuite           "ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP"
        ns_param PeerVerify            false
        ns_param PeerVerifyDepth       3
        ns_param Trace                 false


#    ns_section "ns/server/${server}/module/nsopenssl/sslcontext/admins"
    #    ns_param Role                  server
    #    ns_param ModuleDir             /path/to/dir
    #    ns_param CertFile              admins_cert.pem
    #    ns_param KeyFile               admins_key.pem
    #    ns_param CADir                 ca
    #    ns_param CAFile                ca/admins_cacert.pem
        # for Protocols                "ALL" = "SSLv2, SSLv3, TLSv1"
    #    ns_param Protocols             "SSLv3, TLSv1"
    #    ns_param CipherSuite           "ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP"
    #    ns_param PeerVerify            false
    #    ns_param PeerVerifyDepth       3
    #    ns_param Trace                 false

#    ns_section "ns/server/${server}/module/nsopenssl/sslcontext/client"
    #    ns_param Role                  client
    #    ns_param ModuleDir             /path/to/dir
    #    ns_param CertFile              client_cert.pem
    #    ns_param KeyFile               client_key.pem
    #    ns_param CADir                 ca
    #    ns_param CAFile                ca/client_cacert.pem
        # for Protocols                "ALL" = "SSLv2, SSLv3, TLSv1"
    #    ns_param Protocols             "SSLv3, TLSv1"
    #    ns_param CipherSuite           "ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP"
    #    ns_param PeerVerify            false
    #    ns_param PeerVerifyDepth       3
    #    ns_param Trace                 false

    # SSL drivers. It is possible to configure multiple driver connections within a single
    # virtual server, with each allocated to its own named SSL context.However this feature is
    # not supported by OpenACS. Each driver defines a port to listen on and an explicitly named
    # SSL context to associate with it.
    ns_section "ns/server/${server}/module/nsopenssl/ssldrivers"
        ns_param users         "Driver for regular user access"
    #    ns_param admins        "Driver for administrator access"
    #    ns_param client        "Driver for outgoing ssl connections"

    ns_section "ns/server/${server}/module/nsopenssl/ssldriver/users"
        ns_param sslcontext            users
        ns_param port                  $httpsport_users
        ns_param hostname              $hostname
        ns_param address               $address
        # following added per
        # http://www.mail-archive.com/aolserver@listserv.aol.com/msg07365.html
        # Maximum File Size for uploads:
        ns_param   maxinput           [expr {$max_file_upload_mb * 1024 * 1024}] ;# in bytes
        # Maximum request time
        ns_param   recvwait           [expr {$max_file_upload_min * 60}] ;# in minutes

#    ns_section "ns/server/${server}/module/nsopenssl/ssldriver/admins"
    #    ns_param sslcontext            admins
    #    ns_param port                  $httpsport_admins ;# Not set up in OpenACS config.tcl
    #    ns_param hostname              $hostname
    #    ns_param address               $address

#    ns_section "ns/server/${server}/module/nsopenssl/ssldriver/client"
    #    ns_param sslcontext            client
    #    ns_param port                  $httpsport_client ;# Not set up in OpenACS config.tcl
    #    ns_param hostname              $hostname
    #    ns_param address               $address
}