密码学应用(三)Apache搭建Https

搭建中间件

中间件=平台+通信;
中间件是一类连接软件组件和应用的计算机软件,它包括一组服务;
中间件是基础软件的一大类,属于可复用软件的范畴;
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。

Linux中搭建Apache

Apache HTTP Srver(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性。被广泛使用,是最流行的Web服务器之一。它快速、可靠并且可以通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

1. 在线安装Apache

#通过
yum -y install httpd
#安装完成后,根目录在 /etc/httpd 里面
#Apache的配置文件在 /etc/httpd/conf/httpd.conf 中
Apache目录结构
服务目录/ect/httpd
主配置文件/etc/httpd/conf/httpd.conf
网站数据目录/var/www/html
访问日志/var/long/httpd/access_log
错误日志/var/log/httpd/error_log
在httpd服务程序主配置文件中最为常用的参数
ServerRoot服务目录
ServerAdmin管理员邮箱
User运行服务的用户
Group运行服务的用户组
ServerName网站服务器的域名
DocumentRoot网站数据的目录
Listen监听的IP地址与端口号
DirectoryIndex默认的索引页页面
ErrorLog错误日志文件
CustomLog访问日志文件
Timeout网页超时时间,默认300秒
Include需要加载的其他文件

2. 发布Apache
Apache的工程发布有两种方式:

  1. 是将工程放入 /var/www/html 中,或放入 $APACHE_HOME\Apache24\htdocs 中:
    进入 /var/www/html 目录,创建一个新目录:http_demo;
    进入 http_demo 编辑并创建一个HTML文件:test.html 例如:
<html>
	<head>
		<title>Apache工程发布Demo</title>
	</head>
	<body>
		<h1>Hello Apache</h1>
	</body>
</html>

运行Apache:

systemctl start httpd

主机中通过浏览器输入IP就可以访问发布的页面了。

  1. 配置 /etc/httpd/conf/httpd.conf ,将 conf/extra/httpd-vhosts.conf 前的 “#” 去掉,然后在extra目录下的 httpd-vhosts.conf 文件中进行配置:
<VirtualHost*:80>
	ServerAdmin 邮箱
	DocumentRoot "工程路径"
	ServerName 域名
	#ServerAlias www.dummy-host.goole.com
	ErrorLog "logs/dummy-geeksun-error.log"
	CustomLog "logs/dummy-geeksun-access.log" common
</VirtualHost>

3. Apache安全配置

  1. 错误详情页banner隐藏:
    当访问一个不存在的页面,如果站点没做404重定向的话,就会泄露一些敏感信息。

修复方法:

  • 修改配置文件:/etc/apache2/apache2.conf 或者 /etc/httpd/conf/httpd.conf 隐藏中间件信息:
#修改或者添加以下信息
ServerTokens Prod
ServerSignature Off
  • 修改配置文件:/etc/php5/apache2/php.ini 第367行隐藏PHP信息,将expose_php = On 修改为 Off:
367    expose_php = off
  • 保存配置后重启服务:
system restart httpd

再次访问不存在的页面,此时已经没有banner信息了。

  1. 重定向404页面
    当一个用户访问到一些不存在的页面或者错误的链接时,如果我们没有做一个页面去引导用户访问该站点的其它页面,将会损失大量的用户。

修复方法:

  • 在工程根目录下(/var/www/html/http_demo),新建一个文件:.htaccess
#写入一下内容
ErrorDocument 404 /404.html
  • 在同目录下新建一个文件:404.html(与上一步指定的路径相同)
<!DOCTYPE html>
<html>
	<head><title>404页面</title></head>
	<body>Hello, This is 404 page!!!</body>
</html>

注意:

  • 不要将404错误直接转向首页,这将导致首页不被收录;
  • /404.html 前面不要带主域名,否则返回的状态码是 302 或者 200状态码;
  • 自定义的404页面必须是大于512B,如果小于这个大小,浏览器就不会执行。
  1. 默认目录
    当WEB服务器配置不当时,如果当前目录不存在默认文件(比如:index.html),Apache会列出当前目录下的所有文件,造成敏感信息泄露。

修复方法:

  • 修改配置文件:/etc/apache2/apache2.conf 或者 /etc/httpd/conf/httpd.conf
164	<!Directory /var/www/>	#必须是网站根路径
165	Options Indexes FollowSymLinks	#删除Indexes这个参数(Options FollowSymLinks)
166	AllowOverride All
167	Require all granted
168	</Directory>
  1. 文件权限问题
    现在大部分网站都存在文件上传,比如头像上传、附件上传等等。如果在代码层对上传的文件限制的不严格,很容易被上传Webshell。一旦被上传Webshell,会对服务器造成很大的威胁。

修复方法:

170	<Directory /var/www/html/http_demo/upload>	#这里设置成想要限制的目录
171		php_flag engine off
172	</Directory>
  1. 服务运行权限
    因为Apache开放的端口是80或者443,小于1024的端口需要root权限,因此主进程必须是root,从第二行开始为Apache的子进程,用户为apache,权限较低。

修改低权限用户方法:进入 /etc/httpd/conf 中编辑httpd.conf,将user和group修改成更低的权限。

  1. Apache日志
    Apache会生成两个重要的日志,一个是Web访问日志access.log,一个是记录服务器运行时出错的日志error.log。

查看日志:/var/httpd/error.log

通过配置文件 /etc/apache2/apache2.conf 或者 /etc/httpd/conf/httpd.conf 来定义日志的格式:

#虚拟主机的日志格式
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %0 \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
#组合日志格式
LogFormat "%h %l %u %t \"%r\" %>s %0 \"%{Referer}i\" \"%{User-Agent}i\""  #combined
#通用日志格式
LogFormat "%h %l %u %t \"%r\" %>s %0" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
#自定义设置日志使用哪个格式的日志
CustomLog ${APACHE_LOG_DIR}/access_log common

Apache文档已经给出了所有可用于格式串的变量及其含义,下面是其译文:
%…a: 远程IP地址
%…A: 本地IP地址
%…B: 已发送的字节数,不包含HTTP头
%…b: CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0。
%…{FOOBAR}e: 环境变量FOOBAR的内容
%…f: 文件名字
%…h: 远程主机
%…H 请求的协议
%…{Foobar}i: Foobar的内容,发送给服务器的请求的标头行。
%…l: 远程登录名字(来自identd,如提供的话)
%…m 请求的方法
%…{Foobar}n: 来自另外一个模块的注解“Foobar”的内容
%…{Foobar}o: Foobar的内容,应答的标头行
%…p: 服务器响应请求时使用的端口
%…P: 响应请求的子进程ID。
%…q 查询字符串(如果存在查询字符串,则包含“?”后面的部分;否则,它是一个空字符串。)
%…r: 请求的第一行
%…s: 状态。对于进行内部重定向的请求,这是指原来请求 的状态。如果用%…>s,则是指后来的请求。
%…t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%…{format}t: 以指定格式format表示的时间
%…T: 为响应请求而耗费的时间,以秒计
%…u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%…U: 用户所请求的URL路径
%…v: 响应请求的服务器的ServerName
%…V: 依照UseCanonicalName设置得到的服务器名字

为Apache搭建HTTPS

概述:

HTTPS(全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目的的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。
HTTPS在HTTP的基础上加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

  1. 安装OpenSSL

概述:
OpenSSL是网络上的一个开放源代码的软件库包。它实现了SSL协议的SSlV2和SSLV3,也实现了TLSv1.0(TLS是SSLv3的标准化版),支持了其中大部分算法协议。
OpenSSL软件包可分成三个主要的功能部分:SSL协议库、应用程序、密码算法库。

  • 检查是否安装了OpenSSL,如果已安装就跳过这个阶段;
openssl version -a
  • 通过http://www.openssl.org/source/openssl-1.0.2j.tar.gz下载OpenSSL,可以下载最新版本,或者使用yum进行在线安装;
  • 在下载文件下解压安装,得到文件夹:openssl-1.0.2j ;
tar -zxvf openssl-1.0.2j.tar.gz
  • 进入文件夹:openssl-1.0.2j ,设定OpenSSL安装,(–prefix)参数为预安装目录;
./config --prefix=/usr/local/openssl
#执行命令
./config -t
#执行命令,编译OpenSSL
make install
  • 安装过程中若提示没有GCC,则需要安装GCC;
yum -y install gcc
  • OpenSSL安装完成。
  1. OpenSSL的用法

OpenSSL一共实现了四种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(ECC)。
DH算法一般用于密钥交换;
RSA算法既可用于密钥交换,也可用于数字签名、数据加密;
DSA算法一般只用于数字签名。

  • 对称加密
    对称加密需要使用的标准命令为 enc ,用法如下:
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
       [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
       [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]

常用选项有:
-in filename:指定要加密的文件存放路径;
-out filename:指定加密后的文件存放路径;
-salt:自动插入一个随机数作为文件内容加密,默认选项;
-e:可以指明一种加密算法,若不指的话将使用默认加密算法;
-d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致;
-a/-base64:使用-base64位编码格式。

#加密:
openssl enc -e -des3 -a -salt -in fstab -out jiami
#解密:
openssl enc -d -des3 -a -salt -in fstab -out jiami
  • 单向加密
    单向加密需要使用的标准命令为 dgst ,用法如下:
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [-d] [-hex] [-binary]
       [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify
       filename] [-signature filename] [-hmac key] [file...]

常用选项有:
[-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一种加密算法;
-out filename:将加密的内容保存到指定文件中;
单向加密除了 openssl dgst 工具还有: md5sum,sha1sum,sha224sum,sha256sum ,sha384sum,sha512sum。

openssl dgst -md5 fstab
echo "jia mi nei rong" | openssl dgst -md5
  • 生成密码
    生成密码需要使用的标准命令为 passwd ,用法如下:
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}

常用选项有:
-1:使用md5加密算法;
-salt string:加入随机数,最多8位随机数;
-in file:对输入的文件内容进行加密;
-stdion:对标准输入的内容进行加密。
在这里插入图片描述

  • 生成随机数
    生成随机数需要用到的标准命令为 rand ,用法如下:
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num

常用选项有:
-out file:将生成的随机数保存至指定文件中;
-base64:使用base64 编码格式;
-hex:使用16进制编码格式。
在这里插入图片描述

  • 生成秘钥对
    首先需要先使用 genrsa 标准命令生成私钥,然后再使用 rsa 标准命令从私钥中提取公钥。genrsa 的用法如下:
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]

常用选项有:
-out filename:将生成的私钥保存至指定的文件中;
-des|-des3|-idea:不同的加密算法;
numbits:指定生成私钥的大小,默认是2048;
一般情况下秘钥文件的权限一定要控制好,只能自己读写,因此可以使用 umask 命令设置生成的私钥权限:
在这里插入图片描述

  • ras 的用法如下:
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
       [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]

常用选项:
-in filename:指明私钥文件;
-out filename:指明将提取出的公钥保存至指定文件中 ;
-pubout:根据私钥提取出公钥 。
在这里插入图片描述

  1. 创建CA和申请证书
    使用openssl工具创建CA证书和申请证书时,需要先查看配置文件,因为配置文件中对证书的名称和存放位置等相关信息都做了定义,具体可参考 /etc/pki/tls/openssl.cnf 文件。
    在这里插入图片描述
    在这里插入图片描述
  • 第一步:创建为 CA 提供所需的目录及文件
    在这里插入图片描述
  • 第二步:指明证书的开始编号
echo 01 >> serial
  • 第三步:生成私钥,私钥的文件名与存放位置要与配置文件中的设置相匹配
    在这里插入图片描述

  • 第四步:生成自签证书,自签证书的存放位置也要与配置文件中的设置相匹配,生成证书时需要填写相应的信息
    在这里插入图片描述

命令中用到的选项解释:
-new:表示生成一个新证书签署请求;
-x509:专用于CA生成自签证书,如果不是自签证书则不需要此项;
-key:生成请求时用到的私钥文件;
-out:证书的保存路径;
-days:证书的有效期限,单位是day(天),默认是365天。

  • 第五步颁发证书

在需要使用证书的主机上生成证书请求,以 httpd 服务为例,步骤如下:
第一步:在需要使用证书的主机上生成私钥,这个私钥文件的位置可以随意定
第二步:生成证书签署请求
第三步:将请求通过可靠方式发送给 CA 主机
在这里插入图片描述
第四步:CA 服务器拿到证书签署请求文件后颁发证书,这一步是在 CA 服务器上做的
在这里插入图片描述
查看证书信息的命令为:
在这里插入图片描述

  • 吊销证书
    吊销证书的步骤也是在CA服务器上执行的,以刚才新建的 httpd.crt 证书为例,吊销步骤如下:

第一步:在客户机上获取要吊销证书的 serial 和 subject 信息
第二步:根据客户机提交的 serial 和 subject 信息,对比其余本机数据库 index.txt 中存储的是否一致
第三步:执行吊销操作
在这里插入图片描述
第四步:生成吊销证书的吊销编号 (第一次吊销证书时执行)
echo 01 > /etc/pki/CA/crlnumber
第五步:更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl
查看 crl 文件命令:
openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值