参考资料

《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


真机上的结果

使其访问变得安全

由于服务器颁发的证书一些配置有问题,故无法让浏览器相信,所以无法建立安全连接,这个部分有待研究

最新文章

  1. Mac下QT错误,Xcode配置解决办法
  2. 内网机(无网络安装 .NET Core win开发环境
  3. AI,DM,ML,PR的区别与联系
  4. 修改vb程序图标
  5. Android使用BLE(低功耗蓝牙,Bluetooth Low Energy)
  6. DB2 函数大全
  7. Android源代码之DeskClock (一)
  8. OpenH264
  9. SQL SERVER 运维日记-数据库备份
  10. python 黑魔法收集--已结
  11. SSH框架之hibernate《二》
  12. Java中的NIO基础知识
  13. Css - 页面标签页图标
  14. jQuery抽奖插件 jQueryRotate
  15. bzoj2654
  16. 58VIP账号发贴器
  17. HDFS文件系统的JAVA-API操作(一)
  18. check camera and driver
  19. 转载 springboot 配置读取
  20. 【xsy1237】 字符转换 矩阵快速幂

热门文章

  1. 01-HTML控件
  2. vue框架中实现今天昨天前天最近时间
  3. Vue 实现文件的下载
  4. 2018-5-5-UWP-和-WPF-对比
  5. python if-else替代三元表达式
  6. Ansible自动化运维工具(2)
  7. 03机器学习实战之决策树scikit-learn实现
  8. SICP 习题解 第二章
  9. Codeforces Round #595 (Div. 3) 题解
  10. 理解Promise (2)