基于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案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装依赖包及数据库授权 博主推荐阅读 ...
随机推荐
- 问题 A: 组合数
问题 A: 组合数 时间限制: 1 Sec 内存限制: 128 MB提交: 1975 解决: 150[提交] [状态] [命题人:jsu_admin] 题目描述 求组合数C(N,M),以及C(N, ...
- ES6——面向对象应用
面向对象应用——React 特点: 1.组件化(模块化) --- class(一个组件就是一个class) 2.强依赖与JSX (JSX==babel==browser.js 是JS ...
- 轻便的gb28181协议中的rtp+ps格式视频流的封装和解析
streams 轻便的gb28181协议中的rtp+ps格式视频流的封装和解析 packet packet实现ps的相关封装和解析, example/enc 通过joy4来读本地视频文件,然后调用Rt ...
- 【编码的法则】谨慎的使用static
概述 static主要有三种使用方式,其中前两种在C/C++中使用,第三种只在C++语言中使用 1)静态局部变量 2)静态全局变量/函数 3)静态成员变量/函数 3 静态成员变量/函数 3.1静态成员 ...
- Java类加载器初识
类加载器基本概念 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java虚拟机使用Java类的方式如下:Java 源程序(.java 文件)在经过 Jav ...
- 19.go语言基础学习(下)——2019年12月16日
2019年12月16日16:57:04 5.接口 2019年11月01日15:56:09 5.1 duck typing 1. 2. 接口 3.介绍 Go 语言的接口设计是非侵入式的,接口编写者无须知 ...
- 【leetcode】885. Boats to Save People
题目如下: 解题思路:本题可以采用贪心算法,因为每条船最多只能坐两人,所以在选定其中一人的情况下,再选择第二个人使得两人的体重最接近limit.考虑到人的总数最大是50000,而每个人的体重最大是30 ...
- service-resources
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- ConversionService HttpMessageConverter
ConversionService是属于spring core部分 所有spring管理的bean等等 都使用它进行类型转换,而它又需要注册一些converter 来完成类型转换. 这个可以看我博客 ...
- 英语单词debug
来源——docker官网首页https://www.docker.com/ 翻译 vt. 调试,排除故障,除错,改正有毛病部分 过去式 debugged 过去分词 debugged 现在分词 debu ...