2020课程设计(基于gmssl的CA系统构建及应用)

一、任务详述

1.了解gmssl中的命令,描述支持的选项、场景和参数,制作成文档;

2.使用OpenSSL搭建CA,颁发证书、签名验签、模拟用户和颁发机构,查看证书等等;

3.制作网站,通过https访问。

 

二、任务理解

(一)在Ubuntu虚拟机下安装gmssl,在提示下并理解使用gmssl分工完成文档;

(二)搭建CA

搭建CA具体步骤:

1. 建立根CARoot CA(自己给自己颁发证书)

1)生成私钥文件

#(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem  4096)

2)生成自签名证书 (CA要有证书)

#openssl  req -new -x509  -key /etc/pki/CA/private/cakey.pem -out/etc/pki/CA/cacert.pem -days 3650

//req:申请;-x509:自签名

//查看证书内容  openssl x509 -in cacert.pem -noout  -text

//图形方式 sz cacert.pem   改后缀crt

2.用户服务器申请证书,CA服务器颁发证书

1)生成私钥

#(umask 077;openssl genrsa -out app.key 1024)

2)生成证书申请文件

#openssl  req  -new -key app.key  -out app.csr

3)将申请文件发给CA

#scp app.csr 172.21.109.25:/etc/pki/CA

3.CA颁发证书--用自己的私钥签名

#touch index.txt   //这个文件会自动更新        

#echo 0F > serial   //下一个要颁发的证书的编号

#openssl ca -in app.csr -out certs/app.crt-days 100

4.证书发送客户端

#scp certs/app.crt 172.21.111.1:/data

5.在应用软件中使用证书

1)做一个加密的网站,自签名证书,首先安装一个模块mod_ssl

yum install mod_ssl

安装了这个模块,会生成/etc/httpd/conf.d/ssl.conf这个配置文件

2)配置这个配置文件

在/etc/httpd/conf.d/ssl.conf配置文件指定新的证书路径,私钥文件和上级CA证书的证书路径

vim /etc/httpd/conf.d/ssl.conf

3)配置完之后然后重新启动http服务

service httpd restart

3)ss -ntl 查看有没有443端口

4)用https来访问网站,安装证书

(三)制作网站,通过https访问

自建CA证书

首先建立myCA目录用于存放自建CA的相关信息:

cd && mkdir -p myCA/signedcerts && mkdir myCA/private && cd myCA

myCA用于存放 CA 根证书,证书数据库,以及后续服务器生成的证书,密钥以及请求。

signedcerts保存签名证书的 copy,private包含私钥。

 

之后配置myCA相关参数,在myCA目录下进行:

 

echo '01'>serial && touch index.txt

然后创建 caconfig.cnf 文件(自建CA的配置文件):

 

vim ~/myCA/caconfig.cnf

caconfig.cnf文件内容如下:

 

# My sample caconfig.cnf file.

#

# Default configuration to use when one is not provided on the command line.

#

[ ca ]

default_ca      = local_ca

#

#

# Default location of directories and files needed to generate certificates.

#

[ local_ca ]

dir             = /home/<username>/myCA

 

certificate     = $dir/cacert.pem

database        = $dir/index.txt

new_certs_dir   = $dir/signedcerts

private_key     = $dir/private/cakey.pem

serial          = $dir/serial

#       

#

# Default expiration and encryption policies for certificates.

#

default_crl_days        = 365

default_days            = 1825

default_md              = SHA256

#       

policy          = local_ca_policy

x509_extensions = local_ca_extensions

#       

#

# Default policy to use when generating server certificates.  The following

# fields must be defined in the server certificate.

#

[ local_ca_policy ]

commonName              = supplied

stateOrProvinceName     = supplied

countryName             = supplied

emailAddress            = supplied

organizationName        = supplied

organizationalUnitName  = supplied

#       

#

# x509 extensions to use when generating server certificates.

#

[ local_ca_extensions ]

subjectAltName          = DNS:localhost

basicConstraints        = CA:false

nsCertType              = server

#       

#

# The default root certificate generation policy.

#

[ req ]

default_bits    = 2048

default_keyfile = /home/<username>/myCA/private/cakey.pem

 

default_md      = SHA256

#       

prompt                  = no

distinguished_name      = root_ca_distinguished_name

x509_extensions         = root_ca_extensions

#

#

# Root Certificate Authority distinguished name.  Change these fields to match

# your local environment!

#

[ root_ca_distinguished_name ]

commonName              = MyOwn Root Certificate Authority # CA机构名

stateOrProvinceName     = JS                               # CA所在省份

countryName             = CN                               # CA所在国家(仅限2个字符)

emailAddress            = XXXX@XXX.com                     # 邮箱

organizationName        = XXX                              #

organizationalUnitName  = XXX                              #

#       

[ root_ca_extensions ]

basicConstraints        = CA:true

其中dir和default_keyfile的路径需要改成自己的username

 

生成 CA 根证书和密钥:

 

export OPENSSL_CONF=~/myCA/caconfig.cnf       #该命令用于给环境变量 OPENSSL_CONF 赋值为caconfig.cnf。

openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825             # 生成 CA 根证书和密钥

该步骤需要用户设置一个密码,请牢记。

 

以上步骤生成了 CA 自签名根证书,和 RSA 公/私密钥对,证书的格式是 PEM,有效期是1825天。

 

/myCA/cacert.pem: CA 根证书

/myCA/private/cakey.pem: CA 私钥

 

生成服务器配置文件exampleserver.cnf:

 

vim ~/myCA/exampleserver.cnf

exampleserver.cnf文件内容如下:

 

#

# exampleserver.cnf

#

 

[ req ]

prompt             = no

distinguished_name = server_distinguished_name

 

[ server_distinguished_name ]

commonName              = localhost          # 服务器域名

stateOrProvinceName     = JS                 # 服务器所在省份

countryName             = CN                 # 服务器所在国家(仅限2个字符)

emailAddress            = XXXX@XXX.com       # 邮箱

organizationName        = XXX                #

organizationalUnitName  = XXX                #

生成服务器证书和密钥:

export OPENSSL_CONF=~/myCA/exampleserver.cnf   # 该命令设置环境变量 OPENSSL_CONF,使得 openssl 更换配置文件。

openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM

同样的,需要设置密码。

之后,有2种对临时密钥的操作,选择其一即可:

1.将临时私钥转换为 unencrypted key,即密钥不加密状态:

penssl rsa -in tempkey.pem -out server_key.pem

需要输入密码短语。

 

2.如果希望将 key 保持为加密状态,直接改名:

mv tempkey.pem server_key.pem

两者的区别是,第二种需要在服务器启动时输入私钥的密码,否则会导致服务器启动失败,但第二种安全性高于第一种,可以更好的保护密钥。

 

使用 CA key 对服务器证书签名:

 

export OPENSSL_CONF=~/myCA/caconfig.cnf

openssl ca -in tempreq.pem -out server_crt.pem

删除临时证书和密钥:

rm -f tempkey.pem && rm -f tempreq.pem

现在,自签名的服务器证书和密钥对便产生了:

server_crt.pem : 服务器证书文件

server_key.pem : 服务器密钥文件

以下通过LAMP搭建一个网站进行验证

 

配置httpd(Apache)

第一步:安装Apache服务程序(apache服务的软件包名称叫做httpd)

yum install httpd -y

第二步: 将Apache服务添加到开机自启中

systemctl start httpd

systemctl enable httpd

第三步:打开浏览器 测试 127.0.0.1,可以看到默认主页

httpd主要目录:

 

服务目录:/etc/httpd

主配置目录:/etc/httpd/conf/httpd.conf

网站数据目录:/var/www/html

访问日志:/var/log/httpd/access_log

错误日志:/var/log/httpd/error_log

 

配置php

1、安装源

安装php需要配置额外的yum源,否则会报错不能找到相关软件包。

php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic,如果跳过epel-release安装webtatic的时候会有错误。

 

安装需要的命令是:

rpm -Uvh https://dl.Fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

也可以选择下面的这个命令,是一样的效果:

yum install epel-release -y

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

2、清除历史版本

为了防止系统上面发生php冲突,所以,这个命令还是先执行一下更好些:

yum -y remove php*

3、安装扩展包

事实上,这里面的对应扩展库很多,一定要注意的有cli和fpm这两个包,其它的相关包看需要:

yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel php72w-mysql

由于后面要用MySQL,所以mysql包也是需要的。

 

配置MySQL

为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。

网络环境允许的话直接安装:

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

yum -y install mysql57-community-release-el7-10.noarch.rpm

yum -y install mysql-community-server

mysql-community-server较大如果下载很慢,可以到国内镜像源下载:

http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/

下载后解压到图中文件目录下:

注意文件权限,再安装:

 

yum -y install mysql57-community-release-el7-10.noarch.rpm

yum -y install mysql-community-server

mysql有初始默认密码,使用以下命令查找:

grep "password" /var/log/mysqld.log

输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库。

修改密码:

mysql -uroot -p

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

新密码设置的时候如果设置的过于简单会报错, 原因是因为MySQL有密码设置的规范,具体是与validate_password_policy的值有关,可以先尝试大小写加下划线的长密码。

 

MySQL完整的初始密码规则查看

SHOW VARIABLES LIKE 'validate_password%';

可以通过如下命令修改:

mysql> set global validate_password.policy=0;

mysql> set global validate_password.length=1;

之后可以重新设置简单密码。

 

配置SSL

ssl需要以下模块:

修改ssl.conf:

cd /etc/httpd/conf.d

sudo vim ssl.conf 

修改DocumentRoot到自己的网页目录,并更改证书密钥来源为自建CA:

 

网页配置

将需要的网站文件夹复制到/var/www/html/目录下

修改/etc/httpd/conf/httpd.conf文件中的网站文件名:

创建自己网站需要的数据库:

create database myzoo;

use myzoo;

create table Person(PersonID int primary key auto_increment, Password varchar(100),Salt varchar(100),Username varchar(100),Token varchar(100),Zoobars int default 10, Profile varchar(5000));

 

重启httpd查看当前网页:

setenforce  0

sudo systemctl restart httpd

先关闭selinux,不然会报错,服务启动前会验证之前设置的证书密码(网站的那个,不是CA的)。

目前是普通的http连接,因为并没有将自建CA导入浏览器。

 

浏览器导入证书

由于网站的证书是自建CA签名的,浏览器并不信任,所以需要手动导入CA证书。

 

以chrome为例:设置->高级->隐私设置和安全性->管理证书

可以查看证书详细信息和导入自建CA证书

因为之前配置网站证书时设置的域名是localhost,所以需要通过localhost域名进行https连接,不能使用127.0.0.1。

地址栏访问状态出现一把绿色的锁,成功搭建https。

 

 三、任务分配

1.我们组共有22条gmssl需要去注解,standard commands 有9条,每人3条,Message Digest commands 有3条,每人1条,Cipher commands有10条,3 3 4分工

2.CA搭建,分别查找资料,合作对比,得到最佳方案;

3.网站制作,一人制作合适的网页,两人合作完成CA以及其他环境的配置浏览器导入证书。

 

 四、任务的进度安排

1.第一周进行小组讨论,完成任务的理解和初步分工

进行前期资料的搜集,在虚拟机上按照gmssl,基本掌握gmssl的使用方法,和对gmssl命令初步进行注解;

2.第二周完成gmssl命令的研究,提交研究成果

对CA搭建进行尝试,完成颁发证书、签名验签等基本功能;

3.第三周完成OpenSSL搭建的CA,能够模拟用户,查看证书,实现预期功能

准备好网站制作的电脑环境,使用java或者python完成网站的前期制作,利用web知识美化网页;

4.第四周进行CA颁发证书,完成ssl、网页和浏览器的配置,达到安全可靠的访问

 

posted @ 2020-10-18 17:37  regina1st  阅读(479)  评论(0编辑  收藏  举报