NGINX 配置https

小TOT 创建于 2017-02-07

什么是https协议:

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

http与https的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。 HTTPS和HTTP的区别主要为以下四点:

一、https协议需要到ca申请证书,一般免费证书很少,需要交费。

二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

如何制作自己的证书

下面介绍openssl做证书 openssl做证书

$ mkdir ssl
$ cd ssl
$ openssl genrsa -des3 -out server.key 1024 # 会提示你输入key,尽可能长些复杂些,后面好几处要用
$ openssl req -new -key server.key -out server.csr # 输入组织信息 CN sichuan ChengDu demo.com
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key 
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

配置nginx

配置详情参照下面配置的注释

server {
    listen 443;##https协议默认端口为443,若使用其他端口需要加上端口号访问,切记不要使用80端口
    server_name localhost;
    ssl on;## 开启ssl
    ssl_certificate ssl/server.crt;# 证书文件.相对于nginx配置根目录,如/etc/nginx/
    ssl_certificate_key sssl/server.key;## 密钥文件.相对于nginx配置根目录,如/etc/nginx/
    location / {
        ### 服务器配置,与http的配置一样
        ## 
        root /var/www;
        index index.html;
    }
}

需要注意的地方

  • 如果提示“SSL 接收到一个超出最大准许长度的记录。” 错误代码“ssl_error_rx_record_too_long”说明少了“ssl on;”
  • 如果无法使用openssl命令,使用yum 命令安装即可