标签归档:HTTPS

加密传输的一些知识点

提供端到端的加密方案有:

  • 网络层加密
  • 传输层加密
  • 应用层加密

在网络安全加密方案的比较中,最安全的方案一定是暴露用户信息最少的,换句话说:加密的越多,越安全!

所以对底层的网络层加密最安全,最山梗的应用加密层加密最不安全。

网络层加密(IPsec)加密了除IP之外的所有层,包括TCP/UDP及以上,加密用户信息最多。

传输层加密(TLS)加密了除IP/TCP/UDP之外,所有应用层数据,包括 HTTP/FTP/SMTP,加密内容次之

应用层加密,只是加密应用层里敏感的信息,如密码,以及其它需要加密保护的内容,那IP/TCP/HTTP内容都明文暴露在外,加密内容最少。

毫无疑问网络层加密是最安全的,但是IPsec需要预先配置,甚至安装客户端软件,严重影响了它的普及层度。

而基于TLS的安全加密如https,几乎不需要任何预先配置。只要浏览器拥有Root CA证书,或者二级RA签发证书,然后加密是自动进行的,无需用户任何干预。

IPsecTLS的认证加密由一下组成:

1.认证对端合法性(Authentication)

  • Pre-shared Password
  • PKI

2.密钥交换算法(Key Exchange)

  • RSA
  • ECDH

3.加密算法(Encryption)

  • AES
  • 3DES

4.MAC校验算法(Integrity)

  • MD5
  • SHA-1

5.放重放共计(Anti-Replay)

  • 一般使用序列号(Sequence Number)来杜绝重放攻击

虽然上面的方案已趋近于完美,但还是存在最薄弱的环节,认证对方合法性(中间人欺骗)。

如果客户端和服务端都是私有实现的,比如说统一公司开发的后端和前端APP,可以使用下面方案解决。

使用预共享秘钥生成 敏感数据加密 + MAC,将数据HTTP封装,然后由TLS加密,这样即使中间人欺骗,也无法解密应用层加密数据。

参考:https://www.zhihu.com/question/52790301

搭建HTTPS服务器

一、申请https证书

StartSSL可以免费申请https证书,但是免费证书只能使用在一个域名中。

1、登录或注册账号

有账号就登录,没账号就注册。

选择地区、填写邮件,等待确认验证码。

安装浏览器证书

安装完成,点击选择证书,登录。

2、域名验证

选择Validations Wizard -> Domian Validation 域名验证

填写域名

等待获取域名信息,选择验证方式,输入验证码,确认验证,完毕。

3、申请证书

选择 Certificates -> Web Server SSL/TLS Certificate 网页服务器SSL认证

输入域名,以及密钥,点击提交。

系统会根据刚刚输入的密钥生成一个私钥,我们需要将其保存下来。

之后StartSSL就会通过我们的申请。我们只需要将其下载下来上传到服务器即可。

二、服务器配置

www.iter-cc.com.zip解压后得到不同版本服务器的证书,我需要使用的是Nginx Server.zip

解压Nginx Server.zip

服务器配置

编辑nginx配置

当我们重启服务器的时候,系统会让我们输入刚刚生成密钥的命令

输入确认后即可完成。

访问网站,OK!

如果嫌每次重启服务器的时候需要输入密码比较烦,我们可以解密私钥。然后将nginx的路径指向解密后的密钥即可。

编辑服务器配置

之后重启服务器就可以无需密码。

访问网站确认ok!!!

高版本CURL 抓取 https/tls1.0时的问题。

高版本CURL抓起HTTPS/TLS1.0是会报错,如下:

Unknown SSL protocol error in connection to query.unionpaysecure.com:443

代码如下:

原因是高版本的CURL不兼容TLS1.0。

解决方法:

设置CURL的SSL的加密算法列表。CURLOPT_SSL_CIPHER_LIST

代码如下

 

参考链接:

http://willbradley.name/2012/10/03/workaround-for-php-error-in-ubuntu-12-04-soapclient-ssl-crypto-enabling-timeout/

http://cn2.php.net/manual/zh/function.curl-setopt.php#Hcom114958