web+http学习笔记02

小涛 社区会员 2021-10-29 03:16:00

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

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

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

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

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

这里我们使用两个箭头的都可以,搭建可能会问第一个和第一个大小相差那么大,为什么下载第一个,因为第二个是给专业人员用的,我们只需要下载几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
​
​

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文件带口令的情况)
密钥操作
生成密钥
​
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
非对称加密
签名
​
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

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

...全文
535 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

110

社区成员

发帖
与我相关
我的任务
社区描述
训练、训练、训练!
其他 其他
社区管理员
  • 实训001
  • 非鱼up
  • andy421
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

自律训练,自信挑战!

试试用AI创作助手写篇文章吧