Apache SSL Remotestorage 服务器不工作

标签 apache ssl apache2 remotestorage

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

我以前没有在我的服务器上设置 SSL,所以出现了一个全新的 apache2 安装。我已经按照信中的说明进行操作,只需用我自己的子域替换所有出现的 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>

最佳答案

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

您必须将“ServerName storage.local”替换为您的实际主机名。对于任何其他主机名,该证书都将失败。

此外,如果您没有生成 SSL 加密 key ,则 apache2 服务器在尝试加载您的配置文件指定的证书时将无法加载。具体来说:

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

此外,您还想禁用 (a2dissite) 指定不同于/var/www/php-remote-storage/web 的 DocumentRoot 的不同网站

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

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

关于Apache SSL Remotestorage 服务器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505695/

相关文章:

azure - Subversion 提交后错误 : Couldn't open rep-cache database

bash - 如何在 Apache2 CGI 中捕获参数值

apache - 在 ubuntu 上部署 Laravel

php - "service httpd reload"会重新加载新的 php.ini 设置吗?

wordpress - 如何将媒体文件 http 重定向到 https?

Apache 在 mod_jk 之前重写(删除 www)

Git 在 Windows 上停止通过 SSL 工作

ssl - WebSphere Liberty Profile 17.0.0.4 破坏了 JAX-RS 客户端 TrustStore-

c# - Azure 上的 Cyber​​Source

php - macOS Mojave 更新后 Apache 不工作