基于Apache搭建HTTP HTTPS
参考资料
《openssl攻略》--第一章
《Apache服务器配置与使用工作笔记》-- 第六章 第十四章
https://juejin.im/post/5a31faf25188250a5719bfe0 ----各项操作的具体步骤
https://www.cnblogs.com/f-ck-need-u/p/6091027.html ----CA根配置文件讲解
https://www.cnblogs.com/f-ck-need-u/p/6091105.html ----自建CA根配置文件讲解
https://xz.aliyun.com/t/2526 ----关于SSL/TLS协议的详解(推荐的加密算法:ECDH)
注:对于apache服务器安装部分和虚拟主机配置部分这里没有参考资料(以前做的笔记)。
安装LAMP服务器(这里为了简便就目前只安装了apache服务器)
安装apache服务器
操作系统centos7
下载源码
httpd下载网站
http://httpd.apache.org/download.cgi
相关依赖包下载网站
http://apr.apache.org/download.cgi
将它们放入虚拟机中

编译安装相关插件
yum -y install gcc gcc-c++ Perl make pcre-devel expat-devel openssl openssl-devel
执行以下命令
mv apr-1.7.0 httpd-2.4.38/srclib/apr
mv apr-util-1.6.1 httpd-2.4.38/srclib/apr-util
进入安装目录
cd httpd-2.4.38
编译安装
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-ssl
建立apache服务器
make&make install
配置基于ip的虚拟主机
查看自己ip

在此基础上增加一个ip
ifconfig eno16777736:1 192.168.47.121 broadcast 192.168.47.255 netmask 255.255.255.0 up

另外主机能Ping通

要注意的是,上述配置信息重启后会消失。
修改/etc/hosts文件

配置httpd.conf文件
启用http-vhost.conf文件,配置虚拟主机

增加Directory容器,不然配置的Ip没有访问权限

配置usr/local/httpd/conf/extra/httpd-vhosts.conf文件

增加htdocs2的文件

重启apache
在httpd的bin目录下使用apachectl命令

访问结果


创建CA认证机构
需要另外一台centos7系统
自建CA配置
[default]
name = root-ca
domain_suffix = example.com
aiaurl = http://$name.$domainsuffix/$name.crt
crlurl = http://$name.domainsuffix/$name.crl
ocspurl = http://ocsp.$name.$domainsuffix:9080
defaultca = cadefault
nameopt = utf8,escctrl,multiline,lname,align
[ca_dn]
countryName = "GB"
organizationName = "Example"
commonName = "Root CA"
[ca_default]
home = .
database = $home/db/index
serial = $home/db/serial
crlnumber = $home/db/crlnumber
certificate = $home/$name.crt
private_key = $home/private/$name.key
RANDFILE = $home/private/random
newcertsdir = $home/certs
unique_subject = no
copy_extensions = none
default_days = 3650
defaultcrldays = 365
default_md = sha256
policy = policytomatch
[policytomatch]
countryName = match
stateOrProvinceName = optional
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[req]
default_bits = 4096
encrypt_key = yes
default_md = sha256
utf8 = yes
string_mask = utf8only
prompt = no
distinguishedname = cadn
reqextensions = caext
[ca_ext]
basicConstraints = critical,CA:true
keyUsage = critical,keyCertSign,cRLSign
subjectKeyIdentifier = hash
由根CA签发的证书的配置信息
[subcaext]
authorityInfoAccess=@issuer_info
authorityKeyIdentifier=keyid:always
CA:true表示创建的证书是CA,pathlen:0表示由CA签发的证书创建的下级证书不能是CA
basicConstraints=critical,CA:true,pathlen:0
crlDistributionPoints=@crl_info
TLS客户端和服务器
extendedKeyUsage=clientAuth,serverAuth
keyUsage=critical,keyCertSign,cRLSign
nameConstraints=@name_constraints
subjectKeyIdentifier=hash
[crl_info]
URI.0 = $crl_url
[issuer_info]
caIssuers;URI.0 = $aia_url
OCSP;URI.0 = $ocsp_url
[name_constraints]
permitted;DNS.0 = example.com
permitted;DNS.1 = example.org
excluded;IP.0=0.0.0.0/0.0.0.0
excluded;IP.1=0:0:0:0:0:0:0:0/0:0:0:0:0:0:0:0
[ocsp_ext]
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:true
extendedKeyUsage = OCSPSigning
keyUsage = critical,digitalSignature
subjectKeyIdentifier = hash
用以下命令创建相关文件夹及文件
mkdir root-ca
cd root-ca
gedit root-ca.conf

执行以下命令
mkdir certs db private
chmod 700 private
touch db/index
openssl rand -hex 16 > db/serial
echo 1001 > db/crlnumber
根CA的生成
生成密钥和CSR文件
openssl req -new -config root-ca.conf -out root-ca.csr -keyout private/root-ca.key
创建自签名证书
openssl ca -selfsign -config root-ca.conf -in root-ca.csr -out root-ca.crt -extensions ca_ext
根CA的操作
使用ca命令的-gencrl开关新CA生成CRL
openssl ca -gencrl -config root-ca.conf -out root-ca.crl
创建服务器证书(在有apache服务器那台进行)
创建RSA秘钥
openssl genrsa -out mywebsite.key 2048
一旦有了私钥,就可以创建证书签名申请CSR
openssl req -new -key mywebsite.key -out mywebsite.csr

这两项需要和CA机构的配置文件内容一样
然后将申请的csr文件发送到CA进行签证
openssl ca -config root-ca.conf -in mywebsite.csr -out mywebsite.crt -extensions subcaext

然后apache服务器接收该证书

搭建HTTPS服务器
配置SSL
修改服务器配置
去掉#Include /private/etc/apache2/extra/httpd-ssl.conf前面的#,
去掉#LoadModule sslmodule libexec/apache2/modssl.so前面的#,
去掉#LoadModule socacheshmcbmodule libexec/apache2/modsocacheshmcb.so前面的#。
修改httpd-ssl.conf配置
打开/private/etc/apache2/extra/httpd-ssl.conf文件,找到对应的SSLCertificateFile和SSLCertificateKeyFile字段,加入如下代码:
SSLCertificateFile "/usr/local/httpd/conf/mywebsite.crt"
SSLCertificateKeyFile "/usr/local/httpd/conf/mywebsite.key"
将桌面上的证书和私钥执行如下命令
mv mywebsite.key /usr/local/httpd/conf/mywebsite.key
mv mywebsite.crt /usr/local/httpd/conf/mywebsite.crt
修改虚拟主机部分

另外一部分修改为

重启apache服务器
验证结果
虚拟机上的结果:
这里有点小问题由于虚拟机ip地址改变成了192.168.47.148,所以这里和hosts文件也要改变一下ip


真机上的结果


使其访问变得安全
由于服务器颁发的证书一些配置有问题,故无法让浏览器相信,所以无法建立安全连接,这个部分有待研究
基于Apache搭建HTTP HTTPS的更多相关文章
- 基于Apache搭建Nagios图形监控
基于apache 的稍微简单一点么?实验一下子就OK了... 环境: System: [root@losnau etc]# cat /etc/issueRed Hat Enterprise Linux ...
- Tomcat:基于Apache+Tomcat的集群搭建
根据Tomcat的官方文档说明可以知道,使用Tomcat配置集群需要与其它Web Server配合使用才可以完成,典型的有Apache和IIS. 这里就使用Apache+Tomcat方式来完成基于To ...
- Linux搭建基于Apache的HTTP服务器
Linux搭建基于Apache的HTTP服务器 实验目标: 通过本实验掌握基于Linux的WWW服务器搭建. 实验步骤: 1.安装http服务 2.防火墙放通http服务 3.编辑测试网页 4.开 ...
- 基于SpringBoot搭建应用开发框架(二) —— 登录认证
零.前言 本文基于<基于SpringBoot搭建应用开发框架(一)——基础架构>,通过该文,熟悉了SpringBoot的用法,完成了应用框架底层的搭建. 在开始本文之前,底层这块已经有了很 ...
- linux -- 基于zookeeper搭建yarn的HA高可用集群
linux -- 基于zookeeper搭建yarn的HA高可用集群 实现方式:配置yarn-site.xml配置文件 <configuration> <property> & ...
- CentOS6下基于Nginx搭建mp4/flv流媒体服务器
CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源 [roo ...
- 基于Docker搭建分布式消息队列Kafka
本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示.本例搭建的 ...
- Httpd服务进阶知识-基于Apache Modele的LAMP架构之Discuz!案例
Httpd服务进阶知识-基于Apache Modele的LAMP架构之Discuz!论坛案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装依赖包及数据库 博主推荐阅读: ...
- Httpd服务进阶知识-基于Apache Modele的LAMP架构之WordPress案例
Httpd服务进阶知识-基于Apache Modele的LAMP架构之WordPress案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装依赖包及数据库授权 博主推荐阅读 ...
随机推荐
- HDU 6468 /// DFS
题目大意: 把 1~15 的数字典序排序后为 1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9 此时给定 n k, 求1~n的数组字典序排序后 第k个 ...
- C# 中File和FileStream的用法
原文:https://blog.csdn.net/qq_41209575/article/details/89178020 1.首先先介绍File类和FileStream文件流 1.1 File类, ...
- opencv配置经常遇到的错误
我们在运行一些书上的例子,经常会遇到以下的错误 还有什么Assertion Failed错误.这些错误都是我运行浅墨书上的例子或者博客的例子上面的代码的错误,他自己也提了一下,但是说的不是特别的清楚, ...
- CSS实现单行文本溢出显示省略号
p { width:100px;//设定宽度 //以下三个属性设置均必不可少 white-space: nowrap; text-overflow:ellipsis; overflow:hidden; ...
- android 打卡 虚拟定位 sqlite
1.使用android5.1模拟器 android5.1模拟器使用数据库管理参数文件,6.0及以后的版本使用xml文件管理 2.使用sqlite修改配置文件 3.修改secure库中的android_ ...
- 了解卷积神经网络如何使用TDA学习
在我之前的文章中,我讨论了如何对卷积神经网络(CNN)学习的权重进行拓扑数据分析,以便深入了解正在学习的内容以及如何学习它. 这项工作的重要性可归纳如下: 它使我们能够了解神经网络如何执行分类任务. ...
- CF1090J Two Prefixes
神仙题++ 还是在某校梁大讲的题qaq 我们考虑容斥 也就是本质不同字串=全部-重复的 我们只需要求重复的即可 考虑相同的s=ab 我们用长度最长的a作为代表串 如果存在一个a'b'且|a'|> ...
- selenium 自动化的坑(1)
UI自动化,一天一坑系列(1) 不要试图自作聪明添加一些不必要的东西. 个人遇到的问题关于下拉框的,本来一个下拉框连续点击两次就好了,结果自己多余将谷歌的提示‘正在受到自动化控制’去掉了,导致原本很简 ...
- C++ begin()和end()
begin(a)指向数组a的第一个元素,end(a)指向数组a最后一个元素之后的一个元素 #include <iostream> using namespace std; int main ...
- 小记:web安全测试之——固定session漏洞
今天因为项目背景需要,需要检测web接口是否一些安全隐患. 无奈于从未掌握有系统的渗透性知识,只好根据个人对网络协议和 web 的理解,做一些探索,最终发现了一个session fixation at ...