共计 3899 个字符,预计需要花费 10 分钟才能阅读完成。
HTTP 和 HTTPS 的基本概念
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
HTTPS 协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性
为什么要是使用https
http 协议的缺点
- 通信使用明文,内容可能被窃听(重要密码泄露)
- 不验证通信方身份,有可能遭遇伪装(跨站点请求伪造)
- 无法证明报文的完整性,有可能已遭篡改(运营商劫持)
HTTPS 的优点
- 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器
- HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本
申请 ssl 证书
前往 freessl 免费申请证书
1. 输入域名点击创建
2. 输入平时自己用的邮箱,CSR 选择浏览器生成,然后点击创建
3. 会生成一个 DNS 配置,然后我们前往对应的所购买的域名服务商去添加一条解析规则
4. 我是在阿里云购买的域名所以前往阿里云控制台找到自己购买的域名然后填写上面的对应规则
5. 当配置完成后,回到刚才下发的 ssl 证书的网站中,点击验证 按钮,如果配置解析成功会出现以下界面,否则失败,请仔细重新填写,或者等 5 到 10 分钟,等待解析规则生效
6. 复制里面的内容保存成相应文件
Apache 配置支持 HTTPS 的 SSL 证书
- 编辑 Apache 根目录下 conf/httpd.conf 文件 找到 #LoadModule ssl_module/mod_ssl.so 和 #Include conf/extra/httpd-ssl.conf 去掉前面的 #号注释
-
打开 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/ 浏览器如若出现绿色锁说明配置成功
域名配置 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 文件返回给客户,而不是返回出错信息 |
All | All 包含了除 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>
特别鸣谢
freessl- 为我们提供免费的 ssl 证书
ssl 其它参考
更多 ssl 申请路径集合