CA Server证书申请与颁发 & Apache2 HTTPS

  本文将介绍关于CA Server的相关内容。CA Server搭建与自签名证书创建,实体认证与证书颁发,服务器证书申请与导入。

  另外,证书申请后,想要进行应用,还需要配置服务器的HTTPS。

CA Server initialize

本文使用easy-rsa工具(GitHub repo)进行CA Server的配置与维护,easy-rsa 是基于shell的CA管理工具,可以方便进行CA的管理和基本操作。

  • 下载repo release后,将其移动到适合位置,这里选择/opt/easy-rsa。并选取合适目录权限

  • 进入目录,初始化pki

cd easy-rsa
./easyrsa init-pki

配置 vars

vars是基本CA服务器配置文件,新版配置文件被放入pki目录中,需要另行修改

set_var EASYRSA_REQ_COUNTRY		"CN"
set_var EASYRSA_REQ_PROVINCE	"Shang Hai"
set_var EASYRSA_REQ_CITY		"Shang Hai"
set_var EASYRSA_REQ_ORG			"Zheng's Studio"
set_var EASYRSA_REQ_EMAIL		"hz1624917200@outlook.com"
set_var EASYRSA_REQ_OU			"My Organizational Unit"

生成CA根证书

./easyrsa build-ca

build CA

生成CA根证书ca.crt此证书是CA的凭证,所有该CA签署的证书都需要该根证书证明

ca.crt取出,分发给服务器和客户端。服务器需要CA证书作为信任链,客户端需要信任CA根证书

Linux 安装证书

crt证书移动到/usr/local/share/ca-certificates下,更新证书

sudo update-ca-certificates

更新后的证书可以在/etc/ssl/certs中查到(仅软链接)

Windows 安装证书

双击证书,点击install,安装在Trusted Root Certification Authorities.这一步非常关键,Windows将给予该CA机构根信任,该机构签发的所有证书都将被系统信任

install

证书申请与颁发

服务器密钥对生成

在申请证书前,需要先生成证书的目标公钥,使用openssl工具生成密钥对。

openssl genrsa -out <key_name>.key

密钥请妥善保存,若遗失则证书将不再有保护作用,需要申请撤销
gen server CA

申请证书

Attention: 在申请证书前,需要添加DNS请求字段,否则将出现证书域名不匹配,会被浏览器拦截

我们将在下文中看到如果不添加字段的后果,如果想避免重新申请和颁发证书,请照做

openssl.conf文件中,(位置不完全相同,笔者的文件在/etc/ssl中),增加如下信息:

...
[ req ]
...
req_extentions		= v3_req

[ v3_req ]
...
subjectAltName = @alt_names

[ alt_names ]
DNS.1	= domain1
DNS.2	= domain2
  • DNS.x字段后添加认证的域名,可以添加多个

然后执行如下指令,创建申请

sudo openssl req -new -key <key_name>.key -out <request_name>.req
  • openssl会询问关于证书的详细信息,这些信息将被写入证书中

CA request

  • 生成完毕后,查看证书请求信息
    sudo openssl req -text -noout -in <req_name>.req
    

x509 extension

将请求文件传输给CA Server,准备颁发

证书签署

使用easy-rsa维护证书实体和申请等信息

./easyrsa import-req <req_name> <entity_name>
  • req_name: 请求文件名
  • entity_name: 将录入数据库的实体名称

req imported

使用sign-req命令签署证书

./easyrsa sign-req server <entity_name>

生成文件位于./pki/issued/<entity_name>.crt

在Windows上查看证书:

kali cert

  • 此证书不需要安装,因为已经安装有根证书,此证书已经被信任

在Linux上查看证书:

sudo openssl x509 -in <cert_name> -noout -text

signed crt

  • 可以在Linux上安装证书,以后Apache调用证书直接使用安装位置

Apache2 配置 HTTPS

启用 module

启用ssl module

sudo a2enmod ssl

查看模块信息

sudo a2query -m

配置站点

/etc/apache2/sites-available下,新建站点(也可以直接修改默认站点)

原先自带两个站点配置文件,000-default.conf, default-ssl.conf

将两个配置文件合并为新的配置文件,继续修改(需要同时配置80和443的端口,可以使用echo合并,自行操作)

<VirtualHost *:443>
	ServerAdmin ...
	ServerName ...
	DocumentRoot ...
	...
	SSLCertificateFile /path/to/server/certificate
	SSLCertificateKeyFile /path/to/server/certificate/key
	
	SSLCertificateChainFile /path/to/server/certificate/chain
	...
</VirtualHost>

配置HTTP协议的重定向,在Virtual Host 80中,添加重定向配置

Redirect permanent / https://<https_server_name>
  • SSLCertificateFile: 服务器证书文件目录
  • SSLCertificateKeyFile: 证书对应私钥
  • SSLCertificateChainFile证书链文件,包含从根证书(需要客户端信任)到服务器证书的证书链(本样例中只有单层,故使用CA证书路径,也可以配置在SSLCACertificateFile中)

启用站点

sudo a2dissite 000-default.conf
sudo a2ensite site_name.conf
sudo service apache2 restart

测试

成功完成HTTPS配置!

success

success

通过Burpsuite可以观察到正确的重定向操作

redirect

通过浏览器,可以看到证书的详情页面

cert1

cert CA

问题说明

unissued cert error

unissued cert

浏览器报错,Peer's Certificate issuer is not recognized,此类在Firefox上会出现

因为Firefox自行管理证书系统,需要将CA根证书导入Firefox中解决

bad cert domain

bad cert domain

为了增强证书安全性,RFC规定将证书的Alt Name作为DNS域, 只有证书与域名相匹配,才能认为证书合法。这也是申请证书中需要配置openssl.conf的原因。如果遇到这个问题,需要重新进行证书申请,并附带DAN信息。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值