WHCSRL 技术网

https学习笔记02

怎样给一个网站办法安全证书呢?以tomcat为例,我们正常访问localhost:8080都是不安全的网站,那么怎样使得这个网站安全呢?

首先我先全局说一下,我们需要先下载openssl,然后使用openssl下载和配置我们需要的证书,也就是证书三件套,配置本地的CA证书,Server证书以及Client证书!到时候你就发现三种证书配置的方式差不多

接下来正式开始从第一部讲解:首先下载openssl,下载的方式有两种,一种是源码自己配置,还有一种是大牛给你配好了.exe执行文件,我们无脑next就好:

http://slproweb.com/products/Win32OpenSSL.html
  • 1

请添加图片描述
在这里插入图片描述

这里我们使用两个箭头的都可以,搭建可能会问第一个和第一个大小相差那么大,为什么下载第一个,因为第二个是给专业人员用的,我们只需要下载几MB的就好,我选择的是1.1.1这个版本,至于为什么不选3.0.0等等说

下载好了之后,我们需要安装在自己的目录:

请添加图片描述

然后为其添加环境变量:(系统变量下面的PATH)

在这里插入图片描述

然后再cmd里面:openssl version

请添加图片描述

下一步我们找到我们的openssl安装位置,右键点击openssl.exe,以管理员身份运行!(就是这里我第一次下载3.0.0每次一点这个.exe就一闪而过…还不知道怎么解决)请添加图片描述

然后就是一顿固定操作:(温馨提示:在你配置到下面有三步都是生成文件那个,你必须生成一个然后quit退出重新打开.exe生成一个然后再退出再打开!不知道为啥)

1:生成服务端私钥:genrsa -out server.key 1024请添加图片描述

2:生成服务端公钥:rsa -in server.key-pubout -out server.pem 请添加图片描述

3:生成客户端公钥:rsa -inclient.key -pubout -out client.pem

4:生成CA私钥:genrsa -out ca.key 1024

5:生成CA请求文件:opensslreq-new-keyca.key-outca.csr

请添加图片描述

注意:

State、Organization相关内容在生成客户端和服务器端证书的时候
也需要填写,但不要写成一样的,可以随意写如:myca,、myse,、mycl 
CommonName这一项,是最后可以访问的域名,因为是在本机,所以写成localhost,后面生成客户端和服务器端证书的时候也需要 写成localhost


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6:生成CA证书:x509 -req -inca.csr -signkey ca.key -out ca.crt

7:生成服务端请求文件: req -new -key server.key -out server.csr

8:向自己的CA机构申请证书,签名过程需要CA的证书和私钥参与,最终颁发一个带有CA签名的证书:x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -inserver.csr -out server.crt

9:生成客户端请求文件:req -new -key client.key -out client.csr

10:同样向CA机构申请证书:x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -inclient.csr -out client.crt

请添加图片描述
请添加图片描述
请添加图片描述

11:转化为.p12格式的文件pkcs12 -export -in ca.crt -inkey ca.key -out ca.p12

12:导出server.p12格式文件:pkcs12 -export -in server.crt -inkey server.key- out server.p12

导出client.p12格式文件:pkcs12 -export -in client.crt -inkey client.key -out client.p12

13:将server.p12文件转化为jks文件:keytool -importkeystore -keyalgEC -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12

请添加图片描述

通过上面的步骤我们会得到server.jks请添加图片描述

差不多生成了这么多东西,然后我们将server.jks拷贝到tomcat的conf文件夹下,然后修改一下server.xml:

请添加图片描述
在这里插入图片描述

改成这个样子以后,我们将生成的ca.p12和client.p12分别导入浏览器:我以chorm为例:

红箭头标注的是几个需要注意的点:

请添加图片描述

请添加图片描述
请添加图片描述

其实这里我多了一步就是windows+R键输入mmc:然后将两个localhost拖到受信任的根证书颁发机构下面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后再谷歌访问https//localhost:8443:

请添加图片描述

使用ie访问:

请添加图片描述

成功!

常用的openssl命令:

格式转换

PEM私钥转PKCS#8

openssl pkcs8 -topk8 -in mysite.key -out mysite.pk8 -outform PEM

PKCS#8转PEM

openssl rsa -in mysite.pk8 -out mysite.key

PEM转PKCS12

openssl pkcs12 -export -inkey mysite.key -in mysite.pem -nodes -out mysite.p12(输出不带口令的p12证书)

openssl pkcs12 -export -inkey mysite.key -in mysite.pem -passout pass:123456 -out mysite.p12 (输出带口令的p12证书)

P12转证书

openssl pkcs12 -in mysite.p12 -nokeys -out mysite.pem

openssl pkcs12 -in mysite.p12 -nokeys -passin pass:123456 -out mysite.pem (p12文件带口令的情况)

P12转私钥

openssl pkcs12 -in mysite.p12 -nocerts -nodes -out mysite.key (输出不加密的私钥)

openssl pkcs12 -in mysite.p12 -nocerts -passout pass:123123 -out mysite.key (输出加密后的私钥)

openssl pkcs12 -in mysite.p12 -nocerts -passin pass:123456 -passout pass:123123 -out mysite.key (p12文件带口令的情况)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
密钥操作
生成密钥

genrsa

openssl genrsa -out rsa.key 2048(私钥不带密码)

openssl genrsa -out rsa.key -aes256 -passout pass:123456 2048(私钥带密码)

ecparam

openssl ecparam -name CN-GM-ECC -out sm2.param

openssl ecparam -in sm2.param -out sm2.key -genkey -noout

genpkey

openssl genpkey -algorithm RSA -out rsa.key -pkeyopt rsa_keygen_bits:2048

openssl genpkey -parafile sm2.param -out sm2.key

``

不带密码的私钥==>带密码的私钥

openssl rsa -in rsa.key -out xxx.key -aes256 -passout pass:123456

openssl ec -in sm2.key -out xxx.key -sm4 -passout pass:123456

带密码的私钥==>不带密码的私钥

openssl rsa -in xxx.key -passin pass:123456 -out yyy.key

openssl ec -in xxx.key -passin pass:123456 -out yyy.key

pkey加解密私钥

openssl pkey -in rsa.key -out rsa_enc.key -des3 -passout pass:1234

openssl pkey -in rsa_enc.key -out rsa.key -passin pass:1234

从密钥对提取公钥

openssl rsa -in chen.key -pubout -out chen_pub.key
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
非对称加密
签名

openssl pkeyutl -sign -inkey rsa.key -in rsa.dat -out sign.dat

验签

openssl pkeyutl -verify -certin -inkey rsa.pem -in rsa.dat -sigfile sign.dat

openssl pkeyutl -verify -inkey rsa.key -in rsa.dat -sigfile sign.dat

加密

openssl pkeyutl -encrypt -inkey rsa.key -in rsa.dat -out enc.dat

解密

openssl pkeyutl -decrypt -inkey rsa.key -in enc.dat -out source.dat

pkcs7
签名

openssl smime -sign -in short.dat -signer rsa.pem -inkey rsa.key -out rsa.sig -outform PEM -nodetach -binary -md sha256

验签

openssl smime -verify -CAfile rsa-ca.pem -signer rsa.pem -in rsa.sig -inform PEM -noverify -content short.dat -binary

加密

openssl smime -encrypt -sha1 -in long.dat -outform PEM -out rsa.env -binary rsa.pem

解密

openssl smime -decrypt -in rsa.env -out rsa.plain -inkey rsa.key -inform PEM -binary
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

这个任务也是自己很用心的去解决问题,得出的结论就是,你要用用于尝试,不要害怕这个指令对不对,只要记录好自己的每一步,就渐勇敢往前冲,感觉出错到了无法挽回的地步就全部卸载删除,重新换一个版本继续,通过最近这几次的任务,我发现我逐渐自信起来,遇到问题居然一点点也不慌,哪怕完全没有头绪想了很久很久,我心里一直有一种神秘的直觉就是:我一定会解决这个问题是,只不过需要一点点时间!加油吧!

推荐阅读