linux下使用openssl生成自签名,配置单向认证,实现https加密请求的方法

转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/80830959
本文出自【我是干勾鱼的博客

我们都知道http请求是明文传输,也就意味着数据交互传输是不安全的,极有可能被截获,也有可能被篡改,使用https请求已经是一个大趋势了。今天就来讲讲通过自签名自己实现https请求的实现方法。

Ingredient:

这里为什么还要使用jdk呢?是因为服务器端经过ca认证的证书,即“crt”类型的文件,生成出来之后,还要在使用openssl命令对其生成一个p12文件,然后就是要使用jdk的“keytool”命令针对这个“p12”类型的文件生成一个keystore类型的文件,此文件是服务器端存放证书的容器。在tomcat的:

{tomcat}/conf/server.xml

文件中,要配置好这个keystore类型文件的位置,因为tomcat在启动时会引用这个文件。

1 制作CA证书(根证书)

创建生成证书的文件夹并进入:

mkdir -p /opt/keys/test
cd /opt/keys/test/

1.1 生成根证书私钥ca.key

openssl genrsa -des3 -out ca.key 2048

输入相应的密码设定,如图所示:

这里写图片描述

1.2 生成根证书公钥ca.crt

openssl req -new -x509 -days 7305 -key ca.key -out ca.crt

这里写图片描述

2 制作服务器端证书

2.1 生成服务器端证书私钥www.test.com.pem

openssl genrsa -des3 -out www.test.com.pem 1024

如图所示:

这里写图片描述

2.2 生成服务器证书的认证请求文件

openssl req -new -key www.test.com.pem -out www.test.com.csr

在common name中填入服务器的域名,如www.test.com即可生成改站点的证书,当然也可以使用泛域名如*.test.com来生成所有二级域名可用的网站证书。如图所示:

这里写图片描述

2.3 使用CA根证书对服务器证书进行签名

openssl ca -policy policy_anything -days 1460 -cert ca.crt -keyfile ca.key -in www.test.com.csr -out www.test.com.crt

这里“-days 1460”表示生成证书为期1460天(4年)。

执行这里的时候会出现如下错误:

Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ca.key:
ca: ./demoCA/newcerts is not a directory
./demoCA/newcerts: No such file or directory

如图所示:

这里写图片描述

网上也有相关文章提到了解决办法,要创建一些文件夹和文件,并在其中输入“01”,代码如下:

mkdir -p ./demoCA/newcerts          //当前路径下创建这两个文件夹
touch ./demoCA/index.txt            //创建index.txt文件
touch ./demoCA/serial               //创建serial文件
echo '01' > ./demoCA/serial         //在serial文件中写入“01”

如图所示:

这里写图片描述

然后在执行创建crt签名文件的命令,就会进入授权签名的命令行,如下图所示:

这里写图片描述

注意两个地方都输入同意:y,然后crt文件就生成了。

2.4 导出.p12文件 server.p12

openssl pkcs12 -export -in ./www.test.com.crt -inkey ./www.test.com.pem -out ./www.test.com.p12 -name "server"

2.5 生成keystore类型文件,并将.p12文件导入

生成一个keystore类型的文件“www.test.com.keystore”,并将.p12类型的文件导入到里面

keytool -importkeystore -v -srckeystore www.test.com.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore www.test.com.keystore -deststoretype jks -deststorepass 123456

这里:

  • srcstorepass后面的123456www.test.com.p12的密码
  • deststorepass后面的123456www.test.com.keyStore的密码

3 配置tomcat的单向认证

对于服务器端(这里就是tomcat了)的单向认证,需要这两个文件:

  • ca.crt:客户端使用的CA根证书
  • www.test.com.keystore:服务端证书存放的容器

3.1 将keystore文件放在合适的位置

首先将:

www.test.com.keystore

放置在服务器的一个合适的位置,这里仍将它放在:

/opt/keys/test/

目录下。

3.2 配置tomcat的server.xml文件

这里需要配置tomcat的server.xml文件,打开tomcat的:

{tomcat}/conf/server.xml

文件,将原有的改为:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               keystoreFile="/opt/keys/test/www.test.com.keystore"
               keystorePass="123456"
               clientAuth="false" sslEnabledProtocols="TLSv1.2"
               ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,
                               TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
                               TLS_RSA_WITH_AES_128_CBC_SHA256,
                               TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
                               TLS_RSA_WITH_3DES_EDE_CBC_SHA,
                               TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />

3.3 启动tomcat

将tomcat服务器启动。

3.4 用https访问网站

可以直接访问域名:

https://www.test.com:8443/

或者配置了hosts文件:

192.168.12.3 www.test.com

之后在访问这个域名。

也可以直接访问ip:

https://192.168.12.3:8443/

注意这里浏览器会自动到服务器下载这个经过CA签名的证书,但是因为不是正式的CA机构颁发的,所以浏览器会任务这个证书是不安全的,如图所示:

这里写图片描述

如果使用正式CA机构认证的证书,这里就会是安全的提示了。

不过虽然标注为“不安全”,但是数据传输也都是经过了加密处理的,直接抓包是看不到明文信息的,也就达到了https请求的目的了。

4 参考

为nginx配置https并自签名证书

linux下Tomcat+OpenSSL配置单向&双向认证(自制证书)

OpenSSL生成证书对

发布了278 篇原创文章 · 获赞 427 · 访问量 161万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览