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


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

Ingredient:

*
linux: Ubuntu 18.04 LTS(cat /etc/issue)

*
openssl: OpenSSL 1.1.0g 2 Nov 2017(openssl version -a)

*
jdk:Java SE Development Kit 8u162
<http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html>
(Oracle Java Archive
<http://www.oracle.com/technetwork/java/javase/archive-139210.html>)

*
tomcat:Tomcat 8.5.30 <https://tomcat.apache.org/download-80.cgi>


这里为什么还要使用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 isnot a directory ./demoCA/newcerts: No such file
or directory
如图所示:



网上也有相关文章 <http://blog.sina.com.cn/s/blog_49f8dc400100tznt.html>
提到了解决办法,要创建一些文件夹和文件,并在其中输入“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后面的123456为www.test.com.p12的密码
* deststorepass后面的123456为www.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/ <https://www.test.com:8443/>

或者配置了hosts文件:
192.168.12.3 www.test.com
之后在访问这个域名。

也可以直接访问ip:

https://192.168.12.3:8443/ <https://192.168.12.3:8443/>

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



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

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

4 参考

为nginx配置https并自签名证书 <https://blog.csdn.net/xizaihui/article/details/53178897>

linux下Tomcat+OpenSSL配置单向&双向认证(自制证书) <https://www.jianshu.com/p/045f95c008a0>

OpenSSL生成证书对 <http://blog.sina.com.cn/s/blog_49f8dc400100tznt.html>

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信