基于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案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装依赖包及数据库授权 博主推荐阅读 ...
随机推荐
- SQL 常用语句(一)
--SQL 语句为表添加字段并设置默认值 alter table TableName add ColumnName int --字段类型 not null --是否为空 --默认值 --SQL 语句为 ...
- Python之路-Python常用模块-time模块
一.time模块 常用的一种获取当前时间以及时间格式化的模块,模块名称:time time模块在Python原生安装中就存在所以不需要进行任何安装操作,直接使用即可. 导入方式: import tim ...
- IO流详解及测试代码
IO流 (1)IO用于在设备间进行数据传输的操作 (2)分类: A:流向 输入流 读取数据 输出流 写出数据 B:数据类型 字节流 字节输入流 ...
- There is no Action mapped for namespace [/] and action name [TestAction] ass
1.修改action的name值 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE strut ...
- 一、touch.js
一.touch.js 1.引用链接: <script src="https://cdn.bootcss.com/touchjs/0.2.14/touch.min.js"> ...
- tree 数状型结构显示目录下的内容
1. 命令功能 tree中文意思“树”,以树形结构显示目录内容.. 2. 语法格式 tree [option] [directory] tree 选项 目录 3. 使用范例 当最小化安装l ...
- Vue.js 技术揭秘学习 (1) new Vue 发生了什么
Vue 初始化主要就干了几件事情,合并配置,初始化生命周期,初始化事件中心,初始化渲染,初始化 data.props.computed.watcher 等等.
- Java 逻辑运算符相关解析
问:定简单说说 Java 中 & 与 && 有什么区别?| 与 || 呢? 答:& 是位运算符,&& 是布尔逻辑运算符,| 与 || 类似同理.在进行逻 ...
- Java类加载器初识
类加载器基本概念 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java虚拟机使用Java类的方式如下:Java 源程序(.java 文件)在经过 Jav ...
- jest操作 Elasticsearch
package com.lgmall.search; import com.lgmall.search.esEntity.Article;import com.lgmall.search.esEnti ...