我以前从来没有在Linux上build立SSL,但对它的工作原理有一个总体的了解。 服务器规格如果有帮助:
服务器:CentOS Linux 6工作站:Windows 7
所以,我有4个域共享一个单一的Magento安装和IP地址。 假设我的一个域名是“mywebsite1.com”我现在想为这个域名启用SSL,但是我遇到了错误。 我究竟做错了什么? 这是我的工作stream程:
我从Godaddy购买了一个SSL,然后用它们给出的命令生成了csr和key:
openssl req -new -newkey rsa:2048 -nodes -keyout mywebsite1.key -out mywebsite1.csr
我将这两个文件复制到/ etc / pki / tls / private
我打开mywebsite1.crs,然后将代码复制并粘贴到Godaddy。
我生成的crt文件,并从Godaddy下载,上传到我的服务器,然后将它们移动到/ etc / pki / tls / certs
一个。 第一次尝试,我打开了/etc/httpd/conf.d/ssl.conf并更新了默认的 VirtualHost块的SSLCertificate File,KeyFile和ChainFile值,以指向正确的位置。
湾 第二次尝试,遵循http://dev.antoinesolutions.com/apache-server/mod_ssl我修改了ssl.conf并添加了这个指令:
NameVirtualHost *:443
C。 然后我删除了整个默认的 VirtualHost块(这是相当长的)。
最后一次尝试,我将以下内容添加到修改后的ssl.conf中
<VirtualHost *:443>
SSLEngine on SSLCertificateFile /etc/pki/tls/certs/mywebsite1.com.crt SSLCertificateKeyFile /etc/pki/tls/private/mywebsite1.key SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle.crt DocumentRoot /var/www/html ServerName mywebsite1.com </VirtualHost>
6 ..我重新启动Apache
7 ..然后我去https://mywebsite1.com只发现错误,阻止我在各种浏览器中查看网站。
浏览器:Firefox
SSL received a record with an unknown content type. (Error code: ssl_error_rx_unknown_record_type)
浏览器:Chrome
Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.
浏览器:IE …把我带到谷歌…
httpd.conf中:
NameVirtualHost 12.34.567.89 <VirtualHost 12.34.567.89> DocumentRoot /var/www/html ServerName website1.com </VirtualHost> <VirtualHost 12.34.567.89> DocumentRoot /var/www/html ServerName website2.com </VirtualHost> <VirtualHost 12.34.567.89> DocumentRoot /var/www/html ServerName website3.com </VirtualHost> <VirtualHost 12.34.567.90:80> DocumentRoot /var/www/html ServerName website4.com </VirtualHost>
笔记:
我已经尝试了所有的步骤3次(见5a-5c),但仍然没有运气让SSL为我的领域的一个工作。 我怎样才能使SSL工作?
更新:apachectl -S
12.34.567.90:80 mywebsite4.com (/etc/httpd/conf/httpd.conf:1021) 12.34.567.89:* is a NameVirtualHost default server mywebsite3.com (/etc/httpd/conf/httpd.conf:1016) port * namevhost mywebsite3.com (/etc/httpd/conf/httpd.conf:1016) port * namevhost mywebsite1.com (/etc/httpd/conf/httpd.conf:1026) port * namevhost mywebsite2.com (/etc/httpd/conf/httpd.conf:1031) port * namevhost mywebsite5.com (/etc/httpd/conf/httpd.conf:1036) wildcard NameVirtualHosts and _default_ servers: *:443 is a NameVirtualHost default server mywebsite1.com (/etc/httpd/conf.d/ssl.conf:77) port 443 namevhost mywebsite1.com (/etc/httpd/conf.d/ssl.conf:77) Syntax OK
更新:得到它的工作..但..
我设法通过更改虚拟主机指向mywebsite1而不是*:443来运行SSL
<VirtualHost mywebsite1.com> SSLEngine on SSLCertificateFile /etc/pki/tls/certs/mywebsite1.com.crt SSLCertificateKeyFile /etc/pki/tls/private/mywebsite1.key #SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle.crt DocumentRoot /var/www/html ServerName mywebsite1.com ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn </VirtualHost>
这拉起了SSL,但是… HTTP协议返回一个“错误的请求”
这个改变似乎正在影响网站的非ssl查看。 我不能指定端口,因为重新启动Apache会给我一个错误,端口和非端口不能混合。
UPDATE
修复迈克尔·汉普顿的build议。 多谢你们。
您有一堆没有定义端口号的<VirtualHost>条目。 因此,当你的apachectl -S输出显示时,定义被应用到所有侦听端口。 为每个<VirtualHost>定义一个端口号。
如果您使用的是默认的/etc/httpd/conf.d/ssl.conf,则应该有日志:
ErrorLog logs / ssl_error_log TransferLog logs / ssl_access_log LogLevel警告
尝试摆脱:
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle.crt
并确保您的证书没有复制粘贴中的缺失行。
如果遇到问题,请先尝试使用自签名证书进行testing: http : //httpd.apache.org/docs/2.0/ssl/ssl_faq.html#selfcert
这应该有助于解决其他问题:
http://www.instantssl.com/ssl-certificate-support/server_faq/ssl-server-certificate-apache.html