HTTP转HTTPS—使用OpenSSL创建自签名SSL证书以及Tomcat配置SSL证书实战

1 背景

对于api服务器,我们不能让访问者先登录再进行访问这样不安全,也不友好。 http协议没有任何的加密以及身份验证的机制,即时是token认证,也非常容易遭遇窃听、劫持、篡改,因此会造成个人隐私泄露,恶意的流量劫持等严重的安全问题。

1.1 https如何保证安全

HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URI scheme(抽象标识符体系),句法类同http:体系,用于安全的HTTP数据传输。https:URL表明它使用了HTTPS,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。

1.2 身份认证(CA数字证书)

https协议中身份认证的部分是由数字证书来完成的,证书由公钥、证书主体、数字签名等内容组成,在客户端发起SSL请求后,服务端会将数字证书发给客户端,客户端会对证书进行验证,并获取用于秘钥交换的非对称密钥。
数字证书有两个作用:

1)身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。
2)分发公钥。每个数字证书都包含了注册者生成的公钥。在SSL握手时会通过certificate消息传输给客户端。

申请一个受信任的数字证书通常有如下流程:

1)终端实体(可以是一个终端硬件或者网站)生成公私钥和证书请求。
2)RA(证书注册及审核机构)检查实体的合法性。如果个人或者小网站,这一步不是必须的。
3)CA(证书签发机构)签发证书,发送给申请者。
4)证书更新到repository(负责数字证书及CRL内容存储和分发),终端后续从repository更新证书,查询证书状态等。

注册备案过的域名,可以供我们使用,申请SSL证书,需要SSL证书进行认证。SSL证书有很多途径都可以申请,比如国内的阿里云,腾讯云等都是比较方便的,而且还有免费的证书可以申请,都是一年的使用时间。本文中采用的是OpenSLL自签名创建SLL,毕竟是免费的。

2 OpenSLL下载安装

2.1 下载OpenSSL

本次安装是在centos7上安装,首先下载OpenSSL,如果需要window版本(https://oomake.com/download/openssl),我这边下载了openssl-1.1.1d.tar.gz。

2.2 安装OpenSSL

由于我是window10系统,使用Xshell远程Linux系统,需要上传和下载文件,命令安装lrzsz

# yum -y install lrzsz 

安装完成后,可以开始使用 rz(上传)和 sz(下载)指令。

#rz
上传完成后即可依次执行以下指令安装了
# tar -xzf openssl-1.1.1d.tar.gz

# cd openssl-1.1.1d

# mkdir /usr/local/openssl

# ./config --prefix=/usr/local/openssl

# make

# make install

这样就安装完成了,接下来一些辅助步骤。

2.3 创建软连接

# which openssl 
/usr/bin/openssl
为了使用方便,以及以后版本更新方便,可以创建软连接,如下:
# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
此步骤可能会报异常,我就忽略了,如果您能明白,欢迎指导!!!

2.4 执行以下命令

# cd /usr/local/openssl

# ldd /usr/local/openssl/bin/openssl
    linux-vdso.so.1 =>  (0x00007fff7b9e5000)
    libssl.so.1.1 => not found
    libcrypto.so.1.1 => not found
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f7faa7aa000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7faa58e000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f7faa1c1000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7faa9ae000)
    
安装OK

2.5 查看版本

# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

3 创建自签名的SSL证书和私钥

3.1 生成私钥(key文件)

# -genra    生成RSA私钥
# -des3 des3算法
# -out server.key 生成的私钥文件名
# -2048 私钥长度

#openssl genrsa -des3 -out server.pass.key 2048
输入一个4位以上的密码。

3.2 去除私钥中的密码

# openssl rsa -in server.pass.key -out server.key

注意:有密码的私钥是server.pass.key,没有密码的私钥是server.key
在第3.1步创建私钥的过程中,由于必须要指定一个密码。而这个密码会带来一个副作用,那就是在每次Apache启动Web服务器时,都会要求输入密码,这显然非常不方便。所以要删除私钥中的密码。

3.3 生成CSR(证书签名请求)

# -req 生成证书签名请求
# -new 新生成
# -key 私钥文件
# -out 生成的CSR文件
# -subj 生成CSR证书的参数

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=cetc/OU=cetc/CN=gitlab.cetc.cn"

subj参数说明如下:

字段 字段含义 示例
/C= Country 国家 CN
/ST= State or Province 省 Shanghai
/L= Location or City 城市 Shanghai
/O= Organization 组织或企业 cetc
/OU= Organization Unit 部门 wlst
/CN= Common Name 域名或IP wlst.com

3.4 生成自签名SSL证书

# -days 证书有效期

#openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

X.509证书包含三个文件:key,csr,crt。

  • key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
  • csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
  • crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有的公钥,以及签署者的签名等信息
    备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
在这里插入图片描述

4 将.key和.crt文件转换成.jks文件

4.1 先使用openssl 工具 将 crt和key格式的证书转还成pfx:

 #openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

其中:server.pfx (转后的pfx)mycert.key,mycert.crt( crt和key格式的证书)

注意:该步骤需要输入密码passward,该密码2与3均需要用到

4.2 查看证书别名

 #keytool -list -v -keystore server.pfx

4.3 在使用jdk自带的keytool将pfx格式文件转为jks

#keytool -importkeystore -srckeystore  server.pfx -srcstoretype pkcs12 -destkeystore mycert.jks -deststoretype JKS  -alias 1

其中:-alias(设置别名) mycert.jks(转还后jks) server.pfx(需转还的pfx)

注意:该步骤需要输入3次密码,均采用1中的passward。

5 Tomcat配置SSL证书

此处我的Tomcat安装在Windows10系统中;

在Server中配置:

  • 声明开启HTTPS (SSL认证)
  • 声明侦听443端口(并确保已在防火墙上打开443端口)
  • 复制已签名的SSL证书和私钥到指定位置,并设置正确的文件权限
  • 配置已签名的SSL证书(mycert.jks)的位置
  • 配置将HTTP请求都重定向到HTTPS

5.1 将证书mycert.jks拷贝到conf文件夹下。

在这里插入图片描述

5.2 配置server.xml文件,需要修改三个地方

(1)把


在这里插入图片描述

改为:


在这里插入图片描述

其中第一个80端口是为HTTP(HyperText Transport Protocol)即超文本传输协议开放的,此为上网冲浪使用次数最多的协议,第二个443端口是SSL的专用端口;
(2)把
在这里插入图片描述

改为:


在这里插入图片描述

使用443端口的理由同上;
(3)把
在这里插入图片描述

改为:
在这里插入图片描述

首先去掉注释,然后certificateKeystoreFile属性是让你告诉服务器需要哪个SSL证书,后面就填复制过去的那个jks文件的名字(记得带上jks后缀),然后加上certificateKeystorePassword这个属性,后面的属性值是同第4步中的密码。(我全局都用一个密码,免得出错)

这就配置完成server.xml啦。

5.3 启动Tomcat

到bin目录下,双击执行startup.bat

6 在浏览器中访问

在浏览器中打开https://localhost来访问。

在这里插入图片描述

在Firefox浏览器中可以添加Security Exception来忽略HTTPS错误警告。

Chrome浏览器可以尝试通过导入CA证书的方式来忽略HTTPS错误警告。

注意:Chrome浏览器可能有导入CA证书后仍然无法访问的问题;不同浏览器对自签名SSL证书的检查和限制也有所区别。

注意

自签名的SSL证书存在安全隐患,在生产环境上需要购买和使用经权威机构认证和办法的证书。

参考文献
OpenSSL下载安装
使用OpenSSL生成自签名SSL证书
自签名证书生成过程
Tomcat安装SSL证书

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • HTTPS介绍 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩...
    齐滇大圣阅读 8,898评论 8 96
  • 服务器https配置 配置https操作说明文档 1、查看服务器环境配置(tomcat和apache合并使用) 2...
    南京杨小兵阅读 8,800评论 0 9
  • 本文部分摘录于 SSL Shopper,这里提供了大量有价值的信息。 一、证书标准 1、X.509这是一种证书标准...
    舌尖上的大胖阅读 10,532评论 0 11
  • 这几天在医院参加培训课程,想想未来大概一个月或者更久都会在这里,心情很兴奋,但想着孩子一放学便钻进托管,便有些内疚...
    安喜喜阅读 229评论 0 0
  • 十月十七日那天中午,我参加了一个写作群里的一期主题写作比赛,由于参赛人数寥寥无几,我竟然和另一位小伙伴并列第一,我...
    云凌兔阅读 308评论 0 2