如何实现基于lamp搭建https服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现基于lamp搭建https服务相关的知识,希望对你有一定的参考价值。
如何实现基于lamp搭建https服务
lamp:服务架构
- httpd:接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php来运行;
- php:运行php程序;
- MariaDB:数据管理系统;
(一): 安装其相关服务
- CentOS 6: httpd, php, mysql-server, php-mysql
- # service httpd start
- # service mysqld start
- CentOS 7: httpd, php, php-mysql, mariadb-server
- # systemctl start httpd.service
- # systemctl start mariadb.service
- 此处以安装wordprasse基于lmap架构
- amp( httpd, mariadb, php)组成
HTTP: hyper text transfer protocol
- 应用层协议 ,监听于80/tcp端口, 超文本传输协议
- 工作模式:
- http请求报文:http request
- http响应报文: http response
- 一次http事务:请求<-->响应
- HTTP特性:
- 高度模块化: core + modules
- DSO:dynamic shared object 动态装卸载
- MPM:Multipath processing Modules (多路处理模块)
- 三种处理模型:
- prefork:多进程模型,每个进程响应一个请求;
- worker:多进程多线程模型,每线程处理一个用户请求;
- event:事件驱动模型,多进程模型,每个进程响应多个请求;
- 程序环境:
- 配置文件:
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/*.conf
- 模块相关的配置文件:/etc/httpd/conf.modules.d/*.conf
- systemd unit file:
- /usr/lib/systemd/system/httpd.service
- 主程序文件:
- /usr/sbin/httpd
- httpd-2.4支持MPM的动态切换;
- 日志文件:
- /var/log/httpd:
- access_log:访问日志
- error_log:错误日志
- 站点文档:
- /var/www/html
- 模块文件路径:
- /usr/lib64/httpd/modules
- 服务控制:
- systemctl enable|disable httpd.service
- systemctl {start|stop|restart|status} httpd.service
php:脚本语言解释器
配置文件:/etc/php.ini, /etc/php.d/*.ini
配置文件在php解释器启动时被读取,因此,对配置文件的修改如何生效?
Modules:重启httpd服务;
httpd与php结合的方式:
modules (把php编译成为httpd的模块)
SSL会话的简化过程
- (1) 客户端发送可供选择的加密方式,并向服务器请求证书;
- (2) 服务器端发送证书以及选定的加密方式给客户端;
- (3) 客户端取得证书并进行证书验正:
- 如果信任给其发证书的CA:
- (a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名;
- (b) 验正证书的内容的合法性:完整性验正
- (c) 检查证书的有效期限;
- (d) 检查证书是否被吊销;
- (e) 证书中拥有者的名字,与访问的目标主机要一致;
- (4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;
- (5) 服务器用此密钥加密用户请求的资源,响应给客户端;
- 注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机;
- 回顾几个术语:PKI,CA,CRL,X.509 (v1, v2, v3)
- 配置httpd支持https:
- (1) 为服务器申请数字证书;
- 测试:通过私建CA发证书
- (a) 创建私有CA
- (b) 在服务器创建证书签署请求
- (c) CA签证
- (2) 配置httpd支持使用ssl,及使用的证书;
- # yum -y install mod_ssl
- 配置文件:/etc/httpd/conf.d/ssl.conf
- DocumentRoot
- ServerName
- SSLCertificateFile
- SSLCertificateKeyFile
- (3) 测试基于https访问相应的主机;
- # openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
- 测试php及mysql数据库的连接情况是否正常
- 步骤图如下
- php测试
- 编辑测试文件进行测试
- 下图为测试结果表示OK
- php 链接mysql测试
- 访问其网页会跟据数据库在线情况给出OK或NO的状态返回
测试没有问题就可以开始搭建了
(二)httpd修改url路径
- 资源的标识机制:URL
- URL: Unifrom Resource Locator 统一资源定位器(用于描述服务器某特定资源的位置
- 文档路径映射:
- DoucmentRoot指向的路径为URL路径的起始位置
- 其相当于站点URL的根路径;
- (1) 创建一个DocumentRoot资源路径
- mkdir /web/www/html -pv
- (2) 编辑/etc/httpd/conf/httpd.conf文件
- 修改DocumentRoot文件为自己创建的路径
- 修改</Directroy>目录路径
- 如图
- (3) 以上步骤完成后重启,再次访问主机名或ip即可
- centos7 重启 : systemctl restart httpd.service
- centos6 重启 : service httpd restart
(三) 证书生成和签署
- (1) . 生成私钥
- [[email protected] CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
- (2) . 生成一个CA证书
- [[email protected] CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
- 创建证书序列号文件、证书索引文件
- [[email protected] CA]# touch index.txt serial
- [[email protected] CA]# echo 01> serial
- 在客户端同样生成私钥和证书
- [[email protected] ssl]# (umask 077; openssl genrsa -out httpd.key 1024)
- 注意:私钥权限为600
- (3) 生成证书
- [[email protected] ssl]# openssl req -new -key httpd.key -out httpd.csr.pem
- (4) 把证书复制到CA服务端签证
- [[email protected] ssl]# scp httpd.csr.pem [email protected]:/tmp
- (5)
- CA签发证书
- [[email protected] CA]# openssl ca -in /tmp/httpd.csr.pem -out certs/httpd.crt.pem
- (6) 把签好的证书复制回去‘
- [[email protected] CA]# scp certs/httpd.crt.pem 192.168.117.131:/etc/httpd/ssl/
- (7) 客户端 编辑 /etc/httpd/conf.d/ssl.cof文件 这个文件是由mod_ssl模块生成如果没有需下载
- 编辑内容如下图
- 配置完成后再浏览器上导入CA证书即可
- 效果如下
(四) lamp:服务架构
- CentOS 6: httpd, php, mysql-server, php-mysql
- # service httpd start
- # service mysqld start
- CentOS 7: httpd, php, php-mysql, mariadb-server
- # systemctl start httpd.service
- # systemctl start mariadb.service
- 安装wordprasse基于lmap架构
- 此处amp( httpd, mariadb, php)组成
- 一: 测试php及mysql数据库的连接情况是否正常
- 步骤图如下
- php测试
- 编辑测试文件进行测试
- 下图为测试结果表示OK
- php 链接mysql测试
- 访问其网页会跟据数据库在线情况给出OK或NO的状态返回
- (1) 下载wordprasse解压到指定目录下
- 如图:
- (2) 修改wp-config-sample.php内容如图
- (3)mysql数据库远程连接用户授权,这里授权所有人都可访问
- MariaDB [(none)]> GRANT ALL ON wordpress.* TO ‘XunBlogs‘@‘%‘ IDENTIFIED BY ‘xunpass‘;
- (4) 测试登录mysq了数据库
- [[email protected] blog]# mysql -uXunBlogs -hwww.wx.com -p
- (5) 登录填写账号密码等 ,到此整个站点搭建结束
- 对上面的wordpress站点进行压测
- [[email protected] www]# ab -n 1000 -c 10 http://www.wx.com/blog
- 总共1000个请求 10个并发 单个网页访问
- 测试的详细信息
(五)HTTP的访问控制机制
- 文件系统路径
- <Directory "">
- ...
- </Directory>
- <File "">
- ...
- </File>
- <FileMatch "PATTERN">
- URL路径
- <Location "">
- ...
- </Location>
- <LocationMatch "PATTERN">
- ...
- </LocationMatch>
- 控制页面资源允许所有来源的主机可访问:
- httpd-2.2
- <Directory "">
- ...
- Order allow,deny
- Allow from all
- </Directory>
- 示例:
- 除了192.168.117.133之外所有192.168网段之内都可访问
- 如图
- httpd-2.4
- <Directory "">
- ...
- Require all granted
- </Directory>
- 示例:
- 允许 192.168网段内访问
- (1) 站点访问控制常见机制
- 基于IP控制:
- Require ip IP地址或网络地址
- Require not ip IP地址或网络地址
- 基于主机名控制:
- Require host 主机名或域名
- Require not host 主机名或域名
- 要放置于<RequireAll>配置块中或<RequireAny>配置块中
- (2) 基于IP的访问控制
- 允许所有主机访问:Require all granted
- 拒绝所有主机访问:Require all deny
- 基于主机访问控制:
- Require host HOSTNAME:授权指定来源的主机访问;
- Require not host HOSTNAME:拒绝
以上是关于如何实现基于lamp搭建https服务的主要内容,如果未能解决你的问题,请参考以下文章
基于lamp+fastcgi+https搭建phpMyAdmin和wordpress