编辑:问题解决了,确实是服务器的防火墙阻止了端口 443。现在一切正常
我正在尝试在 ubuntu 上运行的 apache 服务器上安装自签名 SSL 证书。我启用了 SSL 模块,编辑了 default-ssl.conf,并将创建自签名证书时作为 CommonName 的 IP 地址设置为 ServerName。我编辑了文件中 .crt 和 .key 文件的位置。然后我启用了 default-ssl.conf 文件并重新启动了 apache。
我每个步骤检查了五次,所以我很确定我没有犯错误。
当我尝试访问时,https://ip_address
它没有加载。我检查了 443 端口是否打开。有没有办法查看问题出在哪里?我只是不知道下一步该尝试什么。我正在通过 ssh 访问服务器。
这是我当前的 default-ssl.conf:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName 54.82.28.171:443
DocumentRoot /var/www
<Directory />
Options FollowSymLinksAllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
# 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.2-common/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/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
我的端口.conf:
NameVirtualHost *:80
NameVirtualHost *:443
Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
ErrorLog /var/log/apache2/ssl_access.log
LogLevel debug
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
我还编辑了 /etc/hosts 和 /etc/hostname 并添加了 ip 地址
我查看了 /var/log/apache2/error.log,有两行可能表明存在问题:
RSA server certificate is a CA certificate
RSA server certificate CommonName (CN) `54.82.28.171' does NOT match server name!?
我真的很难找到问题所在。我确信这是一件愚蠢的事情,但我不知道是什么!
编辑 :
我刚刚尝试 openssl s_client -connect 54.82.28.171:443 我得到了:
connect: Connection timed out
connect:errno=110
我认为这意味着连接被拒绝,意味着端口 443 没有打开?当我说没有加载时,我的意思是浏览器说“网页无法访问”。当我尝试在没有 https 的情况下访问同一页面时,我的 index.html 页面正在加载
否则 apache2ctl -S 的输出:
/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443 is a NameVirtualHost
default server 54.82.28.171 (/etc/apache2/sites-enabled/default-ssl:3)
port 443 namevhost 54.82.28.171 (/etc/apache2/sites-enabled/default-ssl:3)
*:80 is a NameVirtualHost
default server dash.amatiscontrols.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost dash.amatiscontrols.com (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost amatisdash.com (/etc/apache2/sites-enabled/amatisdash.com:1)
Syntax OK
编辑:服务器上有防火墙……没有打开 443,所以应该可以解释一切。不过我可以自己打开端口,但必须等待才能确定。无论如何,谢谢你!
谢谢
答案1
可能有助于分析 SSL 尝试时实际发生的情况。是时候打破 openssl 了!
请查看以下 openssl 的手册页: https://www.openssl.org/docs/apps/s_client.html
具体请查看注释部分提供的参考(只需向下滚动)。正如它所述,您可以尝试以下操作:
openssl s_client -connect 服务器名称:443
这可能会为您提供有关失败原因的更多信息。
至于错误日志条目 - 第一行很奇怪...我想知道证书的使用是否不太正确...第二行看起来更常见,虽然通常是由于在向 FQDN 颁发证书时基于 IP 进行连接而导致的...我会从 openssl 连接测试开始,看看你是否可以收集更多信息。
最后但并非最不重要的一点是...您说页面没有加载,您遇到了错误还是只是显示空白页?只是确保您确实在页面上显示了某些内容 :)
答案2
ServerName 54.82.28.171:443
不是有效的服务器名称因为它是一个 IP 地址和端口,而不是一个完全合格的域名,所以它应该是这样的ServerName www.example.com
。
其次,无论您使用的是 IP 地址54.82.28.171:443 != 54.82.28.171
,您的 ServerName 都应该与 SSL 证书中的通用名称相同。
第三个是错误消息,它似乎表明您的公共证书根本不是自签名证书,而是 CA 证书。这可能是因为通用名称不是 FQDN 而是 IP 地址,我不确定。
您可以使用以下命令将当前证书/etc/apache2/ssl/apache.crt
从 PEM 编码转换为更易读的编码:
openssl x509 -in apache.crt -noout -text
结果包括以下内容:
X509v3 Basic Constraints:
CA:TRUE
可能是 Aapche 将该证书视为 CA 证书的原因,但据我所知,这对于自签名证书来说并不一定错误。