小组成员姓名
20181330 王茜
20181334 张怡杰
20181335 张耀元
指导教师:娄嘉鹏
一、设计方案及可行性分析
经过小组讨论,本次课程设计的设计方案如下:
通过openssl搭建CA,并且搭建网站,用CA给搭建的网站颁发证书。
具体设计方案为:
1、通过Openssl --help列出命令,分工掌握不同命令,以及其支持的权限和不同场景下使用的参数,并写成书面形式。
2、用openssl搭建CA系统。了解并实现颁发证书以及给证书签名。
3、搭建网站。
4、给搭建的网站颁发安全证书。
任务要求是:
通过openssl搭建CA,并且搭建网站,用CA给搭建的网站颁发证书。
具体要求:
1、搭建CA
2、颁发证书。
3、搭建网站。
4、在浏览器中导入证书,并能使用https正常打开网页。
二、详细设计思路
2.1 系统体系结构,技术选择
在本次课程设计中,我们使用Windows系统下进行颁发证书,在Linux系统下进行证书的撤销,选择使用openssl命令搭建CA系统,以及进行证书的颁发和撤销。
在搭建网站部分中,我们使用了html语言、jss语言等进行搭建。
2.2 关系模块
具体实现:
1)安装Git,会自动安装 OpeenSSL软件包。
通过执行 Git下面的 Bash 命令,在命令行窗口中输入 openssl命令可以进行Openssl操作界面。
2)使用Openssl命令生成证书。
1、输入genrsa -out xxx.key 2048,生成 2048位的 RSA密钥对,并且将它存放在 xxx.key文件中。
xxx.key是用户的私钥,要保存好放在指定的位置。
输入genrsa使用默认的RSA会把密钥输出到stdout。
输入req -new -out xxx.csr -key xxx.key创建证书请求,在生成过程中要输入一些其他的信息,如下图所示,会生成csr文件——证书请求文件。
输入 x509 -req -in westwood.csr -out westwood.crt -signkey westwood.key -days 3650 命令,创建一个通过xxx.key签名后生成有效其10年的证书xxx.crt。
涉及到的openssl具体命令解释如下:
1)genrsa命令。
主要功能:生成RSA私有密钥的工具。
用法:openssl genrsa [-out filename] [-passout arg] [-f4] [-3][-rand file(s)] [-engine id] [numbits] [-des] [-des3] [-idea]
选项说明:
-out filename:私有密钥输出文件名,缺省为标准输出。
-passout arg:输出文件口令保护存放方式。
-f4:指定E为0x1001;
-3:指定E为3;
-rand file(s):随机种子。
-engine id:硬件引擎。
numbits:生成密钥的位数。必须是本指令的最后一个参数。如果没有指明,则产生512bit长的参数。
2)req命令。
主要功能:生成证书请求文件, 查看验证证书请求文件,还有就是生成自签名证书。
选项说明:
-new:说明生成证书请求文件
-x509:说明生成自签名证书
-key:指定已有的秘钥文件生成秘钥请求,只与生成证书请求选项-new配合。
-newkey :-newkey是与-key互斥的,-newkey是指在生成证书请求或者自签名证书的时候自动生成密钥,然后生成的密钥名称由-keyout参数指定。当指定newkey选项时,后面指定rsa:bits说明产生rsa密钥,位数由bits指定。 如果没有指定选项-key和-newkey,默认自动生成秘钥。
-out :-out 指定生成的证书请求或者自签名证书名称。
-config:默认参数在ubuntu上为 /etc/ssl/openssl.cnf, 可以使用-config指定特殊路径的配置文件。
-nodes:如果指定-newkey自动生成秘钥,那么-nodes选项说明生成的秘钥不需要加密,即不需要输入passphase。
-batch:指定非交互模式,直接读取config文件配置参数,或者使用默认参数值 本文就主要记录一下openssl命令选项的意义,并记录一下简单的命令示例。
3)x509命令。
主要功能:输出证书信息,签署证书请求文件、生成自签名证书、转换证书格式等。
选项说明:
-in filename : 指定证书输入文件,若同时指定了"-req"选项,则表示输入文件为证书请求文件。
-out filename : 指定输出文件
-md2|-md5|-sha1|-mdc2:指定单向加密的算法。
查看证书选项:
-text:以text格式输出证书内容,即以最全格式输出,包括public key,signature algorithms,issuer和subject names,serial number以及any trust settings.
-certopt option:自定义要输出的项
-noout:禁止输出证书请求文件中的编码部分
-pubkey :输出证书中的公钥
-modulus:输出证书中公钥模块部分
-serial:输出证书的序列号
-subject:输出证书中的subject
-issue:输出证书中的issuer,即颁发者的subject
-subject_hash:输出证书中subject的hash码
-issuer_hash:输出证书中issuer(即颁发者的subject)的hash码
-hash:等价于"-subject_hash",但此项是为了向后兼容才提供的选项
-email:输出证书中的email地址,如果有email的话
-startdate:输出证书有效期的起始日期
-enddate:输出证书有效期的终止日期
-dates:输出证书有效期,等价于"startdate+enddate"
-fingerprint:输出指纹摘要信息
3)Tomcat启用https协议配置,使用生成的证书。
在tomcat的conf目录下对server.xml目录进行如下配置:
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="${catalina.base}\conf\westwood\westwood.crt"
SSLCertificateKeyFile="${catalina.base}\conf\westwood\westwood.key"
SSLPassword="123456"/>
此时还需要注释掉8440端口,否则8443端口无法正常运行。
重新启动服务器能发现8443端口已经被打开,如下图所示:
4)对网站进行测试。
将写好的web工程放在tomcat的webapps的目录下,在浏览器中导入并且信任生成的证书,打开发现可以正常运行,如下图所示。
5)吊销证书。
客户端向CA申请证书
在node2服务器中⽣成私钥, 在node2中利⽤私钥⽣成ca证书申请请求⽂件
给app.csr签署证书
查看签署过的证书
在node1中查看签署过的证书,并将证书吊销,并在在node1中⽣成吊销通知证书
2.3测试目的、测试内容、测试结果并对结果进行分析
测试目的:验证在浏览器中导入颁发的证书后,能否正常访问搭建的网站,而不会提示不安全信息。
测试内容:
1、进入8443端口。
2、打开简单的html文件。
3、打开复杂的web项目。
测试结果:导入证书后,浏览器可以正常打开网页并不提示不安全信息。
对结果进行分析:
结果与预期相同。但在实践过程中,我们发现,IE浏览器,Edge浏览器是可以直接认证根证书的,而对于火狐浏览器、chrome浏览器无法认真根证书,需要使用生成的根证书再次生成子证书进行认证才不会提示不安全连接的信息。
三、设计特色
利用openssl实现证书颁发
web项目由自己编写,且美观使用
四、源代码及注释
具体命令已在二、详细设计思路中给出。
网站代码链接:https://gitee.com/Wangqian20181330/curriculum-design-group-5/tree/web
五、个人报告
20181330-王茜:https://www.cnblogs.com/wangqianhey/articles/13942544.html
20181334-张怡杰:https://www.cnblogs.com/zyj2000/p/13944156.html
20181335-张耀元:https://www.cnblogs.com/20181335ZYY/p/13943513.html