参考资料

《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的更多相关文章

  1. 基于Apache搭建Nagios图形监控

    基于apache 的稍微简单一点么?实验一下子就OK了... 环境: System: [root@losnau etc]# cat /etc/issueRed Hat Enterprise Linux ...

  2. Tomcat:基于Apache+Tomcat的集群搭建

    根据Tomcat的官方文档说明可以知道,使用Tomcat配置集群需要与其它Web Server配合使用才可以完成,典型的有Apache和IIS. 这里就使用Apache+Tomcat方式来完成基于To ...

  3. Linux搭建基于Apache的HTTP服务器

    Linux搭建基于Apache的HTTP服务器   实验目标: 通过本实验掌握基于Linux的WWW服务器搭建. 实验步骤: 1.安装http服务 2.防火墙放通http服务 3.编辑测试网页 4.开 ...

  4. 基于SpringBoot搭建应用开发框架(二) —— 登录认证

    零.前言 本文基于<基于SpringBoot搭建应用开发框架(一)——基础架构>,通过该文,熟悉了SpringBoot的用法,完成了应用框架底层的搭建. 在开始本文之前,底层这块已经有了很 ...

  5. linux -- 基于zookeeper搭建yarn的HA高可用集群

    linux -- 基于zookeeper搭建yarn的HA高可用集群 实现方式:配置yarn-site.xml配置文件 <configuration> <property> & ...

  6. CentOS6下基于Nginx搭建mp4/flv流媒体服务器

    CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源 [roo ...

  7. 基于Docker搭建分布式消息队列Kafka

    本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示.本例搭建的 ...

  8. Httpd服务进阶知识-基于Apache Modele的LAMP架构之Discuz!案例

    Httpd服务进阶知识-基于Apache Modele的LAMP架构之Discuz!论坛案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装依赖包及数据库  博主推荐阅读: ...

  9. Httpd服务进阶知识-基于Apache Modele的LAMP架构之WordPress案例

    Httpd服务进阶知识-基于Apache Modele的LAMP架构之WordPress案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装依赖包及数据库授权 博主推荐阅读 ...

随机推荐

  1. SQL 常用语句(一)

    --SQL 语句为表添加字段并设置默认值 alter table TableName add ColumnName int --字段类型 not null --是否为空 --默认值 --SQL 语句为 ...

  2. Python之路-Python常用模块-time模块

    一.time模块 常用的一种获取当前时间以及时间格式化的模块,模块名称:time time模块在Python原生安装中就存在所以不需要进行任何安装操作,直接使用即可. 导入方式: import tim ...

  3. IO流详解及测试代码

    IO流 (1)IO用于在设备间进行数据传输的操作 (2)分类:    A:流向       输入流 读取数据      输出流 写出数据   B:数据类型     字节流         字节输入流  ...

  4. There is no Action mapped for namespace [/] and action name [TestAction] ass

    1.修改action的name值 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE strut ...

  5. 一、touch.js

    一.touch.js 1.引用链接: <script src="https://cdn.bootcss.com/touchjs/0.2.14/touch.min.js"> ...

  6. tree 数状型结构显示目录下的内容

    1. 命令功能 tree中文意思“树”,以树形结构显示目录内容.. 2. 语法格式 tree  [option]   [directory] tree  选项   目录 3. 使用范例 当最小化安装l ...

  7. Vue.js 技术揭秘学习 (1) new Vue 发生了什么

    Vue 初始化主要就干了几件事情,合并配置,初始化生命周期,初始化事件中心,初始化渲染,初始化 data.props.computed.watcher 等等.

  8. Java 逻辑运算符相关解析

    问:定简单说说 Java 中 & 与 && 有什么区别?| 与 || 呢? 答:& 是位运算符,&& 是布尔逻辑运算符,| 与 || 类似同理.在进行逻 ...

  9. Java类加载器初识

    类加载器基本概念 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java虚拟机使用Java类的方式如下:Java 源程序(.java 文件)在经过 Jav ...

  10. jest操作 Elasticsearch

    package com.lgmall.search; import com.lgmall.search.esEntity.Article;import com.lgmall.search.esEnti ...