首先SSL/TLS是什么鬼?比如你现在正在看的https://awaimai.com/,前面是https,表明这个是https协议,https就是http + SSL/TLS,在http外面套一个加密层,让第三方难以得到传输的明文数据。如果用chrome访问这个站,在这个URL旁边会显示一个绿色的锁,表明这个连接是安全的。另外境外的https还有一个附加效果就是抵御关键字的审查,同时Google也更喜欢收录https的站点。

其实以上是在说废话,看这文章的乃萌肯定是知道此为何物才会找到这里来的啦,所以就不废话了,以下是搭建步骤:

  1. 生成公钥和私钥对
  2. 公钥提交到CA机构签发一个crt证书(不建议自签发证书)
  3. 配置证书链
  4. 在你的 apache 或 nginx 里开启SSL支持并配置好你的crt证书和私钥
  5. [可选]继续其它配置,如SPDY,HSTS,SSL session resumption 和 Perfect Forward Secrecy。其中,你如果希望你的站点是全 https 的话,建议配置HSTS,这样别人使用 http 访问时会自动转向到 https

由于这里主要讲搭建步骤,去CA机构注册什么的就不介绍了,个人小站推荐 StartSSL 和 AlphaSSL ,前者可以得到免费证书。

1 生成公钥和私钥对

执行以下命令

$ openssl genrsa –out my-private.key 2048

就会在当前目录下生成一个私钥文件:my-private.key,文件名自己随便定义。
如果需要对私钥加密,可以执行

$ openssl genrsa -aes256 –out my-private.key 2048

这时需要输入你的自定义密码来保护这个私钥,之后的步骤若用到私钥,则会要求你输入你的自定义密码,然后再执行

$ openssl req –new –key my-private.key –out www.awaimai.com.csr

这时会要求你输入一些信息,具体如下:

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:
A challenge password []:
An optional company name []:

注意:从 Email Address 开始不要填写。Common Name 填写你要 SSL 支持的域名(你的站的域名),如 www.awaimai.com。如果你申请的是泛域名证书,那么这里应该填写类似 *.awaimai.com
填写完毕后就会生成一个 www.awaimai.com.csr 文件,这样第一步就完成了。

2 公钥提交到CA机构签发一个crt证书

使用任何一个文本编辑器打开刚才生成的csr文件,你将会看到类似如下的内容:

 -----BEGIN CERTIFICATE REQUEST-----
MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCR0IxDzANBgNVBAgMBkxvbmRvbjEPMA0G
......
-----END CERTIFICATE REQUEST-----

复制里面全部内容,然后在CA机构网站上,在提交csr内容的地方,粘贴。如下是 StartSSL 和 AlphaSSL 的网站地址。

签发成功后,你就能下载回来一个.crt文件,可能通过网页上下载,也可能通过邮件方式发送给你。如果是邮件方式的话,要注意最好是使用gmail邮箱。邮件方式的话需要自行复制里面crt文件的部分自行保存为crt文件。crt文件类似以下的格式:

 -----BEGIN CERTIFICATE-----
MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw
MDBaFw0yNDAyMjAxMDAwMDBaMEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
YWxTaWduIG52LXNhMSIwIAYDVQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcy
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gHs5OxzYPt+j2q3xhfj
kmQy1KwA2aIPue3ua4qGypJn2XTXXUcCPI9A1p5tFM3D2ik5pw8FCmiiZhoexLKL
dljlq10dj0CzOYvvHoN9ItDjqQAu7FPPYhmFRChMwCfLew7sEGQAEKQFzKByvkFs
MVtI5LHsuSPrVU3QfWJKpbSlpFmFxSWRpv6mCZ8GEG2PgQxkQF5zAJrgLmWYVBAA
cJjI4e00X9icxw3A1iNZRfz+VXqG7pRgIvGu0eZVRvaZxRsIdF+ssGSEj4k4HKGn
kCFPAm694GFn1PhChw8K98kEbSqpL+9Cpd/do1PbmB6B+Zpye1reTz5/olig4het
ZwIDAQABo4IBIzCCAR8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C
AQAwHQYDVR0OBBYEFPXN1TwIUPlqTzq3l9pWg+Zp0mj3MEUGA1UdIAQ+MDwwOgYE
VR0gADAyMDAGCCsGAQUFBwIBFiRodHRwczovL3d3dy5hbHBoYXNzbC5jb20vcmVw
b3NpdG9yeS8wMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nbG9iYWxzaWdu
Lm5ldC9yb290LmNybDA9BggrBgEFBQcBAQQxMC8wLQYIKwYBBQUHMAGGIWh0dHA6
Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3RyMTAfBgNVHSMEGDAWgBRge2YaRQ2X
yolQL30EzTSo//z9SzANBgkqhkiG9w0BAQsFAAOCAQEAYEBoFkfnFo3bXKFWKsv0
XJuwHqJL9csCP/gLofKnQtS3TOvjZoDzJUN4LhsXVgdSGMvRqOzm+3M+pGKMgLTS
xRJzo9P6Aji+Yz2EuJnB8br3n8NA0VgYU8Fi3a8YQn80TsVD1XGwMADH45CuP1eG
l87qDBKOInDjZqdUfy4oy9RU0LMeYmcI+Sfhy+NmuCQbiWqJRGXy2UzSWByMTsCV
odTvZy84IOgu/5ZR8LrYPZJwR2UcnnNytGAMXOLRc3bgr07i5TelRS+KIz6HxzDm
MTh89N1SyvNTBCVXVmaU6Avu5gMUTu79bZRknl7OedSyps9AsUSoPocZXun4IRZZ
Uw==
-----END CERTIFICATE-----

(以上其实就是AlphaSSL的crt证书,下文会用到)保存好了后,第二步就完成了。

3 配置证书链

这一步被很多其它的教程忽略,因为这一步在某些情况下不是必需的,比如有的会直接给你返回证书链文件,但是在前面推荐的两家机构所签发的证书使用这个步骤的话,会简化不少麻烦事。
首先,打开这个证书,你会发现你的网站与根证书中间差了一级,比如窝的这个的父证书是AlphaSSL,再上一级才是根证书GlobalSign。而浏览器和操作系统里面保存的均是可信任的根证书,中间那一层AlphaSSL很可能是没有的,直接使用刚才保存的crt证书会导致浏览器提示这是不可信的网站。怎么办呢?这就需要配置证书链。其实配置这个证书链非常的简单,首先还是使用文本编辑器打开你的crt证书,然后把你的父级crt证书的内容粘贴到后面,如这样子:

 -----BEGIN CERTIFICATE-----
自己的crt证书
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
父级的crt证书
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
父级的父级crt证书
-----END CERTIFICATE-----

有多少层就做多少层(除了根证书那一层),然后保存为新的crt文件,就完成了证书链的配置了。
这样做可以简化后面的配置。
不过这个时候问题来了,父级的crt证书怎么得到呢?比如这里窝的父级证书是AlphaSSL,直接用firefox访问它的网站,然后查看证书信息,导出为crt就行了。

4 在Apache里开启SSL支持并配置crt证书和私钥

因为nginx里配置这个比apache容易多了,这里就只介绍 Apache 的。
注明一下,窝用的linux发行版为ubuntu 12.04,部分命令或路径可能因不同的发生版略有差别。
首先开启apache中SSL模块:

# a2enmod ssl

进入路径 /etc/apache2/sites-enabled,看一下是不是只有一个default,而同时 /etc/apache2/sites-available/ 下存在 default-ssl,是的话在 sites-enabled下创建一个链接

/etc/apache2/sites-enabled# ln -s ../sites-available/default-ssl 001-ssl

在 001-ssl 配置文件中,除了SSL配置部分,其他的保持和原本的http的站一致就好了(可别做出直接整个文件内容覆盖这么二的事情)。如果漏做这个步骤,Apache会报 ssl_error_rx_record_too_long 错误。然后开始配置SSL部分,注意以下三行:

SSLCertificateFile /home/root/awaimai.com.crt
SSLCertificateKeyFile /home/root/awaimai.com.key
SSLCertificateChainFile /home/root/awaimai.com.crt

其中,

  • SSLCertificateFile:crt文件路径(必需)
  • SSLCertificateKeyFile :私钥路径(必需)
  • SSLCertificateChainFile:证书链文件路径(可选)

如果已经把证书链直接配置到 crt 文件里的话,SSLCertificateChainFile 就直接填写crt文件的路径。如果签发机构把证书链文件也发给你的话,保存为.pem文件然后在这里引用即可。如果你的证书的父级证书是根证书,或已经被主流浏览器或操作系统广泛支持,那么此段可注释忽略。

最后检查是否 SSLEngine on,对了以后执行

# service apache2 restart

重启服务即可。

5 配置HSTS (可选)

这里只介绍HSTS的配置,因为这个很可能会用到,SPDY什么的参阅别人的配置文章吧。执行以下命令

# a2enmod headers

开启headers模块,然后编辑文件 /etc/apache2/sites-enabled/001-ssl (如果你刚才设置的文件名是001-ssl的话,若不是就自己换)
在VirtualHost里面加入一行:

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

其中 preload 那一段是可选的,加不加均可,加了的话可以去 google 申请 Chromium 的 Preload HSTS 列表。而 63072000 那个是有效期的秒数,63072000 是两年的秒数,在有效期里面,浏览器会记着这个站是应该用 https 访问的。

6 总结

最后嘛,为啥窝会想到弄成https呢?因为窝知道很多路由器可以开启网站访问log,会记录下访问者IP、所访问的url、以及get/post参数内容。你知道这表示什么吗?

这表示如果你通过这个路由器上网,然后在普通 http 网页上做登陆操作,那么路由器的管理员可以通过查 log 得到你对应网站的登陆信息,这是非常危险的,因为绝大多数的网站在传输登陆信息的时候,均使用明文发送密码,这样你的帐号密码就被看得一清二楚了。但是 https 的话,路由器根本无法知道你所访问的 url 是什么,更别说具体的参数内容了,只能知道访问者的IP和目标IP,安全性自然大大提高。

比如窝在知乎上的密码会经常性的更换,为什么呢?因为只要登陆知乎,比如你在麦当劳用免费 wifi,那么那边的路由管理员就知道你的帐号密码了。或者电信联通什么的也会知道,因为它们在政策下必须保留至少3个月的路由数据,而你的帐号密码就在那里保存至少三个月,想要抓你只要把你的登陆记录找到,然后登陆你的帐号,查你的个人信息就知道你到底是谁了。也就是说,任何非https连接下做登陆或其它敏感操作是非常危险的,所有的操作被完整的记录了下来。窝完全不明白知乎这种大站为啥都不支持https,用户私隐如此不值钱?

本文除了介绍SSL/TLS的配置外,还简要的介绍了一下其必要性,科普一下网络安全方面的东西。如对这方面还有疑问,欢迎留言或mail窝。

http://www.awaimai.com/126.html

Ubuntu Linux服务器搭建SSL/TLS(https)(在StartSSL可以得到免费证书)的更多相关文章

  1. [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  2. [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  3. [skill][https][ssl/tls] HTTPS相关知识汇总

    结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA   DHE / ECDHE   PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协 ...

  4. Python Web学习笔记之SSL,TLS,HTTPS

    一. SSL 1. SSL简介 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持.SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可 ...

  5. ubuntu gitlab服务器搭建

    gitlab服务器搭建 1.安装依赖包 sudo apt-get install curl openssh-server ca-certificates postfix 执行完成后,出现邮件配置,选择 ...

  6. 结合jenkins在Linux服务器搭建测试环境

    何时使用: 测试过程中我们需要持续构建一个软件项目,为避免重复的手动下载.解压操作,我们需要搭建一个能够自动构建的测试环境,当代码有更新时,测试人员只需点一下[构建]即可拉取最新的代码进行测试(也可设 ...

  7. Linux服务器搭建相关教程链接整理

    Linux: Linux 教程 | 菜鸟教程 linux下如何添加一个用户并且让用户获得root权限 - !canfly - 博客园 Git: 在 Linux 下搭建 Git 服务器 - 黄棣-dee ...

  8. LINUX服务器搭建和常用配置介绍

    服务器搭建 : 搭建私有CA服务器 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_011_ca.html搭建samba服务器 : h ...

  9. linux服务器搭建--将win10换成linux

    在这里说记录一下自己装linux的步骤,如果也有需要的朋友可以参看下: 1.目前win10的系统装成inux系统有3个解决办法: 第一:win10装linux子系统,网上已经有很多教程,步骤很简单 第 ...

随机推荐

  1. unity3d AssetBundle包加密

    原地址:http://www.cnblogs.com/88999660/archive/2013/03/15/2961587.html 保护资源管理文件的相关内容 Unity允许用户使用AssetBu ...

  2. 性能测试工具之Gatling

    转载:http://ningandjiao.iteye.com/blog/2004579 Gatling一直是久闻其名但是未得机会运用,正好最近有需求做性能测试,于是趁此机会熟悉了一下,可以说,这是目 ...

  3. AnyChartStock去除水印方法

    最近在使用AnyChartStock的图表,功能很强大,但下载过来是有水印的,虽然网上也有很多破解无水印的版本,但基本都是AnyChart的,AnyChartStoc的几乎没有.所以自己尝试着去除水印 ...

  4. web上传大文件的配置

    1.项目本身的webconfig  在<system.web>字段下 <httpRuntime targetFramework="4.5" requestLeng ...

  5. 那些日常琐事(iPhone上的细小提示,大数据分析)

         今天早上蹲坑玩手机的时候,无意间看到了iPhone 给我一些提醒,震惊了我.也许你们会说,没什么大惊小怪的,当然做程序的都知道苹果公司早就记载了我们日常生活中很多数据,只是苹果公司目前还没做 ...

  6. ubuntu11.0静态IP地址配置

    1. 静态IP地址配置 配置文件路径:/etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet ...

  7. Swift函数柯里化(Currying)简谈

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面简单说说Swift语言中的函数柯里化.简单的说就是把接收多 ...

  8. A Simple Chess (Lucas组合数 + 容斥)

    题意:走马步,要求向右向下,不能走进禁止的点.求方案数. 思路:若是n*m比较小的话,那么可以直接DP.但是这道题目不行.不过我们仔细分析可以知道从某个点到某个点是一个组合数,但是数据太大,mod值很 ...

  9. [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点

    深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...

  10. PHP的生命周期: