如何在Nginx + SNI支持下设置SSL Vhosts(Ubuntu 11.04 / Debian Squeeze)
本文介绍如何在Ubuntu 11.04和Debian Squeeze上的nginx下设置SSL vhost,以便您可以通过HTTPS(端口443)访问vhost。 SSL是安全套接字层的缩写,是一种加密协议,通过端到端传输层加密网络连接段,为通过网络进行通信提供安全性。 除此之外,我还将展示如何使用SNI(服务器名称指示)来允许每个IP地址的多个SSL虚拟机。
本文档不附带任何形式的保证! 我不会保证这将为您工作!
1初步说明
我假设你在Ubuntu 11.04或Debian Squeeze框中有一个工作的nginx设置,如这些教程所示:
我将为我的vhost www.hostmauritius
设置SSL 。
com
- hostmauritius.com
是我拥有的一个域 - 将其替换为您自己的域。 我将演示如何使用自签名证书(这将导致浏览器警告当您访问http://www.hostmauritius.com
)以及如何从受信任的证书颁发机构(CA)获取证书,如Verisign ,Thawte,Comodo等 - 使用来自受信任CA的证书,您的访问者将不会看到任何浏览器警告,就像自签名证书一样。 我将使用CAcert.org的证书 - 这些证书是免费的,但不被所有浏览器识别,但它应该提供如何从受信任的CA安装证书的想法。
传统上每个IP地址不可能有多个SSL vhosts。 随着SNI(服务器名称指示)的上升而改变。 我将展示如何在与www.hostmauritius
相同的IP地址上设置第二个SSL vhost(我自己拥有的www.hostmauritius.net)。
在SNI的帮助下。 请注意,目前所有浏览器/操作系统都不支持SNI:
支持TLS服务器名称指示的浏览器/客户端:
- Opera 8.0及更高版本(必须启用TLS 1.1协议)
- Internet Explorer 7或更高版本(仅限Windows Vista和更高版本,不在Windows XP下)
- Firefox 2.0或更高版本
- Curl 7.18.1或更高版本(根据支持SNI的SSL / TLS工具包进行编译时)
- Chrome 6.0或更高版本(在所有平台上 - 仅在特定操作系统版本上最多发布5.0)
- Safari 3.0或更高版本(在OS X 10.5.6或更高版本以及Windows Vista及更高版本下)
要了解您的浏览器是否支持SNI,您可以访问https://alice.sni.velox.ch/ 。
我使用root权限运行本教程中的所有步骤,因此请确保以root用户身份登录。 在Ubuntu上运行
sudo su
成为root用户。
2确定你的Nginx版本
首先,您应该了解您的nginx版本,因为版本<0.8.21和版本> = 0.8.21的SSL配置略有不同。
nginx -v
在Ubuntu 11.04,你应该有nginx 0.8.54:
root@server1:~# nginx -v
nginx version: nginx/0.8.54
root@server1:~#
在Debian Squeeze上,它是nginx 0.7.67:
root@server1:~# nginx -v
nginx version: nginx/0.7.67
root@server1:~#
3设置Vhost
我现在将使用文件根/var/www/www.hostmauritius.com/web
创建vhost www.hostmauritius.com
。 首先我创建该目录:
mkdir -p /var/www/www.hostmauritius.com/web
为http(端口80)创建一个简单的nginx vhost配置:
vi /etc/nginx/sites-available/www.hostmauritius.com.vhost
server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ http://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } |
启用vhost并重新加载nginx:
cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/www.hostmauritius.com.vhost www.hostmauritius.com.vhost
/etc/init.d/nginx reload
4创建自签名证书
在我们设置SSL vhost之前,我们需要一个SSL证书。 现在我将向您展示如何创建自己的自签名证书。 使用此证书,您将获得浏览器警告,但是此证书需要稍后从受信任的CA获取受信任的证书。
确保安装了ssl-cert
软件包:
apt-get install ssl-cert
您现在可以为www.hostmauritius.com
创建一个自签名证书,如下所示:
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/www.hostmauritius.com.crt
您将被要求提供主机名:
主机名:
< - www.hostmauritius.com
这将在一个文件中创建自签名证书和私钥,/ etc/ssl/private/www.hostmauritius.com.crt
:
cat /etc/ssl/private/www.hostmauritius.com.crt
-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAsxOSdUsiEcay6M8EpSu5eeC797v/TpDRGnui4uaYd/YpjrPh PWW01FEIpaCixYb5U2uMuvFOlmZhyfer+7qoJDeueuNW1sDCn/0pkOrdSWgfBuih FkqXgau6KMDvuShcUkZ2ufMbMohiz+9ahMiqKBAxMeXijR7t9eqfmO3s+WGd65l8 5yoEDz+NNxk4w9SZmpIHu8vt37c7PX7fxZntxer56PvElz01gRj0xZsMYMlaHROQ +q/d8p1g0CWTOjlgelQXxqEPGVGphYDMFd8gL5bNbCnJoCeF0CYK5w2Bf+Jfppgv ub8AU8kMPNh/vyRm/7Ximc51dUSGWI/Xp39OcwIDAQABAoIBAA/U8SPRiqeLq5GN i9mWbgVqavPR+RZXE0WGHLZ2sJAagT4OhSFKdpw2tc7+zqUr86r+XSjB4LLHRmn2 rYvJyse47IIMy0adMBe46A3Z1cqBnAyeUG+KFK7wIbsso4T5HoBfnmt+JK9pA2Ni w9vtaa21EMRakJbtXxhYr9dzYXoCk3IcaRqQuDfPBTEfGRXocjHPIIUS9hTk+f13 F3P+pXummLREDJTUGTvSIxA8959EKXSwgwXV2VOEQbGgbjDFKTMYJZhq8H1tz8Ld cYa5zxlbwFxAAeRzxXhycGs1W2rqo8wukhPKLcyYb7HIIZUdX1UDttr9fZAVkXOS d0JSjrECgYEA3sWHwTHcrM4Cd5B2WJAmwrTxmaX0EIKXtm/4SsJ+6Cfw7YrDQwr1 2ERB21K/cv1DouToYjZm2MFNYbroPU4sWc8LD9E+Uf0YqFLBGVX4dqJeQZ76UZ/W tVlZnX7uZnDZnxXDj+TDVK9P3h47jsVHvVhSLtJw77G68vNYDUUoIsUCgYEAzcmO Gca34I3i/n4QFq4Wo3S5KIgJYz8erzMZrEsIOQih7jJbdklazWEZP1d2bMDCZGGz 5kpMxM0IuAp0CwWeIF9oGxv6g3p/St3c7jabjtAqa3WCQznE7q0PXxtXGlb2bbqz TGW3pVWNDMuk1YbxO4f5DHfoaVQOaYwaaniHX9cCgYAzGKuirIUpPbdjJUd/2NCL KGWiEGaCwvF5bwVMYIArT737PjC7V/A7wqw4Wip/fYfd/RMwM7ozTWMqX2yVYzDZ CJxI7H2W4K6fLRwNa6Kp02Q7OPPBdSASSIQ9k7eq14eS7bMFdjs3WV7AW77daHKk A3YWNz6gO+vdfeNcZ9hk4QKBgQC019CJ9Gk47Fe0ICKRW9HHOVdSOCJP1nNnsbd5 AsMqI9zyD8zyqUojvJXMZVdMASWTw4yt71OBi1GDMqSB3yD0AAPj9vVyv57Hsytp KBISMftlTfH4k/btbKZahRNJsWyER5Mzqxv1LrZyrS+g+iJal4aUn3ddwKGdvaKl OGB3JwKBgHePRBaMeMaZdCiCmLAxFD2/kOKs0OCBLVGCUT0QC/fbf4gYbEjsWKug 1Xz4AUj8gaC0udW8im12z06R5p7Mzpxo1I1wgHmYHcJ0Q0P9ntcuxrky5+3ANeLU EKqOZRmINzLgCGcq6g7cUy1UEMoRNtwulSIaoBiXjteHvUKrUAe1 -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIICvDCCAaQCCQDSQb56L0fohTANBgkqhkiG9w0BAQUFADAgMR4wHAYDVQQDExV3 d3cuaG9zdG1hdXJpdGl1cy5jb20wHhcNMTEwOTA2MTA0MzIyWhcNMjEwOTAzMTA0 MzIyWjAgMR4wHAYDVQQDExV3d3cuaG9zdG1hdXJpdGl1cy5jb20wggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzE5J1SyIRxrLozwSlK7l54Lv3u/9OkNEa e6Li5ph39imOs+E9ZbTUUQiloKLFhvlTa4y68U6WZmHJ96v7uqgkN65641bWwMKf /SmQ6t1JaB8G6KEWSpeBq7oowO+5KFxSRna58xsyiGLP71qEyKooEDEx5eKNHu31 6p+Y7ez5YZ3rmXznKgQPP403GTjD1Jmakge7y+3ftzs9ft/Fme3F6vno+8SXPTWB GPTFmwxgyVodE5D6r93ynWDQJZM6OWB6VBfGoQ8ZUamFgMwV3yAvls1sKcmgJ4XQ JgrnDYF/4l+mmC+5vwBTyQw82H+/JGb/teKZznV1RIZYj9enf05zAgMBAAEwDQYJ KoZIhvcNAQEFBQADggEBAEA+HD4u5MIQJ0q3BoXedfqh7z9yqUdBdVXMNYTdEFwn ZlLWy+QkitFMU3M6KsBBwtGO1655kkDOguiSFYBKxVxzEIMx6kV6AH26ALzVhBeF PO6qJnxlTKPojiaolgrlndX9SUH4XD8EBqYuugJ0F1PEcuVDi5yXKwwyuaJw4Uyp CzTU4sy6uduxVaFea0agBN92sy2gZPFPtvMZYJjy2TW1caUt9WLh0l0cPYvW+hPk K2T1sGxW5WOhcwrIRqa8HSkyxXOz1NJZNSXi/yVN4iNMY0nTf0gPP4X1Rl4+OcZk imxe4O9Eu49lEGQ8UipEaGNJ5gD6BECwz5amq64rdqU= -----END CERTIFICATE----- |
我现在将该文件分成两部分,私钥/etc/ssl/private/www.hostmauritius.com.key
和自签名证书/etc/ssl/certs/www.hostmauritius.com.pem
:
vi /etc/ssl/private/www.hostmauritius.com.key
该文件必须包含以----- BEGIN RSA PRIVATE KEY -----开始
的部分,以----- END RSA PRIVATE KEY
结尾-----
:
-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAsxOSdUsiEcay6M8EpSu5eeC797v/TpDRGnui4uaYd/YpjrPh PWW01FEIpaCixYb5U2uMuvFOlmZhyfer+7qoJDeueuNW1sDCn/0pkOrdSWgfBuih FkqXgau6KMDvuShcUkZ2ufMbMohiz+9ahMiqKBAxMeXijR7t9eqfmO3s+WGd65l8 5yoEDz+NNxk4w9SZmpIHu8vt37c7PX7fxZntxer56PvElz01gRj0xZsMYMlaHROQ +q/d8p1g0CWTOjlgelQXxqEPGVGphYDMFd8gL5bNbCnJoCeF0CYK5w2Bf+Jfppgv ub8AU8kMPNh/vyRm/7Ximc51dUSGWI/Xp39OcwIDAQABAoIBAA/U8SPRiqeLq5GN i9mWbgVqavPR+RZXE0WGHLZ2sJAagT4OhSFKdpw2tc7+zqUr86r+XSjB4LLHRmn2 rYvJyse47IIMy0adMBe46A3Z1cqBnAyeUG+KFK7wIbsso4T5HoBfnmt+JK9pA2Ni w9vtaa21EMRakJbtXxhYr9dzYXoCk3IcaRqQuDfPBTEfGRXocjHPIIUS9hTk+f13 F3P+pXummLREDJTUGTvSIxA8959EKXSwgwXV2VOEQbGgbjDFKTMYJZhq8H1tz8Ld cYa5zxlbwFxAAeRzxXhycGs1W2rqo8wukhPKLcyYb7HIIZUdX1UDttr9fZAVkXOS d0JSjrECgYEA3sWHwTHcrM4Cd5B2WJAmwrTxmaX0EIKXtm/4SsJ+6Cfw7YrDQwr1 2ERB21K/cv1DouToYjZm2MFNYbroPU4sWc8LD9E+Uf0YqFLBGVX4dqJeQZ76UZ/W tVlZnX7uZnDZnxXDj+TDVK9P3h47jsVHvVhSLtJw77G68vNYDUUoIsUCgYEAzcmO Gca34I3i/n4QFq4Wo3S5KIgJYz8erzMZrEsIOQih7jJbdklazWEZP1d2bMDCZGGz 5kpMxM0IuAp0CwWeIF9oGxv6g3p/St3c7jabjtAqa3WCQznE7q0PXxtXGlb2bbqz TGW3pVWNDMuk1YbxO4f5DHfoaVQOaYwaaniHX9cCgYAzGKuirIUpPbdjJUd/2NCL KGWiEGaCwvF5bwVMYIArT737PjC7V/A7wqw4Wip/fYfd/RMwM7ozTWMqX2yVYzDZ CJxI7H2W4K6fLRwNa6Kp02Q7OPPBdSASSIQ9k7eq14eS7bMFdjs3WV7AW77daHKk A3YWNz6gO+vdfeNcZ9hk4QKBgQC019CJ9Gk47Fe0ICKRW9HHOVdSOCJP1nNnsbd5 AsMqI9zyD8zyqUojvJXMZVdMASWTw4yt71OBi1GDMqSB3yD0AAPj9vVyv57Hsytp KBISMftlTfH4k/btbKZahRNJsWyER5Mzqxv1LrZyrS+g+iJal4aUn3ddwKGdvaKl OGB3JwKBgHePRBaMeMaZdCiCmLAxFD2/kOKs0OCBLVGCUT0QC/fbf4gYbEjsWKug 1Xz4AUj8gaC0udW8im12z06R5p7Mzpxo1I1wgHmYHcJ0Q0P9ntcuxrky5+3ANeLU EKqOZRmINzLgCGcq6g7cUy1UEMoRNtwulSIaoBiXjteHvUKrUAe1 -----END RSA PRIVATE KEY----- |
密钥只能由root可读写:
chmod 600 /etc/ssl/private/www.hostmauritius.com.key
vi /etc/ssl/certs/www.hostmauritius.com.pem
该文件必须包含以-----开始证书-----
开头的部分,并以----- END CERTIFICATE -----
结尾:
-----BEGIN CERTIFICATE----- MIICvDCCAaQCCQDSQb56L0fohTANBgkqhkiG9w0BAQUFADAgMR4wHAYDVQQDExV3 d3cuaG9zdG1hdXJpdGl1cy5jb20wHhcNMTEwOTA2MTA0MzIyWhcNMjEwOTAzMTA0 MzIyWjAgMR4wHAYDVQQDExV3d3cuaG9zdG1hdXJpdGl1cy5jb20wggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzE5J1SyIRxrLozwSlK7l54Lv3u/9OkNEa e6Li5ph39imOs+E9ZbTUUQiloKLFhvlTa4y68U6WZmHJ96v7uqgkN65641bWwMKf /SmQ6t1JaB8G6KEWSpeBq7oowO+5KFxSRna58xsyiGLP71qEyKooEDEx5eKNHu31 6p+Y7ez5YZ3rmXznKgQPP403GTjD1Jmakge7y+3ftzs9ft/Fme3F6vno+8SXPTWB GPTFmwxgyVodE5D6r93ynWDQJZM6OWB6VBfGoQ8ZUamFgMwV3yAvls1sKcmgJ4XQ JgrnDYF/4l+mmC+5vwBTyQw82H+/JGb/teKZznV1RIZYj9enf05zAgMBAAEwDQYJ KoZIhvcNAQEFBQADggEBAEA+HD4u5MIQJ0q3BoXedfqh7z9yqUdBdVXMNYTdEFwn ZlLWy+QkitFMU3M6KsBBwtGO1655kkDOguiSFYBKxVxzEIMx6kV6AH26ALzVhBeF PO6qJnxlTKPojiaolgrlndX9SUH4XD8EBqYuugJ0F1PEcuVDi5yXKwwyuaJw4Uyp CzTU4sy6uduxVaFea0agBN92sy2gZPFPtvMZYJjy2TW1caUt9WLh0l0cPYvW+hPk K2T1sGxW5WOhcwrIRqa8HSkyxXOz1NJZNSXi/yVN4iNMY0nTf0gPP4X1Rl4+OcZk imxe4O9Eu49lEGQ8UipEaGNJ5gD6BECwz5amq64rdqU= -----END CERTIFICATE----- |
现在我们可以删除/etc/ssl/private/www.hostmauritius.com.crt
文件:
rm -f /etc/ssl/private/www.hostmauritius.com.crt