基于gmssl的CA系统构建及应用-个人报告
基于gmssl的CA系统的构建及应用 20181217陈少卿
一、贡献
第一周:完成对七条指令的详细解释(详情可见蓝墨云提交的第一周报告!码云链接)
第二周:完成自制网页以及阿里云网站搭建(后续种种原因,最后转战本地)网站源码码云托管链接
第三周:①在本地tomcat下面搭建一个自己的网站并实现安装简单证书(采用三条指令进行证书颁发)
②http到https的转化(可见蓝墨云第三周报告,码云链接)
第四周:1.实现http(80、8080端口)跳转到443端口
2.编写小组汇编CA系统设计。
3.①自己充当CA机构给自己本地localhost颁发证书、并实现证书的吊销
②小组队员1205和1210分别充当CA机构给自己192.168.43.99颁发证书
③自己充当CA机构给小组队员刘波影、张一凡颁发证书,并实现证书的吊销
4.编写个人报告
----总流程(eg:给自己的192.168.43.98颁证书)
二.基本原理和实现:
①基本原理
PKI: Public Key Infrastructure
签证机构:CA (Certificate Authority)
注册机构:RA
证书吊销列表:CRL
获取证书两种方法:
1.使用证书授权机构
生成签名请求(csr)
将csr 发送给CA
从CA 处接收签名
2. 自签名的证书
自已签发自己
②实现:
1、原理介绍: 我们以A端为CA机构,B端是申请证书的公司 2、A端自签证书,自签证书之前我们要,了解查看配置文件的说明 vim openssl.cnf,会告诉我们怎么自签证书,要求我们创建的东西放在哪些目录下。
3、申请证书时,要填写的必要信息
3、B端证书申请及签署步骤: ① 生成申请请求 ② RA 核验 ③ CA 签署 ④ 获取证书
1、创建所需要的文件(如果不创建,后边操作会出错)
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# touch index.txt 生成证书索引数据库文件
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# echo 99 > serial 指定第一个颁发证书的序列号
2、CA 自签证书
① 生成私钥(输入自己的密码)
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# mkdir private
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# (umask 066; openssl genrsa -out private/cakey.pem -des3 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
.............+++++
.......................................................................................................................................................................+++++
e is 65537 (0x010001)
Enter pass phrase for private/cakey.pem:
Verifying - Enter pass phrase for private/cakey.pem:
可以加密,也可以不加密,加过密,后边每次都要输入,为了试验方便就不加密了,但加密更安全
tree 可以看到cakey.pem 生成了
② 生成自签名证书
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# openssl req -new -x509 -key ./demoCA/private/cakey.pem -days 7300 -out ./demoCA/cacert.pem
(req申请、-x509自签名、cacert.pem)
req:请求申请证书
-new: 生成新证书签署请求
-x509: 专用于CA 生成自签证书
-key: 生成请求时用到的私钥文件
-days n :证书的有效期限
-out / PATH/TO/SOMECERTFILE : 生成私钥证书的保存路径
③ 查看
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# cat cacert.pem生成的证书文件
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# openssl x509 -in cacert.pem -noout -text (-text:生成的证书)
将证书转化为cert形式
openssl x509 -outform der -in cacert.pem -out cacert.crt
四、B客户端申请证书
1、B 生成私钥
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# mkdir mimi
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# cd mimi
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/mimi# (umask 066;openssl genrsa -out service.key 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
............+++++
...........................................................................................+++++
e is 65537 (0x010001)
2、利用私钥生成证书请求文件, 在需要使用证书的主机生成证书请求
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/mimi# openssl req -new -key service.key -days 3650 -out service.csr
五、A端,签署证书
1、为了方便管理,创建一个专门放请求的目录,把请求都放在这个目录下,不是必须的
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# mv ../mimi/service.csr csr
2、CA 签署证书,并将证书颁发给请求者
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# openssl ca -in ./demoCA/csr/service.csr -out ./demoCA/certs/service.crt -da
ys 1000
注意:默认国家,省,公司名称三项必须和CA一致
签署后:会生成更新一些文件
3、查看证书中的信息:
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# openssl x509 -in certs/service.crt -noout -text
openssl ca -status 99 查看指定编号的证书状态
配置tomcat和网页:
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# cd ..
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# mv demoCA ../
客户端B转化成p12格式:(输入自己的密码)
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps/demoCA# openssl pkcs12 -export -clcerts -in certs/service.crt -inkey ../mimi/service.key -out certs/service.p12
Enter Export Password:
Verifying - Enter Export Password:
导入浏览器
效果展示
六、吊销证书
1、在客户端(A端)获取要吊销的证书的serial(编号)
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# openssl x509 -in ./demoCA/certs/service.crt -noout -serial -subject
2、在CA(B端) 上,根据客户提交的serial 与subject 信息,对比检验是否与index.txt 文件中的信息一致,确认就吊销证书:
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# openssl ca -revoke ./demoCA/newcerts/99.pem
3、指定第一个吊销证书的编号
注意:第一次更新证书吊销列表前,才需要执行
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# echo 01 > ./demoCA/crlnumber
4、更新证书吊销列表,将来将吊销的列表放到互联网上,让大家知道
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# openssl ca -gencrl -out ./demoCA/crl/crl.pem
5、查看crl 吊销文件:
root@LAPTOP-LNFPC4GC:/mnt/e/chen/openssl-1.1.1-pre5/apps# openssl crl -in ./demoCA/crl/crl.pem -noout -text
也可以在windows上查看,sz发到windows上,后缀改为.crl
好了,有关CA证书的东西就这些了。
三、遇到的困难以及解决问题的方法
①一开始对openssl完全不了解,也不知道应该如何使用它,通过网上不断的查阅资料,逐渐了解,并能熟练地写出小组分配七条指令的相关例子
参考网址:①https://blog.csdn.net/xjhhjx/article/details/81588301?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduend~default-3-81588301.nonecase&utm_term=openssl%20%E6%9F%A5%E7%9C%8B%E6%94%AF%E6%8C%81%E7%9A%84%E7%AE%97%E6%B3%95&spm=1000.2123.3001.4430②https://blog.csdn.net/oncealong/article/details/82785447③https://www.cnblogs.com/gordon0918/p/5317701.html④https://www.cnblogs.com/yangxiaolan/p/6256838.html
②不知道如何搭建网站,通过不断查阅资料,知道应该下载tomcat并进行配置(将文件夹放在webapps下面),此时http://localhost:8080/XXX就可以对网站进行访问。
参考网址:https://blog.csdn.net/menofgod/article/details/78283167
eg:
此时访问http://localhost:8080/donggong就可以得到网站
③不知道如何将http怎么变成https.通过上网不断查资料,第一种8443,每次登陆网站时,都要写上8443端口。第二种443,每次登陆网站,可以省略端口。
方法:自己制作一个证书,将证书格式转化为p12格式,并将证书的p12格式所在位置添加到tomcat下的server.xml中的 keystoreFile中,并将keystorefile改为pkcs12。
举例:(改成443)
参考网页版:https://zhidao.baidu.com/question/268640171635657085.html
https://jingyan.baidu.com/article/2d5afd6933a07b85a2e28e9d.html
④不知道如何将http直接跳转为https。上网不断查询资料,可以知道很简单,只需修改server.xml以及web.xml。
eg:
server.xml
web.xml
⑤不知道如何颁发证书,如何吊销证书,如何查看证书序列号、如何给自己和其他人颁发证书。
参考网址:https://deepzz.com/post/based-on-openssl-privateCA-issuer-cert.html
https://www.cnblogs.com/along21/p/7595912.html
⑥不知道怎么装gmssl,本来想安装gmssl,但是说要与openssl交叉编译,会造成openssl某些功能的缺失和崩溃,于是果断选择放弃了。但其实gmssl是openssl一个小分支,用openssl也是一样的 。
⑦手机访问tomcat的localhost页面时,显示访问不了。解决方法:开防火墙。
四.设计体会与收获:
在这个过程中收获了很多,从openssl简单的几条命令入手,到后来的在本地tomcat上面搭建网站,再到学习给网站颁发证书,一步一个脚印。一开始,只会简单的颁发证书(三步走),并没有实现吊销证书,更新证书序列号等等。再到后来参考其他文献,了解应该根据openssl.cnf,找到正确的路径,再进行证书的颁发。这时候任何小地方的失误,都可能源于路径的选择错误,需要到正确的路径下执行正确的命令。我觉得最为重要的是,小组合作发挥了绝对优势,大家一起取长补短,共同进步,互相充当对方的CA,分别给另外两人颁发证书,并在自己的电脑上验证证书的正确性(导入tomcat和ie浏览器进行观察),结果无一例外的证明均成功了。