Http、Https的区别以及SSL证书安装

作者: Timeless 更新时间: 阅读量: 318

一、HTTP和HTTPS的基本概念

  HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

  HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

  HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

二、HTTP与HTTPS有什么区别?

  HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

2.1、HTTPS和HTTP的区别主要如下:

  1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

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

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

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

三、HTTPS的优点

  尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:

  1、使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

  2、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

  3、HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

  4、谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。

四、SSL证书的安装

上面介绍了那么多HTTPS,有需要的同学可以按照下面的教程进行安装~

4.1、申请SSL证书

推荐到腾讯云申请 域名型(DV)免费证书 ,或者到自己所在的服务商以及其它一些快速申请的渠道进行申请。

QQ截图20180403082755.jpg

4.2、下载证书文件

下面以腾讯云申请的证书为例:

下载得到的 www.timelessq.com.zip 文件,解压获得3个文件夹,分别是Apache、IIS、Nginx 服务器的证书文件

4.3、Apache 2.x 证书部署

Apache文件夹内获得证书文件 1_root_bundle.crt,2_www.timelessq.com_cert.crt 和私钥文件 3_www.timelessq.com.key

编辑Apache根目录下 conf/httpd.conf 文件,

找到 #LoadModule ssl_module modules/mod_ssl.so 和 #Include conf/extra/httpd-ssl.conf,去掉前面的#号注释;在Include conf/vhosts.conf 下面添加 Include conf/vhosts443.conf;

然后在conf目录下新建一个文件 vhosts443.conf 内容如下

Listen 443
SSLStrictSNIVHostCheck off
SSLCipherSuite AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL
SSLProtocol all -SSLv2 -SSLv3
<VirtualHost *:443>
    DocumentRoot "C:\phpStudy\PHPTutorial\WWW\test"   #网站根目录
    ServerName     #网站域名 
    ServerAlias test.com  #网站别名
    <Directory "C:\phpStudy\PHPTutorial\WWW\test">   #网站根目录
        Options FollowSymLinks ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
    SSLEngine on
    SSLCertificateFile "D:\wampserver\Apache\conf\ssl\2_timelessq.com.crt"      #证书文件位置 可以使用相对路径
    SSLCertificateKeyFile "D:\wampserver\Apache\conf\ssl\3_timelessq.com.key"   #私钥文件
    SSLCertificateChainFile "D:\wampserver\Apache\conf\ssl\1_root_bundle.crt"  #证书链文件
</VirtualHost>

4.4、Nginx证书部署

Nginx文件夹内获得SSL证书文件 1_www.timelessq.com_bundle.crt 和私钥文件 2_www.timelessq.com.key

将域名 www.timelessq.com 的证书文件1_www.timelessq.com_bundle.crt 、私钥文件2_www.timelessq.com.key保存到同一个目录,例如Nginx的conf目录下。

然后修改nginx.conf 或者 vhost.conf 文件(建议改后面这个)添加443端口的监听如下:server {

        listen 443;
        server_name www.timelessq.com; #填写绑定证书的域名
        ssl on;
        ssl_certificate 1_www.timelessq.com_bundle.crt;
        ssl_certificate_key 2_www.timelessq.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
        ssl_prefer_server_ciphers on;
        location / {
            root   html; #站点目录
            index  index.html index.htm;
        }
        location ~ \.php(.*)$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
}

关于IIS以及Tomcat证书的部署,我没怎么用过也没发言权,毕竟IIS 嘿嘿 你懂的

贴下找到的资料吧 https://cloud.tencent.com/document/product/400/4143

五、http请求重定向https

5.1、Apache配置

1、打开Apache/conf/httpd.conf,找到 #LoadModule rewrite_module modules/mod_rewrite.so,删除前面#

2、在网站的配置文件的<Directory>标签内或者网站根目录的.htaccess下填写

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R=301]

如果只对某个目录做https跳转

RewriteEngine on
RewriteBase /foldername  #这里写需要做跳转的目录,比如/app,这样访问的url的端口不是443,且访问目录是/app,重定向到https
RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=302]

如果排除某目录以外的做https跳转

#这样不需要指定目录,因为除了upload目录外,其它所有资源的请求都重定向到https
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/upload
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=302]

5.2、Nginx配置

在配置80端口的文件里面参考下面配置

server {
    listen       80;
    server_name  localhost;
    rewrite ^(.*)$ https://$host$1 permanent;    
}

IIS等其它的环境,我没有实践过,有需求的童鞋网上找找吧,o(∩_∩)o 哈哈