1
HTTP和HTTPS的基本概念
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性

为什么要是使用https

http协议的缺点

  1. 通信使用明文,内容可能被窃听(重要密码泄露)
  2. 不验证通信方身份,有可能遭遇伪装(跨站点请求伪造)
  3. 无法证明报文的完整性,有可能已遭篡改(运营商劫持)

HTTPS的优点

  1. 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器
  2. HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性
  3. HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本

申请ssl证书

前往freessl免费申请证书

1.输入域名点击创建

clipboard.png

2.输入平时自己用的邮箱,CSR选择浏览器生成,然后点击创建

clipboard.png

3.会生成一个DNS配置,然后我们前往对应的所购买的域名服务商去添加一条解析规则

clipboard.png

4.我是在阿里云购买的域名所以前往阿里云控制台找到自己购买的域名然后填写上面的对应规则

clipboard.png

5.当配置完成后,回到刚才下发的ssl证书的网站中,点击验证按钮,如果配置解析成功会出现以下界面,否则失败,请仔细重新填写,或者等5到10分钟,等待解析规则生效

clipboard.png

6.复制里面的内容保存成相应文件

clipboard.png

Apache配置支持HTTPS的SSL证书

  1. 编辑Apache根目录下conf/httpd.conf 文件 找到#LoadModule ssl_module/mod_ssl.so 和#Include conf/extra/httpd-ssl.conf 去掉前面的#号注释
  2. 打开httpd-ssl.conf文件,添加一条记录,一般在xmapp\\apache\\conf\\extra下面

    <VirtualHost *:443>
    
        DocumentRoot "你网站的路径"  #如 C:\php\wwww\itnavs\blogs\blogs-itnavs
        ServerName www.blogs.itnavs.com
        ServerAlias blogs.itnavs.com
        ServerAdmin 470193837@qq.com
        ServerName itnavs.com
        SSLEngine on
        
        SSLCertificateFile "刚才生成的ssl路径.crt"  #如 https/itnavs/blogs/blogs_itnavs.crt
        SSLCertificateKeyFile "刚才生成的ssl路径.key" #如 https/itnavs/blogs/blogs_itnavs.key
        SSLCertificateChainFile "刚才生成的ssl路径.crt"  #如 https/itnavs/blogs/blogs_itnavschain.crt
    
        <Directory "你网站的路径"> #如 C:\php\wwww\itnavs\blogs\blogs-itnavs
           Options FollowSymLinks
           AllowOverride All
           Require all granted
        </Directory>
        
    </VirtualHost>

    重启Apache,输入https://blogs.itnavs.com/ 浏览器如若出现绿色锁说明配置成功

clipboard.png

域名配置https已完成


httpd-ssl.conf语法扩充说明

ServerAdmin指令:

语法: ServerAdmin email-address|URL

用来设置服务器返回给客户端的错误信息中包含的管理员邮件地址。便于用户在收到错误信息后能及时与管理员取得联系。

ServerName指令:

语法:ServerName [scheme://] FQDN [:port]

用来设置服务器用于辨识自己的主机名和端口号。主要用于创建重定向URL。

DocumentRoot指令:

语法:DocumentRoot directory-path

用来设置httpd提供服务的目录。即你所在项目入口处的文件夹。

ErrorLog指令:

语法: ErrorLog file-path

来设置当服务器遇到错误时记录错误日志的文件。如果file-path不是以/开头的绝对路径,那么将会被认为是一个相对于ServerRoot的相对路径。

CustomLog指令:

语法: ErrorLog file-path common

设置日志文件,并指明日志文件所用的格式(通常通过格式的名字)。

<Directory 目录路径>...</Directory>

为主目录或虚拟目录设置权限

DirectoryIndex index.html index.htm index.php

设置访问目录后进入的默认文件

AllowOverride all

定义位于每个目录下.htaccess(访问控制)文件中的指令类型。none为禁止使用.htaccess文件

特性:
Indexes MultiViews All ExecCGI FollowSymLinks Includes IncludesNoExec

命令说明
Indexes允许目录浏览,当客户仅指定要访问的目录,但没有指定要访问目录下的哪个文件,而且目录下不存在默认文档时,Apache以超文本形式返回目录中的文件和子目录列表(虚拟目录不会出现在目录列表中)
MultiViews允许内容协商的多重视图,MultiViews其实是Apache的一个智能特性。当客户访问目录 中一个不存在的对象时,如访问“http://192.168.66.6/data/a”,则Apache会查找这个目录下所有a.*文件。由于 data目录下存在a.gif文件,因此Apache会将a.gif文件返回给客户,而不是返回出错信息
AllAll包含了除MultiViews之外的所有特性,如果没有Options语句,默认为All
ExecCGI允许在该目录下执行CGI脚本
FollowSymLinks可以在该目录中使用符号连接
Includes允许服务器端包含功能
IncludesNoExec允许服务器端包含功能,但禁用执行CGI脚本

一旦定义允许目录浏览 ,就会将Web站点的文件夹和文件名结构暴露给黑客。目录浏览还会允许黑客浏览文件并掌握服务器配置信息,所以指定该权限往往带来安全性上的隐患。除非有充足的理由要使用目录浏览,否则应该禁用它

.htaccess语法扩充说明

RewriteCond语法参数:

# 位于行首时表示注释。

-d 测试字符串是否是已存在的目录

-f 测试字符串是否是已存在的文件

-s 测试字符串所指文件是否有"非零"值(非空的常规文件)

-l视为一个路径名并测试它是否为一个存在的符号连接(符号连接)

-x(可执行)视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测

RewriteRule语法参数:

[F] Forbidden(禁止) : 命令服务器返回 403 Forbidden错误给用户浏览器

[L] Last rule(最后一条规则) : 告诉服务器在本条规则执行完后停止重写URL

[N] Next(下一条规则) : 告诉服务器继续重写,指导所有重写指令都执行过

[G] Gone(丢失) : 命令服务器返回410 GONE(no longer exists)错误消息

[P] Proxy(代理) : 告诉服务器通过mod_proxy模块处理用户请求

[C] Chain(捆绑) : 告诉服务器将当前的规则和前面的规则进行捆绑

[R] Redirect(重定向) : 命令服务器发出重定向消息,以便用户浏览器发出rewritten/modified(重写/修改)URL的请求

[NC] No Case(不区分大小写) : 对客户端请求的URL不区分大小写

[PT] Pass Through(放行) : 让mod_rewrite模块将重写的URL传回给Apache做进一步处理

[OR] Or(逻辑或) : 用逻辑"或"将两个表达式连接在一起,如果结果为"真",则会应用后继的相关规则

[NE] No Escape(禁用转义) : 命令服务器在输出时禁用转义字符

[NS] No Subrequest(禁用子请求) : 如果存在内部子请求,则跳过当前命令

[QSA] Append Query String(追加查询字符串) : 命令服务器在URL末尾追加查询字符串

[S=x] Skip(跳过) : 如果满足某指定的条件,则跳过后面第x调规则

[E=variable:value] Environmental Variable(环境变量) : 命令服务器将值value赋给变量variable

[T=MIME-type] Mime Type(MIME类型) : 声明目标资源所属的MIME类型

例如thinkphp隐藏index.php
<IfModule mod_rewrite.c>

    RewriteEngine on 
    
    RewriteCond %{REQUEST_FILENAME} !-d 
    
    RewriteCond %{REQUEST_FILENAME} !-f 
    
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    
</IfModule>

原创说明

本文章《3分钟搞定从申请ssl证书到域名服务器配置》同时也在vipbic上展示

特别鸣谢

freessl-为我们提供免费的ssl证书

ssl其它参考

更多ssl申请路径集合


羊先生
1.9k 声望821 粉丝