<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fwolf's Blog &#187; https - Fwolf's Blog</title>
	<atom:link href="http://www.fwolf.com/blog/post/tag/https/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fwolf.com/blog</link>
	<description>随心·随意·随缘·努力～</description>
	<lastBuildDate>Wed, 07 Jul 2010 07:07:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>使用了无效的ssl证书，feedburner无法抓取feed的解决方法</title>
		<link>http://www.fwolf.com/blog/post/408</link>
		<comments>http://www.fwolf.com/blog/post/408#comments</comments>
		<pubDate>Wed, 25 Jun 2008 18:17:55 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">https://www.fwolf.com/blog/?p=408</guid>
		<description><![CDATA[始终割舍不下https，虽然它会多消耗一些资源，但毕竟可以让网站免于某些风暴，不过M.zdpress提出了一个我没有注意到的问题，feedburner无法抓取feed了，试了一下，果然： 可以看出错误的原因是使用了无效的证书（当然无效，同时猜测fb使用的是Java），从证书这边着手看来是没希望了，只能换其他的方式。 前端时间在GFans里听到过可以用Google Reader实现类似feed重烧或转发的功能，遂想用这个来试一试。 首先在GR中订阅自己的feed，然后给它打上一个tag（标签），也有的地方叫folder（目录），都一样，注意tag名最好唯一、专用，不要和其他的重复，比如我就直接用blog名作标签名称。GR不像FB，证书无效也没有关系。 然后在Settings->Tags中找到这个标签，点后面的广播图标，private就变成了public，后面的链接也随之出现了： 在后面的几个链接中点email a link，填上自己的邮箱，发送，会收到一封信，里面有两个链接： • View my shared items • Subscribe to a feed of my shared items 使用其中第二行的链接，形式类似： https://www.google.com/reader/public/atom/user/12175931868835525338/label/Fwolf%27s%20Blog 这个地址打开基本就是你原来feed的原貌！只是多了GR的一些附加信息，比如Blog标题从Fwolf's Blog变成了"Fwolf's Blog" via Fwolf in Google Reader、文章标题后来多出了个时间，我觉得这些是可以接受的，文章的内容基本不走样。 最重要的是，这个地址虽然也是https的，但它的证书是Google用于GR的，是有效的，是FB承认的，所以在FB中修改你原来的种子，把这个地址设置为Original Feed，FB就可以正常更新了。 回顾一下，其实道理很简单，就是用GR“重烧”了一个种子，转发给FB而已。至于Blog程序自带的feed地址就不用再说了吧，其他feed阅读网站也可以使用同样的方式达到目的。 最后，感谢妖精的提示，嘿嘿。 Tags: feed, feedburner, Google, https, ssl Related posts 配置Apache的ssl安全连接 (3) 生成用于web服务器的openssl证书 (1) 终于能够通过phpmailer使用gmail账号发送邮件了 (50) 如何为网站添加sitemap文件 (3) HTTP&#8211;>HTTPS (3)]]></description>
			<content:encoded><![CDATA[<p>始终割舍不下https，虽然它会多消耗一些资源，但毕竟可以让网站免于某些风暴，不过<a href="https://www.behindgfw.com/">M.zdpress</a>提出了一个我没有注意到的问题，feedburner无法抓取feed了，试了一下，果然：</p>

<p><a href="http://www.flickr.com/photos/fwolf/2610407483/" title="Feedburner retrieve https feed using self-signed ssl error by fwolf, on Flickr"><img src="http://farm4.static.flickr.com/3069/2610407483_62c9a5d812.jpg" width="500" height="57" alt="Feedburner retrieve https feed using self-signed ssl error" /></a></p>

<p>可以看出错误的原因是使用了无效的证书（当然无效，同时猜测fb使用的是Java），从证书这边着手看来是没希望了，只能换其他的方式。</p>

<p>前端时间在<a href="https://groups.google.com/group/fans/">GFans</a>里听到过可以用<a href="https://www.google.com/reader/">Google Reader</a>实现类似feed重烧或转发的功能，遂想用这个来试一试。</p>

<p>首先在GR中订阅自己的feed，然后给它打上一个tag（标签），也有的地方叫folder（目录），都一样，注意tag名最好唯一、专用，不要和其他的重复，比如我就直接用blog名作标签名称。GR不像FB，证书无效也没有关系。</p>

<p>然后在Settings->Tags中找到这个标签，点后面的广播图标，private就变成了public，后面的链接也随之出现了：</p>

<p><a href="http://www.flickr.com/photos/fwolf/2611262544/" title="Share a tag in google reader by fwolf, on Flickr"><img src="http://farm4.static.flickr.com/3114/2611262544_994e0b4a7e.jpg" width="500" height="21" alt="Share a tag in google reader" /></a></p>

<p>在后面的几个链接中点<code>email a link</code>，填上自己的邮箱，发送，会收到一封信，里面有两个链接：</p>

<pre><code>• View my shared items
• Subscribe to a feed of my shared items
</code></pre>

<p>使用其中第二行的链接，形式类似：</p>

<pre><code>https://www.google.com/reader/public/atom/user/12175931868835525338/label/Fwolf%27s%20Blog
</code></pre>

<p>这个地址打开基本就是你原来feed的原貌！只是多了GR的一些附加信息，比如Blog标题从<code>Fwolf's Blog</code>变成了<code>"Fwolf's Blog" via Fwolf in Google Reader</code>、文章标题后来多出了个时间，我觉得这些是可以接受的，文章的内容基本不走样。</p>

<p>最重要的是，这个地址虽然也是https的，但它的证书是Google用于GR的，是有效的，是FB承认的，所以在FB中修改你原来的种子，把这个地址设置为<code>Original Feed</code>，FB就可以正常更新了。</p>

<p>回顾一下，其实道理很简单，就是用GR“重烧”了一个种子，转发给FB而已。至于Blog程序自带的feed地址就不用再说了吧，其他feed阅读网站也可以使用同样的方式达到目的。</p>

<p>最后，感谢<a href="http://www.newchen.com/">妖精</a>的提示，嘿嘿。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/feed" title="feed" rel="tag">feed</a>, <a href="http://www.fwolf.com/blog/post/tag/feedburner" title="feedburner" rel="tag">feedburner</a>, <a href="http://www.fwolf.com/blog/post/tag/google" title="Google" rel="tag">Google</a>, <a href="http://www.fwolf.com/blog/post/tag/https" title="https" rel="tag">https</a>, <a href="http://www.fwolf.com/blog/post/tag/ssl" title="ssl" rel="tag">ssl</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/273" title="配置Apache的ssl安全连接 (2006-12-27)">配置Apache的ssl安全连接</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/407" title="生成用于web服务器的openssl证书 (2008-06-25)">生成用于web服务器的openssl证书</a> (1)</li>
	<li><a href="http://www.fwolf.com/blog/post/155" title="终于能够通过phpmailer使用gmail账号发送邮件了 (2006-04-14)">终于能够通过phpmailer使用gmail账号发送邮件了</a> (50)</li>
	<li><a href="http://www.fwolf.com/blog/post/241" title="如何为网站添加sitemap文件 (2006-10-17)">如何为网站添加sitemap文件</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/405" title="HTTP&#8211;>HTTPS (2008-06-21)">HTTP&#8211;>HTTPS</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/408/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>生成用于web服务器的openssl证书</title>
		<link>http://www.fwolf.com/blog/post/407</link>
		<comments>http://www.fwolf.com/blog/post/407#comments</comments>
		<pubDate>Tue, 24 Jun 2008 18:48:47 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Hosted]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[MediaTemple]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[plesk]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">https://www.fwolf.com/blog/?p=407</guid>
		<description><![CDATA[要启用https，就一定要有ssl证书，MT主机上有一个默认的证书，但是签署给plesk这个域名的，并且没有根证书认证，所以，自己搞个CA，给自己签个假证书用吧，至少好看些。 说实话，关于证书这些我也是一知半解，以前弄过apache的ssl，但那只是简单的处理，没有CA什么的，这次我上网搜集了不少资料，走了一个算是更“高级”一点的方式吧，不过出来的证书使用起来没有大差别。 注：所有操作在/big2/tools/ca下进行。 准备根证书 准备一些空目录和文件，作用如下： certs/ 保存颁发的所有证书的副本 index.txt 跟踪已颁发的证书，初始为空 openssl.cnf openssl和根证书的配置文件 private/ CA证书的私钥 serial 最后一次颁发的证书的序列号，初始值01，也可以是00等其它值 openssl.cnf内容如下，我一气儿弄了10年的有效期： [ ca ] default_ca = FwolfCA [ FwolfCA ] dir = /big2/tools/ca certificate = $dir/cacert.pem database = $dir/index.txt new_certs_dir = $dir/certs private_key = $dir/private/cakey.pem serial = $dir/serial default_crl_days= 7 default_days = 3650 default_md = sha1 policy = FwolfCA_policy x509_extensions [...]]]></description>
			<content:encoded><![CDATA[<p>要<a href="405">启用https</a>，就一定要有ssl证书，MT主机上有一个默认的证书，但是签署给plesk这个域名的，并且没有根证书认证，所以，自己搞个CA，给自己签个假证书用吧，至少好看些。</p>

<p>说实话，关于证书这些我也是一知半解，以前弄过<a href="273">apache的ssl</a>，但那只是简单的处理，没有CA什么的，这次我上网搜集了不少资料，走了一个算是更“高级”一点的方式吧，不过出来的证书使用起来没有大差别。</p>

<p>注：所有操作在<code>/big2/tools/ca</code>下进行。</p>

<h3>准备根证书</h3>

<p>准备一些空目录和文件，作用如下：</p>

<ul>
<li>certs/        保存颁发的所有证书的副本</li>
<li>index.txt     跟踪已颁发的证书，初始为空</li>
<li>openssl.cnf   openssl和根证书的配置文件</li>
<li>private/      CA证书的私钥</li>
<li>serial        最后一次颁发的证书的序列号，初始值01，也可以是00等其它值</li>
</ul>

<p><code>openssl.cnf</code>内容如下，我一气儿弄了10年的有效期：</p>

<pre><code>[ ca ]
default_ca = FwolfCA

[ FwolfCA ]
dir = /big2/tools/ca
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial

default_crl_days= 7
default_days = 3650
default_md = sha1

policy = FwolfCA_policy
x509_extensions = certificate_extensions

[ FwolfCA_policy ]
commonName = supplied
stateOrProvinceName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = supplied
organizationName= supplied
organizationalUnitName = optional

[ certificate_extensions ]
basicConstraints= CA:false

# 下面是根证书的配置信息

[ req ]
default_bits = 4096
default_keyfile = /big2/tools/ca/private/cakey.pem
default_md = sha1
prompt = no
distinguished_name = root_ca_distinguished_name
x509_extensions = root_ca_extensions

[ root_ca_distinguished_name ]
commonName = Fwolf CA
stateOrProvinceName = The Earth
# countryName只能是两位字母
countryName = CN
emailAddress = one_mail_of_fwolf@gmail.com
#organizationName = Root Certification Authority
organizationName = Fwolf CA Root
[ root_ca_extensions ]
basicConstraints = CA:true
</code></pre>

<p>然后生成根证书：</p>

<pre><code>$ openssl req -x509 -newkey rsa:4096 -out cacert.pem -outform PEM -days 3650 -config openssl.cnf
</code></pre>

<p>会提示输入密码以及确认密码。生成好以后可以验证一下（说是验证，其实就是看看内容）：</p>

<pre><code>$ openssl x509 -in cacert.pem -text -noout
</code></pre>

<h3>给自己颁发证书</h3>

<pre><code>$ openssl req -newkey rsa:4096 -keyout office.fwolf.com.key.pem -keyform PEM -out   office.fwolf.com.req.pem -outform PEM -sha1
</code></pre>

<p>按提示输入两次密码，然后输入几项证书信息，注意其中<code>organizationName</code>必须输入，并且<code>Common Name</code>要和域名一致，比如：</p>

<pre><code>Common Name (eg, YOUR name) []:*.fwolf.com
</code></pre>

<p>就生成了私钥key文件和请求req文件，然后把req文件提交给CA根证书签署（盖章）：</p>

<pre><code>$ openssl ca -in office.fwolf.com.req.pem -config openssl.cnf
</code></pre>

<p>输入根证书的密码，就会在<code>certs/</code>目录下生成<code>.pem</code>证书文件，文件名以<code>serial</code>中的序号开头，信息会存储在<code>index.txt</code>中。</p>

<p>这样生成的证书，在apache中配置需要两条语句，分别指定证书和私钥：</p>

<pre><code>SSLEngine On
SSLCertificateFile /big2/tools/ca/certs/office.fwolf.com.cert.pem
SSLCertificateKeyFile /big2/tools/ca/certs/office.fwolf.com.key.pem
</code></pre>

<p>其实这两个文件是可以合并为一个文件的：</p>

<pre><code>$ cat office.fwolf.com.key.pem office.fwolf.com.cert.pem &gt; office.fwolf.com.pem
</code></pre>

<p>然后在配置apache的时候就只需要一句了：</p>

<pre><code>SSLEngine On
SSLCertificateFile /big2/tools/ca/certs/office.fwolf.com.pem
</code></pre>

<h3>其它</h3>

<h4>去掉证书的口令</h4>

<p>现在证书基本上就可以使用了，再返回来说一个问题，就是在启动apache的时候会提示输入私钥的口令，要想去掉这个（一般都不会喜欢这样的），就要求在生成私钥的时候不要设置口令：</p>

<pre><code>$ openssl req -newkey rsa:4096 -keyout office.fwolf.com.key.pem -keyform PEM -out   office.fwolf.com.req.pem -outform PEM -sha1 -nodes
</code></pre>

<p>生成根证书的时候还是建议带上个口令，提高安全性。</p>

<h4>index.txt</h4>

<p>另外，如果要清空<code>index.txt</code>的话，一定要清空到字节0，里面有一个字节都会导致<code>openssl ca</code>错误：</p>

<pre><code>wrong number of fields on line 1 (looking for field 6, got 1, '' left)
</code></pre>

<h4>证书吊销</h4>

<pre><code>$ openssl ca -revoke office.fwolf.com.cert.pem
</code></pre>

<blockquote>
# 生成CRL列表
$ openssl ca -gencrl -out exampleca.crl

# 查看CRL列表信息
$ openssl crl -in exampleca.crl -text -noout

# 验证CRL列表签名信息
$ openssl crl -in exampleca.crl -noout -CAfile cacert.pem

可以看到CRL的版本号为1，这是OpenSSL默认的，除非crl_extensions被指定在配置文件ca一节中。
</blockquote>

<h3>上传到MT主机上应用</h3>

<p>首先在<code>Server &gt; Certificates &gt;</code>中<code>Add New Certificate</code>，填上<code>Add New Certificate</code>（自己起），然后选下面的<code>Private key</code>私钥文件和<code>Certificate</code>证书文件上传，就存到服务器上了。</p>

<p>然后返回证书列表，选中新上传证书前面的复选框，点上面的链接<code>Make default for Web sites</code>设置为网站默认证书，也可以通过<code>Secure control panel</code>将其设置为控制面板所使用的证书。</p>

<p>还没完，证书还得加到ip上才能生效，<code>Server &gt; IP Addresses &gt;</code>中修改ip地址属性，在<code>SSL Certificate</code>中选择刚才上传的证书，保存，就立刻生效了。</p>

<p>基于ssl/https协议的特性，一个ip上只能使用一个证书，所以合租用户是无法自己上传或者选择其它证书的，不过我现在使用的证书是签给“*”的，也就是所有域名都可以使用，“好看”一点。让我不理解的是，如果在访问一个域名时同意了这个证书，在访问另外一个域名的时候还得再同意一遍，也就是证书和域名是要配套使用的，和我原先的想法不太一致。</p>

<h4>参考资料</h4>

<ul>
<li><a href="http://www.devfront.com/?q=node/19">OpenSSL学习纪要 &#8211; 建立自己的CA</a></li>
<li><a href="http://www.wenquan.name/?p=202">如何架设一个受信任的SSL网站</a></li>
<li><a href="http://www.dedecms.com/web-art/fuwuqi/20060913/26240.html">Apache 2.0上 HTTPS 实现CA认证, 不是HTPASSWD的那种</a></li>
<li><a href="https://dream4ever.org/showthread.php?t=32264">方便数字证书生成的小工具</a></li>
<li><a href="http://www.blogjava.net/alwayscy/archive/2006/12/01/84852.html">用OpenSSL做自签名的证书</a></li>
<li><a href="http://www.opensourcehowto.org/how-to/apache/setup-apache2-with-openssl.html">Setup Apache2 with OpenSSL </a></li>
<li><a href="https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/77675">[regression] apache2-ssl-certificate has gone missing since feisty</a></li>
<li><a href="http://www.mail-archive.com/openssl-users@openssl.org/msg31911.html">Re: wrong number of fields on line 1</a></li>
</ul>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/apache" title="Apache" rel="tag">Apache</a>, <a href="http://www.fwolf.com/blog/post/tag/certificate" title="certificate" rel="tag">certificate</a>, <a href="http://www.fwolf.com/blog/post/tag/https" title="https" rel="tag">https</a>, <a href="http://www.fwolf.com/blog/post/tag/mediatemple" title="MediaTemple" rel="tag">MediaTemple</a>, <a href="http://www.fwolf.com/blog/post/tag/openssl" title="openssl" rel="tag">openssl</a>, <a href="http://www.fwolf.com/blog/post/tag/plesk" title="plesk" rel="tag">plesk</a>, <a href="http://www.fwolf.com/blog/post/tag/ssl" title="ssl" rel="tag">ssl</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/273" title="配置Apache的ssl安全连接 (2006-12-27)">配置Apache的ssl安全连接</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/411" title="由一个错误学到的一些php安全配置问题 (2008-07-13)">由一个错误学到的一些php安全配置问题</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/347" title="升级MT dv 3.0主机到php5 (2007-08-09)">升级MT dv 3.0主机到php5</a> (9)</li>
	<li><a href="http://www.fwolf.com/blog/post/408" title="使用了无效的ssl证书，feedburner无法抓取feed的解决方法 (2008-06-26)">使用了无效的ssl证书，feedburner无法抓取feed的解决方法</a> (9)</li>
	<li><a href="http://www.fwolf.com/blog/post/383" title="[MediaTemple]虚拟主机内存优化的一点心得 (2008-02-19)">[MediaTemple]虚拟主机内存优化的一点心得</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/407/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTTP&#8211;&gt;HTTPS</title>
		<link>http://www.fwolf.com/blog/post/405</link>
		<comments>http://www.fwolf.com/blog/post/405#comments</comments>
		<pubDate>Sat, 21 Jun 2008 08:58:00 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Hosted]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[Rewrite]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">https://www.fwolf.com/blog/?p=405</guid>
		<description><![CDATA[我无法愤怒，因为不知道该生谁的气。 几天前，网站突然无法访问了，没有响应（不是reset），一开始还以为事网络的问题，后来发现不是，用其他国外主机作跳板可以正常访问，也就是说，在出国的网络出口被DROP了。 我和我们合租的邻居们不会有什么过激的言论，也没有什么PORN的内容，咋就这样了呢。没有客服，原因也没法找了，只能先恢复访问，向MT提交了support request，很快（33分钟后）就得到了的IP，应用在主机上，谁知才2天，又完蛋了。 现在要了第3个IP（这次的响应速度更快，12分钟），同时准备把所有http访问重定向到https访问，算是有些强制吧，弄了个脚本定时执行。没办法，没有别的招数，如果再被封，我也回天无术了。 使用https方式访问网站，速度上没有太大的影响（会有一点点的，服务端加密和客户端解密要耗时），关键事客户端会弹出一个非信任证书的提示，接受或者同意或者永久同意即可，FF3会出一个提示页，上面也有按钮可以添加证书为永久信任证书。如果我们每个域名都单独购买证书的话也不是不可以，不过费用不菲。 http到https的导向其实很容易，用rewrite： RewriteCond %{HTTPS} !on [NC] RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 为了使用方便，专门搞了个小脚本，在每个网站的根下添加.htaccess文件，在所有子目录现有的.htaccess文件中添加/更新这段内容。 和wordpress配合使用的时候，遇到了一些麻烦，浪费了我2天2夜的时间，也许还浪费了1个IP，如果早弄好也许第2个IP就不会出事了。这个问题就是，rewrite后重定向到https又会被重定向回http，把rewriterule仔细得看过来看过去也没找到错误，后来发现问题在wordpress上，只要在设置中把2个网站地址更改为https开头就行了。原先的转向死循环就是因为rewriterule把http转向到了https，然后wordpress发现访问地址和网站地址不一样，又给转向回了http。 如果无法进入wordpress的管理界面，也可以直接更改数据库，表wp_options中，option_name为siteurl和home这两项，option_id分别是1和46。 再次赞 (MT)的服务，鄙视国内的网络侦探。 参考 Smart HTTP and HTTPS RewriteRule Redirects Administration Over SSL Force SSL 让Firefox 3上的未认证ssl简单一点 好像其他人也有类似遭遇 冰古blog 晕死，竟然godaddy的vps的独立IP也被封！ HTTPS for WordPress Update @ 2008-06-26 取消了强制https，原因一来感觉https消耗的资源和影响的速度比预想中的要多，二来强制也只是相对的，有点知识的就能够绕开，三来没有证书（即使购买了证书也不可能所有域名合用），麻烦多多，FF里有吓人的警告，IE下要狂点确认，很多工具也不支持https，四来取消了强制并不代表https不可用，革命靠自觉，感觉有危险的时候用户自己就知道用https了。 Tags: fail, https, Rewrite, WordPress Related posts 配置Apache的ssl安全连接 (3) 生成用于web服务器的openssl证书 (1) [...]]]></description>
			<content:encoded><![CDATA[<p>我无法愤怒，因为不知道该生谁的气。</p>

<p>几天前，网站突然无法访问了，没有响应（不是reset），一开始还以为事网络的问题，后来发现不是，用其他国外主机作跳板可以正常访问，也就是说，在出国的网络出口被DROP了。</p>

<p>我和我们合租的邻居们不会有什么过激的言论，也没有什么PORN的内容，咋就这样了呢。没有客服，原因也没法找了，只能先恢复访问，向MT提交了support request，很快（33分钟后）就得到了的IP，应用在主机上，谁知才2天，又完蛋了。</p>

<p>现在要了第3个IP（这次的响应速度更快，12分钟），同时准备把所有http访问重定向到https访问，算是有些强制吧，弄了个脚本定时执行。没办法，没有别的招数，如果再被封，我也回天无术了。</p>

<p>使用https方式访问网站，速度上没有太大的影响（会有一点点的，服务端加密和客户端解密要耗时），关键事客户端会弹出一个非信任证书的提示，接受或者同意或者永久同意即可，FF3会出一个提示页，上面也有按钮可以添加证书为永久信任证书。如果我们每个域名都单独购买证书的话也不是不可以，不过费用不菲。</p>

<p>http到https的导向其实很容易，用rewrite：</p>

<pre><code>RewriteCond %{HTTPS} !on [NC]
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
</code></pre>

<p>为了使用方便，专门搞了个小脚本，在每个网站的根下添加.htaccess文件，在所有子目录现有的.htaccess文件中添加/更新这段内容。</p>

<p>和wordpress配合使用的时候，遇到了一些麻烦，浪费了我2天2夜的时间，也许还浪费了1个IP，如果早弄好也许第2个IP就不会出事了。这个问题就是，rewrite后重定向到https又会被重定向回http，把rewriterule仔细得看过来看过去也没找到错误，后来发现问题在wordpress上，只要在设置中把2个网站地址更改为https开头就行了。原先的转向死循环就是因为rewriterule把http转向到了https，然后wordpress发现访问地址和网站地址不一样，又给转向回了http。</p>

<p><img src="http://img517.imageshack.us/img517/6117/20080621155340738x130scwn5.png" alt="" /></p>

<p>如果无法进入wordpress的管理界面，也可以直接更改数据库，表wp_options中，option_name为siteurl和home这两项，option_id分别是1和46。</p>

<p>再次赞 (MT)的服务，鄙视国内的网络侦探。</p>

<h4>参考</h4>

<ul>
<li><a href="http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html">Smart HTTP and HTTPS RewriteRule Redirects</a></li>
<li><a href="http://codex.wordpress.org/Administration_Over_SSL">Administration Over SSL</a></li>
<li><a href="http://almosteffortless.com/wordpress/force-ssl/">Force SSL</a></li>
<li><a href="http://blog.cathayan.org/item/1796">让Firefox 3上的未认证ssl简单一点</a></li>
</ul>

<h4>好像其他人也有类似遭遇</h4>

<ul>
<li><a href="http://bingu.net/blog/515/bingu-returns/">冰古blog</a></li>
<li><a href="http://bbs.idcspy.com/thread-24921-1-2.html">晕死，竟然godaddy的vps的独立IP也被封！</a></li>
<li><a href="http://wordpress.org/extend/plugins/https-for-wordpress/">HTTPS for WordPress</a></li>
</ul>

<h4>Update @ 2008-06-26</h4>

<p>取消了强制https，原因一来感觉https消耗的资源和影响的速度比预想中的要多，二来强制也只是相对的，有点知识的就能够绕开，三来没有证书（即使购买了证书也不可能所有域名合用），麻烦多多，FF里有吓人的警告，<a href="http://www.fwolf.com/blog/post/408#comment-10515">IE下要狂点确认</a>，很多工具也不支持https，四来取消了强制并不代表https不可用，革命靠自觉，感觉有危险的时候用户自己就知道用https了。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/fail" title="fail" rel="tag">fail</a>, <a href="http://www.fwolf.com/blog/post/tag/https" title="https" rel="tag">https</a>, <a href="http://www.fwolf.com/blog/post/tag/rewrite" title="Rewrite" rel="tag">Rewrite</a>, <a href="http://www.fwolf.com/blog/post/tag/wordpress" title="WordPress" rel="tag">WordPress</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/273" title="配置Apache的ssl安全连接 (2006-12-27)">配置Apache的ssl安全连接</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/407" title="生成用于web服务器的openssl证书 (2008-06-25)">生成用于web服务器的openssl证书</a> (1)</li>
	<li><a href="http://www.fwolf.com/blog/post/102" title="更改 WordPress 自动生成摘要的方式 (2005-12-19)">更改 WordPress 自动生成摘要的方式</a> (18)</li>
	<li><a href="http://www.fwolf.com/blog/post/87" title="搞定WordPress的Permalinks (2005-11-07)">搞定WordPress的Permalinks</a> (6)</li>
	<li><a href="http://www.fwolf.com/blog/post/241" title="如何为网站添加sitemap文件 (2006-10-17)">如何为网站添加sitemap文件</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/405/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>配置Apache的ssl安全连接</title>
		<link>http://www.fwolf.com/blog/post/273</link>
		<comments>http://www.fwolf.com/blog/post/273#comments</comments>
		<pubDate>Tue, 26 Dec 2006 16:50:05 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/post/273</guid>
		<description><![CDATA[环境：ubuntu 6.06, Apache 2.0.55 第一步：生成ssl certficate文件 首先当然是正常安装apache2了，然后： sudo apache2-ssl-certificate 生成一个1024位的RSA私钥，并保存为/etc/apache2/ssl/apache.pem，如果你已经有了CA证书，应该也是可以拿过来直接使用，或者用来生成这个私钥的（这应该属于另外一个话题了，我也没有用过）。 apache2-ssl-certificate执行过程中要回答一些问题，如下，注意如果[]里已经给出了默认值，而你又想把这项置空的话，可以输入英文句号“.”： Country Name (2 letter code) [GB]:US State or Province Name (full name) [Some-State]:. Locality Name (eg, city) []: Organization Name (eg, company; recommended) []:. Organizational Unit Name (eg, section) []:. server name (eg. ssl.domain.tld; required!!!) []:localhost Email Address []:fwolf@mail.com 一般来说，server name和实际的网站域名还是保持一致比较方便。 第二步：启用ssl mod sudo [...]]]></description>
			<content:encoded><![CDATA[<p>环境：ubuntu 6.06, Apache 2.0.55</p>

<p><strong>第一步：生成ssl certficate文件</strong>
首先当然是正常安装apache2了，然后：</p>

<div class="code">
sudo apache2-ssl-certificate
</div>

<p>生成一个1024位的RSA私钥，并保存为/etc/apache2/ssl/apache.pem，如果你已经有了CA证书，应该也是可以拿过来直接使用，或者用来生成这个私钥的（这应该属于另外一个话题了，我也没有用过）。</p>

<p>apache2-ssl-certificate执行过程中要回答一些问题，如下，注意如果[]里已经给出了默认值，而你又想把这项置空的话，可以输入英文句号“.”：</p>

<div class="code">
Country Name (2 letter code) [GB]:US
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:
Organization Name (eg, company; recommended) []:.
Organizational Unit Name (eg, section) []:.
server name (eg. ssl.domain.tld; required!!!) []:localhost
Email Address []:fwolf@mail.com
</div>

<p>一般来说，server name和实际的网站域名还是保持一致比较方便。</p>

<p><strong>第二步：启用ssl mod</strong></p>

<div class="code">
sudo a2enmod ssl
</div>

<p>或者</p>

<div class="code">
:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/ssl.conf ssl.conf
:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/ssl.load ssl.load
</div>

<p><strong>第三步：添加监听端口，配置虚拟主机</strong>
添加端口：在/etc/apache2/ports.conf中增加一行“Listen 443”，显然，如果你想让默认的80端口就使用ssl的话，就可以省略这一步了，并在后面的配置中略微调整。</p>

<p>在apache虚拟主机的配置文件conf中，<virtualhost>段，添加SSL的定义，比如：</virtualhost></p>

<div class="code">
&lt;VirtualHost *:443&gt;
    ServerAdmin Fwolf
    ServerName www.fwolf.com

    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/apache.pem

    DirectoryIndex index.php index.html index.html.var
</div>

<p>然后重启apache，就能够使用https访问网站了。</p>

<p>如果想配置成80端口默认就使用https，首先不需要在ports.conf中添加443端口的监听了，其次是在配置VirtualHost的时候也不用带上:443了，但即使这样，配置完成后使用http://www.domain.com访问配置好的网站时，还是会提示：</p>

<div class="code">
Bad Request

Your browser sent a request that this server could not understand.
Reason: You&#8217;re speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.

    Hint: https://www.fwolf.com/
</div>

<p>这是由于使用http协议去访问一个https的端口造成的，最简单的解决方法是使用https://www.domain.com:80/来替代，不过，通过修改apache配置，把到80端口的http访问重定向到443端口的https访问效果会更好一些，就像下面的配置：</p>

<div class="code">
NameVirtualHost *:80
&lt;VirtualHost *:80&gt;
    Redirect permanent / https://localhost/
&lt;/virtualhost&gt;

NameVirtualHost *:443
&lt;VirtualHost *:443&gt;
    ServerAdmin Fwolf
    ServerName www.fwolf.com
&lt;/virtualhost&gt;

    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/apache.pem
    &#8230;
</div>

<p>这样所有http访问就自动被重定向到https访问上了，不过如果你只能在外网开一个端口的话就比较麻烦了，同时https也只能包含一个站点（无法通过ServerName辨识多个站点）。</p>

<p>如果能够把http和https协议同时绑定到一个端口上，用户访问的时候似乎就更方便了，不过很多地方都说这是不可能的，加密与明文协议不可能同时存在于一个端口上，<a href="http://groups.google.com/group/alt.apache.configuration/tree/browse_frm/month/2005-09?_done=%2Fgroup%2Falt.apache.configuration%2Fbrowse_frm%2Fmonth%2F2005-09%3F&#038;">这里有个讨论</a>给出了一种方案，虽然经过我的实验并不成功，还是把代码贴出来，供有兴趣的朋友继续研究。</p>

<div class="code">
    &lt;IfDefine !SSL&gt;
        RewriteEngine on
        RewriteCond %{HTTPS} != on
        RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=permanent]
    &lt;/IfDefine&gt;
</div>

<p>一个小问题：我生成的pem文件怎么有效期都只有一个月？难道这是默认的？pem文件到期之后会发生什么事情呢？</p>

<p>update @ 20070126</p>

<p>默认生成的pem文件确实只有一个月的有效期，过期之后倒是还能使用，只是在客户端会有一个提示证书无效的确认，所以在生成证书的时候，记得用-day x参数指定有效期限，比如十年什么的。</p>

<div class="code">
sudo apache2-ssl-certificate &#8211;force -days 3650
</div>

<p>（当pem文件已经存在的时候，需要使用&#8211;force参数指定覆盖）</p>

<p>参考：
<a href="http://ubuntuforums.org/archive/index.php/t-4466.html">Need Apache2 SSL howto</a>
<a href="https://help.ubuntu.com/community/forum/server/apache2/SSL">Apache2 SSL</a>
<a href="http://forums.devshed.com/apache-development-15/you-re-speaking-plain-http-to-an-ssl-enabled-server-port-71561.html">You&#8217;re speaking plain HTTP to an SSL-enabled server port. &#8211; HELP PLEASE !</a></p>

<h4>Update @ 2007-07-31</h4>

<p>Ubuntu 7.04 feisty中没有<code>apache2-ssl-cerfiticate</code>这个命令，需要自己<a href="http://librarian.launchpad.net/7477840/apache2-ssl.tar.gz">下载一个包</a>，然后解压，把里面的<code>ssleay.cnf</code>拷贝到<code>/usr/share/apache2/</code>，然后就可以执行解压的另外一个可执行文件<code>apache2-ssl-certificate</code>来生成证书了。</p>

<p>参见：</p>

<ul>
<li><a href="https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/77675">apache2-ssl-certificate has gone missing since feisty</a></li>
<li><a href="http://www.lingams.net/?p=19">Installation of SSL on Ubuntu 7.04</a></li>
</ul>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/apache" title="Apache" rel="tag">Apache</a>, <a href="http://www.fwolf.com/blog/post/tag/https" title="https" rel="tag">https</a>, <a href="http://www.fwolf.com/blog/post/tag/ssl" title="ssl" rel="tag">ssl</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/407" title="生成用于web服务器的openssl证书 (2008-06-25)">生成用于web服务器的openssl证书</a> (1)</li>
	<li><a href="http://www.fwolf.com/blog/post/408" title="使用了无效的ssl证书，feedburner无法抓取feed的解决方法 (2008-06-26)">使用了无效的ssl证书，feedburner无法抓取feed的解决方法</a> (9)</li>
	<li><a href="http://www.fwolf.com/blog/post/395" title="防止垃圾评论的另类方法 (2008-04-10)">防止垃圾评论的另类方法</a> (6)</li>
	<li><a href="http://www.fwolf.com/blog/post/443" title="配置安全的共享web服务器（抛砖引玉） (2009-06-09)">配置安全的共享web服务器（抛砖引玉）</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/155" title="终于能够通过phpmailer使用gmail账号发送邮件了 (2006-04-14)">终于能够通过phpmailer使用gmail账号发送邮件了</a> (50)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/273/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
