Ubuntu Linux服务器搭建SSL/TLS(https)(在StartSSL可以得到免费证书)
首先SSL/TLS是什么鬼?比如你现在正在看的https://awaimai.com/,前面是https,表明这个是https协议,https就是http + SSL/TLS,在http外面套一个加密层,让第三方难以得到传输的明文数据。如果用chrome访问这个站,在这个URL旁边会显示一个绿色的锁,表明这个连接是安全的。另外境外的https还有一个附加效果就是抵御关键字的审查,同时Google也更喜欢收录https的站点。
其实以上是在说废话,看这文章的乃萌肯定是知道此为何物才会找到这里来的啦,所以就不废话了,以下是搭建步骤:
- 生成公钥和私钥对
- 公钥提交到CA机构签发一个crt证书(不建议自签发证书)
- 配置证书链
- 在你的 apache 或 nginx 里开启SSL支持并配置好你的crt证书和私钥
- [可选]继续其它配置,如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 的网站地址。
- StartSSL :https://www.startssl.com/
- AlphaSSL :http://www.alphassl.com/
签发成功后,你就能下载回来一个.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可以得到免费证书)的更多相关文章
- [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...
- [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...
- [skill][https][ssl/tls] HTTPS相关知识汇总
结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA DHE / ECDHE PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协 ...
- Python Web学习笔记之SSL,TLS,HTTPS
一. SSL 1. SSL简介 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持.SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可 ...
- ubuntu gitlab服务器搭建
gitlab服务器搭建 1.安装依赖包 sudo apt-get install curl openssh-server ca-certificates postfix 执行完成后,出现邮件配置,选择 ...
- 结合jenkins在Linux服务器搭建测试环境
何时使用: 测试过程中我们需要持续构建一个软件项目,为避免重复的手动下载.解压操作,我们需要搭建一个能够自动构建的测试环境,当代码有更新时,测试人员只需点一下[构建]即可拉取最新的代码进行测试(也可设 ...
- Linux服务器搭建相关教程链接整理
Linux: Linux 教程 | 菜鸟教程 linux下如何添加一个用户并且让用户获得root权限 - !canfly - 博客园 Git: 在 Linux 下搭建 Git 服务器 - 黄棣-dee ...
- LINUX服务器搭建和常用配置介绍
服务器搭建 : 搭建私有CA服务器 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_011_ca.html搭建samba服务器 : h ...
- linux服务器搭建--将win10换成linux
在这里说记录一下自己装linux的步骤,如果也有需要的朋友可以参看下: 1.目前win10的系统装成inux系统有3个解决办法: 第一:win10装linux子系统,网上已经有很多教程,步骤很简单 第 ...
随机推荐
- 亲测有效,解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) ";
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/hjf161105/article/details/78850658 最近租了一个阿里云云翼服务器,趁 ...
- Android Studio打包apk,aar,jar包
转载请标明出处:一片枫叶的专栏 文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独 ...
- jeesuite分布式框架环境搭建
一.简述 这是菜鸟走向开源的第一步.开源项目jeesuite:http://git.oschina.net/vakinge/jeesuite-libs jeesuite是托管在码云上的开源项目,是一个 ...
- 为什么唱iOS 6.0选择Mantle
近来的mt=8" target="_blank" rel="external">iOS的6.0版本号已经成功上线了. 18人月的投入,2500个 ...
- 把搜狗输入法词库导入Google拼音输入法
为PC端Google拼音输入法增加词库 为什么折腾词库 都在说百度.讯飞等输入法上传用户词库,为了安全建议大家使用google输入法之类,话说回来,要想使用智能联想功能是不是就得把你输入习惯放在他的里 ...
- QT5.5.1 为Qtcreator 编译的程序添加管理员权限
QT版本:5.5.1 QT Creator QT Creator 编译出来的程默认是不带管理员权限的.有时是需要管理员权限. 第一步: 创建文件 uac.manifest 添加如下代码 <?xm ...
- Objective-C block实现代码分析
block内部结构 让我们写一个block void exampleBlock() { // NSConcreteStackBlock int a = 1; __block int b = 2; in ...
- 在动态THML语句中调用JS函数传递带空格参数的问题
刚刚遇到一个问题,调用js函数的参数里带空格,造成调用失败的问题. 部分代码如下: html+="<div><a href=javascript:confirm(&qu ...
- 如何控制WAP网站上输入框的默认键盘类型
百度上对这样的资料介绍很多,基本上都和这个页面是一个意思 http://www.w3school.com.cn/html5/att_input_type.asp : 语法 <input type ...
- c语言bit倒置最好的算法-离msb-lsb至lsb-msb
问题 什么是例如最好的算法,下面的转换? 0010 0000 => 0000 0100 从详细的转换MSB->LSB至LSB->MSB, 所有的Bit必须扭转,着.这并非字节顺序的交 ...