java密码技术(*) - HTTPS双向加密

常见的https站点都是客户端用服务端提供的证书验证服务端的签名,确认自己访问的站点不是伪造的。同样的,服务端也可以添加客户端提供的公钥证书,用来验证客户端的身份。流程同上,客户端用私钥签名后,服务端用客户端的公钥证书验签。
下面我用tomcat-8.5.64来演示一下如何配置基于tomcat的自签名证书的https双向认证。

生成服务器端和客户端的密钥对

首先生成两个密钥对,一个给服务端使用(也就是tomcat),一个给客户端使用(也就是浏览器端)。我们用JDK提供的keytool工具来生成密钥对。

>keytool -genkeypair -alias server -keyalg RSA -validity 365 -storetype PKCS12 -keystore tomcat-key.p12 -storepass 123456 -dname "CN=tomcat-site.com,OU=tomcat,O=mytomcat,L=chengdu,S=sichuan,C=CN"

用同样的方式再生成客户端的密钥对。

>keytool -genkeypair -alias client -keyalg RSA -validity 365 -storetype PKCS12 -keystore client-key.p12 -storepass 123456 -dname "CN=client-site.com,OU=my,O=myclient,L=chengdu,S=sichuan,C=CN"

从客户端的密钥库中导出公钥证书,把这个证书提供给服务端,服务端需要将它添加到自己的信任证书库中。

>keytool -exportcert -alias client -file client.cert -keystore client-key.p12 -storepass 123456

执行上一条命令得到客户端证书文件client.cert。为了方便tomcat的配置,直接将这个证书导入一个空的密钥库。

>keytool -importcert -alias client -file client.cert -keystore server-trust.p12 -storetype PKCS12 -storepass 123456

配置tomcat

将服务端密钥库和信任密钥库考到tomcat的conf目录中,这个不是必须的,复制过去只是为了方便配置和管理,也可以在tomcat中配置这两个密钥库的绝对路径。
tomcat默认是没有开启https的,我们在conf目录里面找到server.xml并用文本编辑器打开它。找到被注释掉的SSL/TLS HTTP/1.1 Connector,如下图所示:


server.xml

取消这个connector的注释。将服务端密钥库配置在Certificate节点中。

<Certificate certificateKeystoreFile="conf/tomcat-key.p12"
             certificateKeystorePassword="123456"
             type="RSA" />

certificateKeystoreFile配置的就是密钥库的位置,由于我们把它拷贝到了conf目录中,所以我们只需配置它的相对路径就可以了。certificateKeystorePassword指定密钥库的密码。type指定密钥库的类型。我们生成的时候指定的类型是RSA,所以这里也配置为RSA就可以了。这样配置好以后,单向的https就成功了,我们可以启动tomcat试一试。在浏览器中输入https://localhost:8443

浏览器(图1)

看到的结果如上图所示,因为我们使用的是自签名的密钥库,所以不受浏览器的信任,我们点击“高级”:
浏览器(图2)

然后点击“继续前往localhost(不安全)”:
浏览器(图3)

打开了tomcat的管理页面。左上角有个“不安全”的提示,提示这个的原因同上,我们的服务端密钥库是自签名的,响应给浏览器的证书也是自签名的,不受浏览器信任。
接着我们继续配置双向的https。单向是服务端向客户端提供自己的证书,客户端用此证书验证服务端的身份,双向的话就是还需要客户端向服务端提供证书,服务端用这个证书来验证客户端的身份。服务端这边的话就只需要把我们刚才生成的第三个密钥库(导入了客户端证书的那个)配置到tomcat中。这个需要配置到SSLHostConfig节点上。完整的connector的配置如下:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig truststoreFile="conf/server-trust.p12" truststorePassword="123456" certificateVerification="required">
            <Certificate certificateKeystoreFile="conf/tomcat-key.p12"
                         certificateKeystorePassword="123456"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

truststoreFile就是配置的客户端证书所在的密钥库,truststorePassword配置的是该密钥库的密码,而certificateVerification配置为"required"表示必须进行客户端身份验证。配置完毕后我们重新启动tomcat,然后尝试访问它。得到如下图所示的页面:


浏览器(图4)

这是因为客户端密钥库还没有配置导致的。客户端用密钥库中的私钥签名后,服务端才能用我们刚才配置的受信任密钥库中的客户端证书进行验证。我使用的是chrome浏览器,打开浏览器的“设置”页面,点击左侧的“隐私设置和安全性”菜单,


浏览器(图5)

然后点击上图红框中的“安全”,进入如下图所示页面:
浏览器(图6)

往下滚动页面,找到“管理证书”:


浏览器(图7)

点击右侧红框中的箭头,弹出如下图所示的windows系统证书管理界面:


证书设置(图1)

然后点击“导入”按钮,进入证书导入向导:
证书设置(图2)

点击“下一步”,进入如下图所示界面:
证书设置(图3)

点击“浏览”,选择我们刚才生成的客户端密钥库文件:


证书设置(图4)

然后点击“下一步”:
证书设置(图4)

输入密钥库的密码,并且勾选“启用强私钥保护”复选框,点击“下一步”:
证书设置(图6)

默认证书存储的位置是个人,我们不用改变它,直接点击“下一步”:
证书设置(图7)

最后点击“完成”:
证书设置(图8)

会弹出如上图所示的一个提示框,我们不管它,直接点击“确定”,然后会弹出导入成功的提示框,表示客户端的密钥库已经配置完毕,这时我们再次尝试访问页面:
浏览器(图8)

浏览器会弹出一个如上图所示的提示框,我们选中刚才配置的密钥库,然后点击确定,此时还会弹出一个提示框:


浏览器(图9)

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

推荐阅读更多精彩内容