一、任务详述
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、网页和浏览器的配置,达到安全可靠的访问