1. 聚能聊>
  2. 话题详情

HTTP遭遇浏览器抛弃紧,新年大旺开工部署HTTPS证书要注意哪些细节?是否还可以做分数测评呢?

身处在在人海茫茫的网络之中,浏览互联网站时,信息传递并不安全。我们和网站之间的安全连接协议被视为减少用户风险的必要措施,甚至信息可能遭受窃听、中间人攻击或数据篡改。正因如此,谷歌Chrome浏览器的地址栏将把所有HTTP标示为不安全网站。谷歌对Chrome的用户界面做出了一些改变,Chrome 浏览器开始把收集密码或信用卡数据的HTTP页面标记为“不安全”。当用户使用Chrome 62,带有输入数据的HTTP页面和所有以无痕模式浏览的HTTP页面都会被标记为“不安全”。开工部署HTTPS证书要注意哪些细节?

HTTPS 运作时多了加密(encryption),认证(verification),鉴定(identification)。HTTPS 区别于 HTTP,HTTPS是HTTP的升级版本它的安,更为安全可靠协议全源自非对称加密以及第三方的 CA 认证 :
1
如上图所示,简述如下:

客户端生成一个随机数 random-client ,传到服务器端(Say Hello)
服务器端生成一个随机数 random-server ,和着公钥,一起回馈给客户端(I got it)
客户端收到的东西原封不动,加上 premaster secret (通过 random-client 、 random-server 经过一定算法生成的东西),再一次送给服务器端,这次传过去的东西会使用公钥加密
服务器端先使用私钥解密,拿到 premaster secret ,此时客户端和服务器端都拥有了三个要素: random-client 、 random-server 和 premaster secret
此时安全通道已经建立,以后的交流都会校检上面的三个要素通过算法算出的 session key
CA 数字证书认证中心

如果网站只靠上图运作,可能会被中间人攻击,试想一下,在客户端和服务端中间有一个中间人,两者之间的传输对中间人来说是透明的,那么中间人完全可以获取两端之间的任何数据,然后将数据原封不动的转发给两端,由于中间人也拿到了三要素和公钥,它照样可以解密传输内容,并且还可以篡改内容。

为了确保我们的数据安全,我们还需要一个 CA 数字证书。HTTPS的传输采用的是非对称加密,一组非对称加密密钥包含公钥和私钥,通过公钥加密的内容只有私钥能够解密。上面我们看到,整个传输过程,服务器端是没有透露私钥的。而 CA 数字认证涉及到私钥,整个过程比较复杂,我也没有很深入的了解,后续有详细了解之后再补充下。

CA 认证分为三类:DV ( domain validation),OV ( organization validation),EV ( extended validation),证书申请难度从前往后递增,貌似 EV 这种不仅仅是有钱就可以申请的。

对于一般的小型网站尤其是博客,可以使用自签名证书来构建安全网络,所谓自签名证书,就是自己扮演 CA 机构,自己给自己的服务器颁发证书。

生成密钥、证书

第一步,为服务器端和客户端准备公钥、私钥

生成 CA 私钥

openssl genrsa -out ca.key 1024# X.509 Certificate Signing Request (CSR) Management.openssl req -new -key ca.key -out ca.csr# X.509 Certificate Data Management.openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
在执行第二步时会出现:

服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件

openssl req -new -key server.key -out server.csr

向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书

openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

client 端

openssl req -new -key client.key -out client.csr

client 端到 CA 签名

openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt
此时,我们的 keys 文件夹下已经有如下内容了:

// file http-server.js
var https = require('https');
var fs = require('fs');

var options = {
key: fs.readFileSync('./keys/server.key'),
cert: fs.readFileSync('./keys/server.crt')
};

https.createServer(options, function(req, res) {
res.writeHead(200);
res.end('hello world');
}).listen(8000);
短短几行代码就构建了一个简单的 https 服务器,options 将私钥和证书带上。然后利用 curl 测试:

?7?4 https curl -k https://localhost:8000
hello world%
这样的方式是不安全的,存在我们上面提到的中间人攻击问题。可以搞一个客户端带上 CA 证书试试:

?7?4 https node https-client.js
hello world
如果你的代码没有输出 hello world ,说明证书生成的时候存在问题。也可以通过浏览器访问:
0
提示错误:

此服务器无法证明它是localhost;您计算机的操作系统不信任其安全证书。出现此问题的原因可能是配置有误或您的连接被拦截了。

原因是浏览器没有 CA 证书,只有 CA 证书,服务器才能够确定,这个用户就是真实的来自 localhost 的访问请求(比如不是代理过来的)。

你可以点击 继续前往localhost(不安全) 这个链接,相当于执行 curl -k https://localhost:8000 。如果我们的证书不是自己颁发,而是去靠谱的机构去申请的,那就不会出现这样的问题,因为靠谱机构的证书会放到浏览器中,浏览器会帮我们做很多事情。初次尝试的同学可以去阿里云申请一个免费的证书。

Nginx 部署

ssh 到你的服务器,对 Nginx 做如下配置:

server_names nginx.com *.nginx.com
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.com.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !MEDIUM";

Add perfect forward secrecy

ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
部署完成后会发现,网页 URL 地址框左边已经多出了一个小绿锁,顺利部署HTTPS证书还要注意哪些细节?新年大旺,同学们是否还可以做分数测评呢?

参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    阿里云代金券 x 3

  • 奖品二

    阿里云API精选手册 x 1

  • 奖品三

    云栖帽衫 x 1

28个回答

1

1415219889209602 复制链接去分享

信息加密很重要,https是网站的趋势。

1

1877619621534598 复制链接去分享

是的,SSL是位于TCP/IP和各种应用层协议间—SSL安全套接字层(Secure Sockers Layer)协议由著名的Netscape公司开发。为了保证通信双方建立安全可靠的传输隧道,SSL使用PKI中的数字证书技术对通信双方进行身份认证;使用对称加密来保证数据保密性;使用消息认证码(MAC)来保证数据完整性。

1

iclouder 复制链接去分享

TOMCAT成功部署ssl,楼上回下

1

1453614734437961 复制链接去分享

是什么部署SSL证书好

0

high 复制链接去分享

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

0

1383522387565621 复制链接去分享

你好,是否可以开发虚拟主机数字证书,方便我们快速来使用用,一键配置在服务器的虚拟主机上。虚拟主机SSL 证书同样遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发。是否能让虚?拟主机证书同样具有服务器身份验证和数据传输加密功能 ?

0

1282718555477883 复制链接去分享

http信息是明文传送,https是嵌套了SSL加密的http连接,其内容会由SSL先加密,然后再传送。

0

1694722319161085 复制链接去分享

阿里云可以提升部署的安全性能吗

2