首页 > 代码库 > 如何实现基于lamp搭建https服务

如何实现基于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) . 生成私钥
  •         [root@xunC7 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
  •            技术分享技术分享
  • (2) . 生成一个CA证书
  •         [root@xunC7 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
  •            技术分享技术分享   
  •   创建证书序列号文件、证书索引文件
  •              [root@xunC7 CA]# touch index.txt serial
  •              [root@xunC7 CA]# echo 01> serial
  • 在客户端同样生成私钥和证书
  •        [root@wxC6 ssl]# (umask 077; openssl genrsa -out httpd.key 1024)
  •        技术分享技术分享        
  •                注意:私钥权限为600
  • (3) 生成证书
  •        [root@wxC6 ssl]# openssl req -new -key httpd.key -out httpd.csr.pem
  •           技术分享技术分享
  • (4) 把证书复制到CA服务端签证            
  •        [root@wxC6 ssl]# scp httpd.csr.pem root@192.168.117.133:/tmp
  •           技术分享技术分享
  • (5)
  •    CA签发证书
  •          [root@xunC7 CA]# openssl ca -in /tmp/httpd.csr.pem -out certs/httpd.crt.pem
  •           技术分享技术分享
 
  • (6)  把签好的证书复制回去‘
  •         [root@xunC7 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了数据库
  •        [root@wxC7 blog]# mysql -uXunBlogs -hwww.wx.com -p
  •            技术分享
  •            技术分享
  • (5) 登录填写账号密码等 ,到此整个站点搭建结束
  •            技术分享 技术分享
  •        
  •    对上面的wordpress站点进行压测      
  •        [root@wxC7 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服务