自从google宣布友好支持https之后,很多依靠google的站长都开始对网站ssl加密重视起来,特别是在google推广中要求购物网站的用户登录和付款页面必须使用https加密协议之后,很多依赖google的站长必须得给网站开通https访问。
对于国内很多linux用户来说,wdlinux和wdcp系统还是非常流行的,今天刚好遇到了这个问题,必须要mark一下,以备后用。那么今天简单介绍一下给wdcp的多网站系统开通https的方法。
WDCP的网站运行环境一般情况下,我们使用的是nginx和apache双引擎系统,即nginx处理前端,apache处理后端,采用的mysql数据库。我们要开通https给用户访问,那么开通nginx环境的https访问就ok了。
开通https访问首先需要一个创建我们的相关证书,首先需要在我们的服务器生成crs请求证书
openssl genrsa -des3 -out www.baishujun.com.key 1024 openssl req -new -key www.baishujun.com.key -out www.baishujun.com.csr openssl rsa -in www.baishujun.com.key -out www.baishujun.com.nopass.key openssl x509 -req -days 365 -in www.baishujun.com.csr -signkey www.baishujun.com.nopass.key -out www.baishujun.com.crt
第一行是生成我们的服务器私钥,即key文件,在这里说明一下,有的ssl网站要求是2048位的。
第二步是生成我们的csr文件,这个文件就是我们需要提交到ssl网站去申请ssl证书的签名文件,生成这个文件,有几个注意的地方,第一个就是国家名只能是两个字母,并且是大写!省份城市照实写就好了,另外一个需要注意的地方就是common name需要填写您的域名或者ip之类的,email就可以留空了。
把这个生成的crs文件下载下来,复制里面相关的内容,提交给ssl网站,ssl网站就会根据这个签名文件生成根域名证书,等等文件,但是这里,我们就需要这个根域名证书就好了。
第三句的意思是去掉生成的私钥key的密码,不然每次重启nginx都需要手动输入密码,那将是一个非常烦人的事情了,如果设定自动重启的话,那么将无法完成了。在这里需要提醒一句的是,要按照顺序来执行,有了第一步的key才能生成第二步的csr。
沃通的免费证书已经关闭了,可以去腾讯云:https://console.qcloud.com/ssl或者startsll:https://www.startssl.com/申请免费SSL的crt证书。
说到这里,得推荐一个免费的ssl申请网站,沃通CA免费SSL证书http://www.wosign.com/Products/free_SSL.htm,使用这个申请免费ssl相当方便,如果使用它,那么前面的所有工作都免了,只要你登陆这个网站,绑定域名,他会自动给你把私钥key,根域名证书统统生成好,如果是中文ssl证书,无须审核,马上提交就马上发放证书了,相当滴快递,免去了自己生产key和ssl给的证书不匹配的问题。我就遇到过这个情况,始终不匹配,让人烦死了。但是也如网站所推荐,这类免费的ssl证书可能并不适合电子商务网站,电子商务网站还是推荐EV SSL证书。
沃通SSL证书比较人性化的一点是,他会把各种环境的ssl都一次性的给你生成打包出来,下载后你根据自己的情况选择就好了。
我们把nginx目录中的文件上传到wdcp,这里是1_www.baishujun.com_bundle.crt和2_www.baishujun.com.key
自己建立一个目录,专门用来放ssl文件,比如/www/ssl/。
现在来配置我们网站,wdcp的网站配置文件都是位于/www/wdlinux/nginx/conf/vhost
下面,比如我的网站配置文件就是/www/wdlinux/nginx/conf/vhost/baishujun.com.conf
server { listen 80; server_namebaishujun.com www.baishujun.com; root /www/web/baishujun_com_daieidkdiii/public_html; index index.html index.php; error_page 400 /errpage/400.html; error_page 403 /errpage/403.html; error_page 404 /errpage/404.html; error_page 405 /errpage/405.html; location ~ \.php$ { proxy_pass http://127.0.0.1:88; include naproxy.conf; } location / { try_files $uri @apache; } location @apache { proxy_pass http://127.0.0.1:88; include naproxy.conf; } }
在listen 80;下面添加4行代码
listen 443 ssl; ssl_certificate /www/ssl/2_www.baishujun.com.key; ssl_certificate_key /www/ssl/1_www.baishujun.com_bundle.crt; ssl_session_timeout 5m;
这样配置文件baishujun.com.conf就成了
server { listen 80; listen 443 ssl; ssl_certificate /www/ssl/2_www.baishujun.com.key; ssl_certificate_key /www/ssl/1_www.baishujun.com_bundle.crt; ssl_session_timeout 5m; server_namebaishujun.com www.baishujun.com; root /www/web/baishujun_com_daieidkdiii/public_html; index index.html index.php; error_page 400 /errpage/400.html; error_page 403 /errpage/403.html; error_page 404 /errpage/404.html; error_page 405 /errpage/405.html; location ~ \.php$ { proxy_pass http://127.0.0.1:88; include naproxy.conf; } location / { try_files $uri @apache; } location @apache { proxy_pass http://127.0.0.1:88; include naproxy.conf; } }
对于这个文件的修改当然可以用vi直接编辑,但是文字较多,输入麻烦,个人建议不要使用wdcp后台文件管理的文件编辑功能,很容易出现编码错误的问题。推荐从wdcp的”系统管理-文件管理“这里下载下来,然后用emeditor来编辑,然后上传上去,先用cp命令做一个备份,然后cp过去把原来的conf文件覆盖掉。
做好了这个工作之后,一定要在wdcp后台的“安全管理-防火墙(iptables)”,里面添加规则,目标端口443,其它都不管,开通443端口,这是ssl使用的端口,然后一定记得点击保存,不然重启又没了。
做好了这些之后,那么我们重启一下服务器,或者单独重启http和nginx。命令如下
service httpd restart service nginxd restart
如果看到结果是绿色的ok,那么说明配置就成功了,如果是红色的failed,那么多半情况就是key和crt不匹配,好好检查吧。
20170111,针对WWDCP,更新一个主要问题。
我们前面为了开启SSL,修改的配置文件是/www/wdlinux/nginx/conf/vhost/baishujun.com.conf
。对于WDCP的系统来说,这里面存在一个较大的问题,那就是在后台对这个网站进行任何配置,那么这个我们手动修改的内容就全部没有了。需要再配置一次。
今天摸索了一下,其实这个443端口的加载不一定非得在虚拟主机的配置文件种加载,我们可以直接在nginx.inf中加载,删除掉baishujun.com.conf
种443 server语句块,把这个语句块放到/www/wdlinux/nginx/conf/nginx.conf
的http中,
http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 22m; limit_conn_zone $binary_remote_addr zone=one:32k; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; log_format wwwlogs '$remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #include default.conf; include vhost/*.conf; server { listen 443 ssl; server_name baishujun.com www.baishujun.com; ssl_certificate /www/ssl/2_www.baishujun.com.key; ssl_certificate_key /www/ssl/1_www.baishujun.com_bundle.crt; ssl_session_timeout 5m; root /www/web/baishujun_com_daieidkdiii/public_html; index index.html index.php; error_page 400 /errpage/400.html; error_page 403 /errpage/403.html; error_page 404 /errpage/404.html; error_page 405 /errpage/405.html; location ~ \.php$ { proxy_pass http://127.0.0.1:88; include naproxy.conf; } location / { try_files $uri @apache; } location @apache { proxy_pass http://127.0.0.1:88; include naproxy.conf; } } }