FreeSSL证书

为了普及HTTPS加密,沃通CA向全球用户提供多域型免费SSL证书,支持2年期5个域名,满足网站基本使用需求,帮助中小网站和个人网站零成本启用HTTPS加密。

沃通免费SSL证书产品介绍站点:https://freessl.wosign.com
沃通免费SSL证书中文申请入口:https://buy.wosign.com/free
沃通免费SSL证书英文申请入口:https://buy.wosign.com/free/?lan=en

还有Let’s Encrypt项目https://letsencrypt.org/getting-started/

Let’s Encrypt is a free, automated, and open certificate authority brought to you by the non-profit Internet Security Research Group (ISRG).

HTTP Strict Transport Security(HSTS)

通过HSTS告诉浏览器默认使用https

一般我们的web服务同时支持http和https,但是会将http重定向到https,而且每次在浏览器直接输域名或者带http的时候,都会执行一次跳转,这样很不简洁,而且存在中间人攻击潜在威胁,跳转过程可能被恶意网站利用来直接接触用户信息。这是我们可以通过HTTP Strict Transport Security通知浏览器,这个网站禁止使用HTTP方式加载,浏览器应该自动把所有尝试使用HTTP的请求自动替换为HTTPS请求。
要实现这个功能,只需要加入一个header就行:

Strict-Transport-Security: max-age=expireTime [; includeSubdomains]

后面的includeSudomians是可选的,expireTime以秒位单位。例如在nginx加上HSTS的话,只需要在https的server配置段加上如下行,然后别忘了reload:

add_header Strict-Transport-Security "max-age=86400; includeSubdomains; preload";

当浏览器第一次通过HTTPS请求时,服务器响应Strict-Transport-Security 头,浏览器记录下这些信息,然后后面尝试访问这个网站的时候,浏览器都会自动把HTTP替换为HTTPS。

你可以在浏览器F12窗口里看到此条http header, 或者用curl -I也能看到

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 15 Oct 2015 12:27:36 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Pingback: https://imbusy.me/xmlrpc.php
Strict-Transport-Security: max-age=86400; includeSubdomains; preload

当HSTS头设置的过期时间到了,后面通过HTTP的访问恢复到正常模式,不会再自动跳转到HTTPS。另外这个http header加载http中会被浏览器忽略掉。

全站使用HTTPS

HTTPS是大势所趋,于是给imbusy.me全站使用了HTTPS,并且将HTTP的请求自动跳转到了HTTPS。使用WoSign家的免费SSL证书“WoSign CA Free SSL Certificate G2”

S3 bucket Cross-Region Replication

s3 bucket现在支持跨region的自动备份,设置好之后,在A region的bucket里面上传内容,会自动被复制到B region的设定bucket里面.

设置基本方法:

  1. 在源bucket上点右键Properties属性页可以看到Cross-Region Replication设定区域
  2. 目前只能给每个bucket设置一个repication bucket
  3. 开启cross-region replication的两个bucket自动会被设置versioning功能
  4. 可以只对源bucket下的某个目录设置跨区备份(设置prefix)
  5. 设置之后新上传的内容会被自动复制到备份bucket,但是之前上传的不会被复制过去
  6. 对象被上传到源bucket之后,并不是立马在备份bucket中就能看到,他是aws复制过去的,所以有延时
  7. 数据从源bucket中删除后,备份bucket中的对象也会被删除
  8. 但是在备份bucket中进行上传和删除操作,不会应用到源bucket,也就是说这个是单向的行为
  9. 设置过程中会自动创建一个IAM角色,用于向备份bucket复制数据,上传操作只是上传到源bucket,之后的备份是aws的功能后台实现
  10. 既然是IAM角色控制的,跨账号的bucket备份也是可以的,跨账号设置需要用命令行做,参考官方文档http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/crr-walkthrough-2.html

需要注意的地方:

  1. replication操作是有延时的,所以需要做好预期,做用户上传的数据自动备份到别的region还是不错的,需要数据实时同步实时可见的,需要哦慎重考虑延时问题
  2. A自动备份到B,再设置B自动备份到C,然后A中上传,自动备份到B和C行不行? 经测试不行!A中上传的会自动备份到B,但是备份的数据不会自动到C,在B中主动上传的会被自动备份到C,不知以后会不会改进

S3文件的时区和时间

好多人问S3上文件的时区和时间这类问题,今天总结下:

简单说就是不同工具不同客户端看到的时间是不同的:
例如s3cmd 显示的就是UTC时间,而awscli 显示的就是根据客户端时区换算之后的时间,CloudBerry客户端也显示的是换算之后的时间。

(1)bucket的时间是bucket的创建时间,object时间是它被上传的时间(cloudberry显示成‘修改时间’);s3cmd上传后,再用s3cmd查看,显示的是上传时间对应的UTC时间,但用awscli查看,就能以本地时间显示。所以上传是的时间就是上传那个时刻的时间,不过不同客户端会以不同时区显示而已。
(2)object被下载之后,就出现问题了。s3cmd get下来的文件的时间会显示用s3cmd ls看到的时间,也就是UTC时间;而aws s3 cp下来的时间,也是使用aws s3 ls看到的时间,即本地时间。这样使用两种客户端下载通一个文件,查看下载后的文件的时间将会有两种不同结果(awscli的更准确些,s3cmd下载保存文件是时间没换算)。
(3)使用s3cmd上传大文件时,会被切割成15MB每个分片上传再组装,使用s3cmd获取到的md5sum并不是文件的真实MD5值,这点需要注意,下载大文件的时候会显示md5sum does not match,使用awscli时无此问题。

关于什么时候用哪种工具的问题:
(1)s3cmd上传和下载速度都比较适中,并未充分占满实例的带宽,因此比较适合做小文件或者较高频率的文件上传下载和sync。但是它上传几个GB的单个文件时,可靠性就差一下,有时会失败报错。
(2)awscli工具上传大文件的时候能充分利用网络性能,基本能跑满实例的带宽,上传下载速度特别快,适合在非线上服或者非高峰时间上传单个大文件,优点是速度非常快,缺点是会耗尽实例带宽,还没找到限速方法。
(3)在用到sync功能时,由于s3cmd的MD5问题,同步包含大文件时有时会有报错,建议包含大文件使用aws s3 sync;只有小文件时s3cmd sync或者aws s3 sync都行。