<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[利用Lets Encrypt给站点加上小绿锁]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Wed, 08 Feb 2017 06:26:05 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	HTTPS（全称：Hyper Text Transfer Protocol over Secure Socket Layer），是以安全为目标的HTTP通道，简单讲是HTTP的安全版。即HTTP下加入SSL层，HTTPS的安全基础是SSL，因此加密的详细内容就需要SSL。<br/><br/>Let's Encrypt，是2016年4月12日成立的一家证书授权中心，提供免费的传输层安全（TLS）X.509证书，通过自动化的过程消除目前安全网站证书需要手工创建，加密，签名，安装以及更新的复杂性。<br/>一直以来都觉得浏览器网址开头的那把小绿锁很别致啊，现在Let's Encrypt横空出世提供免费证书，说明https势在必行，那我也来动手给博客加把锁吧，看着就安全是吧。<br/><br/>Let's Encrypt 的<a href="https://letsencrypt.org/" target="_blank">官网</a>提供的脚本看起来更加自动化一些，但我没有亲自尝试，而是在Github上搜到了一个开源脚本<a href="https://github.com/diafygi/acme-tiny" target="_blank">acme-tiny</a>，用下来之后成功将博客加密完成。<br/><br/>根据acme-tiny提供的说明文档和我自己的实施过程列出以下几步：<br/><a href="http://www.dzhope.com/attachment.php?fid=88" target="_blank"><img src="http://www.dzhope.com/attachment.php?fid=88" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>克隆脚本<br/><div class="code"><br/>sudo git clone https://github.com/diafygi/acme-tiny.git&nbsp;&nbsp;<br/>cd acme-tiny<br/></div><br/>创建Let's Encrypt私钥<br/><div class="code"><br/>openssl genrsa 4096 &gt; account.key<br/></div><br/>创建CSR(Certificate Signing Request，证书签名请求) 文件<br/><br/>ACME协议 (Let's Encrypt所使用的) 需要一个csr文件，用来进行证书签名和证书更新。<br/>将需要加密的域名加到下面的代码中，目前一张证书最多可以加密 100 个域名：<br/><br/><div class="code"><br/>openssl genrsa 4096 &gt; domain.key&nbsp;&nbsp;&nbsp;&nbsp; <br/>openssl req -new -sha256 -key domain.key -subj &quot;/&quot; -reqexts SAN -config &lt;(cat /etc/ssl/openssl.cnf &lt;(printf &quot;&#91;SAN&#93;&#92;nsubjectAltName=DNS:yoursite.com,DNS:www.yoursite.com&quot;)) &gt; domain.csr<br/></div><br/><br/>注意：openssl.cnf 文件的位置可能会因为linux版本的不同而有变<br/>证明你拥有该域名<br/><br/>acme-tiny脚本会生成验证文件并写入到你指定的目录下，然后通过 ".well-known/acme-challenge/" 这个URL来访问到验证文件. 注意: Let's Encrypt 会对你的服务器做一次http请求来进行验证，因此你需要保证80端口能够访问.<br/><br/>手动生成challenges目录，用来存放验证文件（路径可以根据需要修改）<br/><div class="code"><br/>mkdir -p /var/www/challenges<br/></div><br/>配置nignx的80端口<br/><br/><div class="code"><br/>server &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen 80;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name yoursite.com www.yoursite.com;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( $request_uri !~ &quot;/.well-known/acme-challenge/*&quot; ) &#123; # 让 Let&#039;s Encrypt 成功访问到验证文件不受 301 影响<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 301 https://yoursite.com$request_uri; # 注意进行301重定向到https，否则通过http仍能访问你的站点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location /.well-known/acme-challenge/ &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alias /var/www/challenges/;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try_files $uri =404;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#...你的其他配置<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/></div><br/><br/>Apache 则需修改 .htaccess 文件配置301重定向：<br/><div class="code"><br/>RewriteEngine On<br/>RewriteCond %&#123;HTTPS&#125; off<br/>RewriteRule (.*) https://%&#123;HTTP_HOST&#125;%&#123;REQUEST_URI&#125; &#91;R=301,L&#93;<br/></div><br/><br/>获取签名证书<br/><br/><div class="code"><br/>sudo chmod +x acme_tiny.py&nbsp;&nbsp;<br/>python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /var/www/challenges/ &gt; ./signed.crt<br/></div><br/><br/>安装证书<br/><br/>针对nginx, 你还需要将 Let's Encrypt 的中间件证书 intermediate.pem 内容附加在签名证书signed.crt之后：<br/><div class="code"><br/>&nbsp;&nbsp;&nbsp;&nbsp;wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem &gt; intermediate.pem&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;cat signed.crt intermediate.pem &gt; chained.pem<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen 443;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name yoursite.com www.yoursite.com;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl on;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl_certificate /path/to/chained.pem;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl_certificate_key /path/to/domain.key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl_session_timeout 5m;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl_session_cache shared:SSL:50m;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssl_prefer_server_ciphers on;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#...你的其他配置<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/></div><br/><br/>证书自动更新定时任务<br/><br/>恭喜！你的网站已经使用上了HTTPS。 但Let's Encrypt 证书有效期只有90天, 所以需要定期更新。现在只需要写一个更新脚本并把它放到定时任务中即可。<br/><br/>脚本内容：<br/><div class="code"><br/>&nbsp;&nbsp;&nbsp;&nbsp;#!/usr/bin/sh<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;python /path/to/acme_tiny.py --account-key /path/to/account.key --csr /path/to/domain.csr --acme-dir /var/www/challenges/ &gt; /tmp/signed.crt &#124;&#124; exit<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem &gt; intermediate.pem<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cat /tmp/signed.crt intermediate.pem &gt; /path/to/chained.pem<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;service nginx reload<br/></div><br/><br/>定时任务可以设置为每个月执行一次：<br/><div class="code"><br/>0 0 1 * * /path/to/renew_cert.sh 2&gt;&gt; /var/log/acme_tiny.log<br/></div><br/><br/>原文：<a href="https://macken.me/article/encrypt-your-webiste-with-lets-encrypt" target="_blank">https://macken.me/article/encrypt-your-webiste-with-lets-encrypt</a><br/>Tags - <a href="http://www.dzhope.com/tags/ssl/" rel="tag">ssl</a> , <a href="http://www.dzhope.com/tags/https/" rel="tag">https</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] 利用Lets Encrypt给站点加上小绿锁]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>