certbot+letsencrypt配置免费单证书多域名ssl证书

前些天看到微信公众平台官方公告关于公众平台接口不再支持HTTP方式调用的公告之后决定把项目的协议从http改成https,于是开始在网上查,完成之后总结了一点经验 本文演示的是通用证书,即在certbot命令中不需要指定--apache或者--nginx之类,只需要在完成证书生成之后在服务器配置文件里进行引用即可 Let’s Encrypt Let’s Encrypt 认证签发为每3个月一次,也就是每 90 天必须更新(renew)一次。取得认证的过程需要进主机安裝代理程序:certbot,下面以ubuntu为例: 安装 $ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install certbot 生成证书 $ sudo certbot certonly 此时会出现选项,按照提示选择即可 证书自动续期可以使用 certbot renew --force-renew 手动强制为证书续期 如果出现以下提示则说明更新成功 Congratulations, all renewals succeeded. The following certs have been renewed: 但为了更方便,通常使用crontab -e编辑定时任务,并加入 0 0 1 * * certbot renew --force-renew “重启服务器命令” 实现每个月1号0点自动续期 在服务器配置相关证书 apache2开启SSL tips: 如果有多个域名 可以用过在Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel):步骤通过,来分隔域名 可以使用以下命令来直接生成多个域名的证书 $ sudo certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is 生成的证书通常保存在/etc/letsencrypt/live/目录下 注意:如果失败超过5次会被服务器屏蔽1小时 ...

January 3, 2018 · 1 min · 108 words

apache2开启SSL

windows+apache2开启SSL以及80端口强制跳转SSL访问的方法 申请证书 推荐Let’s Encrypt(免费证书的有效期为3个月,但提供了自动更新证书的功能),也可以用阿里云(免费证书有效期1年,目前是手动更新) 开启ssl模块 首先确保apache开启了LoadModule ssl_module modules/mod_ssl.so 配置443端口 再参考官方文档的一段内容: Listen 443 <VirtualHost *:443> DocumentRoot "项目入口文件目录" ServerName 域名 SSLEngine on SSLCertificateFile "路径/文件名.cert" SSLCertificateKeyFile "路径/文件名.key" </VirtualHost> 在apache的vhosts.conf中添加以上代码,重启apache 配置80端口跳转443 这里直接上代码: <VirtualHost *:80> RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/?(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] ServerName 域名 </VirtualHost> 告诉apache将该域名下80端口的所有请求跳转到443,重启apache 至此配置完成 在ubuntu环境下配置基本一样,开启apache ssl模块支持使用sudo a2enmod ssl,然后重启service apache2 restart 补充: 后面在一个微信项目中发现以上做法的一个问题: 安卓手机在使用微信内置浏览器QQ浏览器X5内核提供技术支持访问可能会出现页面空白的情况,而在PC端的调试工具和IOS以及其他浏览器上未发现该问题 解决方法:修改虚拟机配置如下: Listen 443 <VirtualHost *:443> DocumentRoot "项目入口文件目录" ServerName 域名 SSLEngine on SSLCertificateFile "路径/文件名.cert" SSLCertificateKeyFile "路径/文件名.key" SSLCertificateChainFile "路径/文件名.pem" </VirtualHost> 其实就是添加了一行SSLCertificateChainFile ...

September 8, 2017 · 1 min · 72 words