RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
upupw 配置ssl
NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot “D:/www”
ServerName www.xxx.com
ServerAlias www.xxx.com
ServerAdmin admin@xxx.com
DirectoryIndex index.html index.htm index.php default.php app.php u.php
FcgidInitialEnv PHPRC “D:/UPUPW_ANK_W64/Modules/PHPX/PHP7X/php.ini”
ExpiresActive Off
BandwidthModule Off
ForceBandWidthModule Off
SSLEngine on
SSLCertificateFile “D:\UPUPW_ANK_W64\WebServer\Apache\xxx.com.crt”
SSLCertificateKeyFile “D:\UPUPW_ANK_W64\WebServer\Apache\xxx.com..key”
SSLCertificateChainFile “D:\UPUPW_ANK_W64\WebServer\Apache\ca.crt”
<FilesMatch “\.(cgi|shtml|phtml|php)$”>
SSLOptions +StdEnvVars
</FilesMatch>
<Directory “D:/www”>
Options FollowSymLinks ExecCGI
AllowOverride All
<RequireAll>
Require all granted
</RequireAll>
</Directory>
<LocationMatch “/(attachment|attachments|uploadfiles|avatar)/(.*).(php|phps|php5|php7|fcgi|jsp|jspx|asp|aspx|asa|asax|ascx|ashx|asmx|axd)$”>
AllowOverride none
Require all denied
</LocationMatch>
</VirtualHost>
Apache http自动跳转到https的几种方法
方法1
RewriteEngine On RewriteBase / RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://yusky.me/$1 [R=301,L] #这样跳转的好处是独立IP主机也支持,访问ip能自动跳转到https
方法二
RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L] #整站跳转
方法三
RewriteEngine on RewriteBase /yourfolder RewriteCond %{SERVER_PORT} !^443$ #RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L] RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] #以上至针对某个目录跳转, yourfolder就是目录名
方法4
redirect 301 /你的网页 https://你的主机+网页 #至针对某个网页跳转
方法5
RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteCond %{REQUEST_URI} !^/tz.php RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
解释:
%{SERVER_PORT} —— 访问端口 %{REQUEST_URI} —— 比如如果url是 http://localhost/tz.php,则是指 /tz.php %{SERVER_NAME} —— 比如如果url是 http://localhost/tz.php,则是指 localhost
LNMP 全站部署 SSL & HTTP/2[SPDY]
SPDY 是 Google 开发的基于传输控制协议(TCP)的应用层协议,开发组正在推动 SPDY 成为正式标准(现为互联网草案)。SPDY 协议类似于 HTTP,但旨在缩短网页的加载时间和提高安全性,通过压缩、多路复用和优先级来缩短加载时间。
SPDY 并不是首字母缩略字,而仅仅是“speedy”的缩写,意为“更快”,现为 Google 的商标。
Google Chrome 用户打开 chrome://net-internals/#spdy 就会发现你已经在使用 SPDY 协议了。
Nginx 的配置方法
系统自带的 OpenSSL 版本过低,不支持 SPDY,直接使用会报错以下错误:
所以你要先下载最新的 OpenSSL,目前是 1.0.1e,这里是下载列表,红色标注的就是最新版了。
只下载、解压即可
cd /tmp wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz tar zxvpf openssl-1.0.1e.tar.gz
然后下载最新的Nginx ,
解压、编译、安装
cd /tmp wget http://nginx.org/download/nginx-1.5.6.tar.gz tar zxvpf nginx-1.5.6.tar.gz cd nginx-1.5.6 ./configure --with-http_ssl_module --with-http_spdy_module --with-openssl=/tmp/openssl-1.0.1e make make install
如果是升级的话,编译完成后不要再执行 make install,不然会把原有的配置文件覆盖,正确的方法是直接删除旧的,把新的复制过去后执行 make upgrade:
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak unalias cp cp -f ./objs/nginx /usr/local/nginx/sbin/ make upgrade
Nginx 配置文件示例(有删减,不要直接使用)
server { # 合并 http/https 主机 listen 80; # 开启 ssl & spdy listen 443 ssl spdy; # 主机名 server_name www.sinosky.org; # 为这个虚拟主机指定 PEM 格式的证书文件,这个文件可以包含其他的证书和服务器私钥,同样,密钥也必须是PEM格式 ssl_certificate /home/www/etc/ssl/certs/main.crt; # 为这个虚拟主机指定 PEM 格式的私钥 ssl_certificate_key /home/www/etc/ssl/private/main.key; # 指出为建立安全连接,服务器所允许的密码格式列表,密码指定为 OpenSSL 支持的格式 # http://www.openssl.org/docs/apps/ciphers.html ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!CAMELLIA:!PSK:!SRP; # 指定要开启的 SSL 协议 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; # 优化 SSL 的访问速度和资源消耗 # 依赖 SSLv3 和 TLSv1 协议的服务器密码将优先于客户端密码 ssl_prefer_server_ciphers on; # 设置储存 SSL 会话的缓存类型和大小 ssl_session_cache shared:SSL:10m; # 设置客户端能够反复使用储存在缓存中的会话参数时间 ssl_session_timeout 10m; # 不设置以下两项,Firefox 会报 sec_error_ocsp_unknown_cert 错误 # 启用 OCSP 响应验证服务器 ssl_stapling on; # CA 证书,可以与服务器证书放在一个文件里 ssl_trusted_certificate /home/www/etc/ssl/certs/main.crt; # 以上设置在官方文档都有详细说明 http://nginx.org/en/docs/http/ngx_http_ssl_module.html # 强制使用 https(http 跳转到 https),$ssl_protocol 为所用的 SSL 协议,如果为空就一定是 http 了 # 除此外的检测方法还有 $server_port = 80、$scheme = http、error_page 497 等,下面会详细说明 if ($ssl_protocol = "") { return 301 https://$server_name$request_uri; } # HTTP Strict Transport Security,简称 HSTS # 当用户在浏览器输入不带协议的网址的时候,自动识别协议为 https,而不是 http # 如果你的子域没有全部部署 https,请去掉 includeSubDomains add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; }
再关于强制使用 https(http 跳转到 https),最常见的是配置两个主机,一个监听 80,一个监听 443,监听 80 的那个直接转发到 443。
再不常见的方法还有:合并 http/https 主机,检测 $server_port = 80、$scheme = http 或发送 error code 497 等。
$server_port 是浏览器请求到达的服务器端口号;$scheme 是所用的协议,有 http 和 https,不过使用 $ssl_protocol 和这两种检测方法对于 http://www.sinosky.org:443 无效,最典型的例子就是 phpMyAdmin 在登录时会请求 http://www.sinosky.org:443。
497 是 nginx 的状态码,意思是 The plain HTTP request was sent to HTTPS port,虽然也能起到跳转的作用,但返回到客户端是 302 而不是 301,不过对于 http://www.sinosky.org:443 有效,建议配合前面 3 种方法一块使用。
下面是 3 种方法的示例
if ($server_port = 80) { return 301 https://$server_name$request_uri; } if ($scheme = http) { return 301 https://$server_name$request_uri; } error_page 497 https://$server_name$request_uri;
提示一点,证书文件一定要含有签发证书的 CA 和 根 CA 的证书,并配置 ssl_trusted_certificate(nginx)或 SSLCertificateChainFile(apache),否则浏览器可能无法识别证书链。服务器的证书在最上面,二级 CA 在中间,最后是根 CA,顺序不能错。
比如 StartSSL 的证书(来自官方的说明),先获取 CA 的证书然后合并:
wget http://www.startssl.com/certs/ca.pem wget http://www.startssl.com/certs/sub.class1.server.ca.pem at ssl.crt sub.class1.server.ca.pem ca.pem >> /home/www/etc/ssl/certs/main.crt
再配置完成后,执行 /etc/init.d/nginx reload 或 /usr/local/nginx/sbin/nginx -s reload 重载 Nginx 配置文件即可正常访问了。
IIS7多域名版证书配置
APPcmd.exe 位于 C:\Windows\System32\inetsrv 目录
使用 Cd c:\Windows\System32\inetsrv 切换到该目录
appcmd set site /site.name:“mysite” /+bindings.[protocol=‘https’,bindingInformation=‘ip:域名’]
appcmd set site /site.name:“mysite” /+bindings.[protocol=‘https’,bindingInformation=‘*:443:域名’]
|
多域名证书部署 IIS6
- 在IIS 7.X中,如果在绑定中,选定了的不是*开头的通配符证书,上面主机头一栏,自动变成灰色(IIS8没有这个问题),这样就不可以设置主机头,有2种解决办法,第一种比较方便些。
- 导入证书,可以通过MMC,或者IIS方式。
- 进入MMC,找到刚导入的证书,选择属性,添加一个友好名称,譬如原来是www.myssl.cn改成*www.myssl.cn,就是要保证第一个字符是*. 这样IIS就会判断这个是通配符证书,然后允许输入主机头了。
- 以后部分参考上面的通配符证书操作了。
IIS6
- 检查WINDOWS2003是否已经升级到SP1以上版本,如果没有升级SP1,则后续步骤将无法完成
- 确保使用的证书是多域名,或者是通配符证书,两个网站必须都使用这个证书,如果这个证书的CN和SAN不包含着2个网站的域名,就会报警告
- 首先按正常的流程,为站点1,安装SSL证书,并将SSL端口配置为443。
- 对站点2,选择分配证书,并选择站点1使用的证书,并将SSL端口配置为其他端口号(444,445,446…)
- 请用本机管理员登入系统,启动命令行程序“cmd”。
- 运行以下指令:
cscript.exe c:\inetpub\adminscripts\adsutil.vbs set /w3svc/站点标识符/SecureBindings ":443:主机头"
- 回到IIS6控制台,刷新,可以发现网站2的SSL端口已经改成443了。