Apache SSL Remotestorage服务器不工作

时间:2016-07-21 13:31:58

标签: apache ssl apache2 remotestorage

我正在尝试使用remotestorage服务器设置我的Ubuntu Web服务器来托管php-remote-storage服务器。

之前我没有在我的服务器上设置SSL,因此存在一个新鲜的apache2安装。我已按照信函的说明操作,jusr用我自己的子域名替换storage.local的所有出现,让我们称之为sub.example.com

sub.example.com从AWS Route 53定向到我的Web服务器。这适用于other.example.com

因此,当我浏览sub.example.com时,它只会超时。 Chrome说:

This site can’t be reached

sub.example.com unexpectedly closed the connection.

Try:

Reloading the pageChecking the connection

ERR_CONNECTION_CLOSED

我不知道如何找出错误的原因。所有其他托管网站都可以工作,所以我猜测我在做错了SSL位。

谢谢。

乔恩

编辑:我的default-ssl.conf(就在它来的时候,我还没有对它进行修改):

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

        #   Server Certificate Chain:
        #   Point SSLCertificateChainFile at a file containing the
        #   concatenation of PEM encoded CA certificates which form the
        #   certificate chain for the server certificate. Alternatively
        #   the referenced file can be the same as SSLCertificateFile
        #   when the CA certificates are directly appended to the server
        #   certificate for convinience.
        #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt

        #   Certificate Authority (CA):
        #   Set the CA certificate verification path where to find CA
        #   certificates for client authentication or alternatively one
        #   huge file containing all of them (file must be PEM encoded)
        #   Note: Inside SSLCACertificatePath you need hash symlinks
        #                to point to the certificate files. Use the provided
        #                Makefile to update the hash symlinks after changes.
        #SSLCACertificatePath /etc/ssl/certs/
        #SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt

        #   Certificate Revocation Lists (CRL):
        #   Set the CA revocation path where to find CA CRLs for client
        #   authentication or alternatively one huge file containing all
        #   of them (file must be PEM encoded)
        #   Note: Inside SSLCARevocationPath you need hash symlinks
        #                to point to the certificate files. Use the provided
        #                Makefile to update the hash symlinks after changes.
        #SSLCARevocationPath /etc/apache2/ssl.crl/
        #SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl

        #   Client Authentication (Type):
        #   Client certificate verification type and depth.  Types are
        #   none, optional, require and optional_no_ca.  Depth is a
        #   number which specifies how deeply to verify the certificate
        #   issuer chain before deciding the certificate is not valid.
        #SSLVerifyClient require
        #SSLVerifyDepth  10

        #   SSL Engine Options:
        #   Set various options for the SSL engine.
        #   o FakeBasicAuth:
        #        Translate the client X.509 into a Basic Authorisation.  This means that
        #        the standard Auth/DBMAuth methods can be used for access control.  The
        #        user name is the `one line' version of the client's X.509 certificate.
        #        Note that no password is obtained from the user. Every entry in the user
        #        file needs this password: `xxj31ZMTZzkVA'.
        #   o ExportCertData:
        #        This exports two additional environment variables: SSL_CLIENT_CERT and
        #        SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
        #        server (always existing) and the client (only existing when client
        #        authentication is used). This can be used to import the certificates
        #        into CGI scripts.
        #   o StdEnvVars:
        #        This exports the standard SSL/TLS related `SSL_*' environment variables.
        #        Per default this exportation is switched off for performance reasons,
        #        because the extraction step is an expensive operation and is usually
        #        useless for serving static content. So one usually enables the
        #        exportation for CGI and SSI requests only.
        #   o OptRenegotiate:
        #        This enables optimized SSL connection renegotiation handling when SSL
        #        directives are used in per-directory context.
        #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>

        #   SSL Protocol Adjustments:
        #   The safe and default but still SSL/TLS standard compliant shutdown
        #   approach is that mod_ssl sends the close notify alert but doesn't wait for
        #   the close notify alert from client. When you need a different shutdown
        #   approach you can use one of the following variables:
        #   o ssl-unclean-shutdown:
        #        This forces an unclean shutdown when the connection is closed, i.e. no
        #        SSL close notify alert is send or allowed to received.  This violates
        #        the SSL/TLS standard but is needed for some brain-dead browsers. Use
        #        this when you receive I/O errors because of the standard approach where
        #        mod_ssl sends the close notify alert.
        #   o ssl-accurate-shutdown:
        #        This forces an accurate shutdown when the connection is closed, i.e. a
        #        SSL close notify alert is send and mod_ssl waits for the close notify
        #        alert of the client. This is 100% SSL/TLS standard compliant, but in
        #        practice often causes hanging connections with brain-dead browsers. Use
        #        this only for browsers where you know that their SSL implementation
        #        works correctly.
        #   Notice: Most problems of broken clients are also related to the HTTP
        #   keep-alive facility, so you usually additionally want to disable
        #   keep-alive for those clients, too. Use variable "nokeepalive" for this.
        #   Similarly, one has to force some clients to use HTTP/1.0 to workaround
        #   their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
        #   "force-response-1.0" for this.
        BrowserMatch "MSIE [2-6]" \
                        nokeepalive ssl-unclean-shutdown \
                        downgrade-1.0 force-response-1.0
        # MSIE 7 and newer should be able to use keepalive
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>  
</IfModule>

远程存储,php-remote-storage ssl conf(参见上面的链接):

 <VirtualHost *:80>
ServerName storage.local

ErrorLog ${APACHE_LOG_DIR}/storage.local_error_log
TransferLog ${APACHE_LOG_DIR}/storage.local_access_log
CustomLog ${APACHE_LOG_DIR}/storage.local_combined_log combined
LogLevel warn

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{ENV:HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost *:443>
ServerName storage.local

ErrorLog ${APACHE_LOG_DIR}/storage.local_ssl_error_log
TransferLog ${APACHE_LOG_DIR}/storage.local_ssl_access_log
CustomLog ${APACHE_LOG_DIR}/storage.local_ssl_combined_log combined
LogLevel warn

DocumentRoot /var/www/php-remote-storage/web

SSLEngine on
SSLCertificateFile /etc/ssl/certs/storage.local.crt
#SSLCertificateChainFile /etc/pki/tls/certs/storage.local-chain.crt
SSLCertificateKeyFile /etc/ssl/private/storage.local.key

SSLProtocol             all -SSLv3 -TLSv1
SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
SSLHonorCipherOrder     on
SSLCompression          off

# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000"

<Directory "/var/www/php-remote-storage/web">
    Options -MultiViews

    Require all granted
    #Require local

    AllowOverride none

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</Directory>

# Limit the request body to 8M
LimitRequestBody 8388608

XSendFile on
XSendFilePath /var/www/php-remote-storage/data/storage

# Pass through the "Authorization" header
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</VirtualHost>

1 个答案:

答案 0 :(得分:1)

我也遇到了一些麻烦。我的一些问题是由于:

您必须使用实际主机名替换“ServerName storage.local”。该证书将因任何其他主机名而失败。

此外,如果您尚未生成SSL加密密钥,则一旦尝试加载配置文件指定的证书,apache2服务器将无法加载。具体做法是:

SSLCertificateFile /etc/ssl/certs/storage.local.crt
SSLCertificateKeyFile /etc/ssl/private/storage.local.key

此外,您要禁用(a2dissite)指定与/ var / www / php-remote-storage / web

不同的DocumentRoot的不同网站

在观察完这些步骤后,我开始运行了。

现在我想知道如何同时托管2个webservices,使用不同的DocumentRoot文件夹,通过相同的端口(443),以及一些不同的别名(例如:server.com/nextcloud和server.com/privatestorage) )。