1. https单向认证原理
“单向认证”,即“浏览器”验证“服务器”的证书是否合法,从而判断正在访问的网站是否可信。这也是当前网络上最常用的认证方式,GitHub、Google、Twitter、Facebook等均采用此种方式。
“单向认证”的两个通信实体如下
他们之间的通信过程如下
下面给出简要的文字说明
- 客户端访问服务器
- 服务器响应客户端,发送服务器证书给客户端
- 客户端查询“受信任根证书颁发机构”,验证服务器证书
- 客户端验证完服务器证书,生成“密钥对”及会话密钥,与服务器协商会话密钥
- 会话密钥协商完成,开始安全加密通信
2. 准备证书
证书需要准备两个
- 服务器证书(tomcat为jks格式)
- CA根证书
服务器证书用于浏览器验证服务器身份,CA根证书只是为了让浏览器信任服务器证书。生成服务器证书的方式很多,keytool、openssl、ejbca都可以,具体过程参考我的其他帖子,这里不赘述。我生成的服务器证书名为“tomcat-win.jks”,CA根证书名称是“ruxueCA.crt”。
3. 配置tomcat
编辑tomcat/conf目录下的“server.xml”,找到如下内容,如被注释,请去掉注释
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="D:\Download\tomcat-win.jks" keystorePass="123456" />
配置好证书路径和访问密码,启动tomcat。
3. 浏览器访问
浏览器输入https://localhost:8443,出现如下错误,点击“继续浏览此网站(不推荐)”
可以正常访问tomcat,但出现证书错误提示
点击“证书错误”,出现如下信息
这是因为这个证书是CA颁发给“win.ruxue.online”网站的,而我们访问的域名是“localhost”。修改C:\Windows\System32\drivers\etc目录下的hosts文件,添加如下一行信息。
127.0.0.1 win.ruxue.online
在浏览器中输入https://win.ruxue.online:8443,依然出现“此网站的安全证书出现问题”的错误提示,同上,点击“证书错误”查看,发现这次的错误不同了。
这是因为浏览器“受信任根证书颁发机构”中并没有颁发“tomcat-win.jks”证书的CA机构信息,浏览器因此认为这个证书有问题,此时我们需要在浏览器的“受信任根证书颁发机构”导入CA根证书“ruxueCA.crt”。
导入成功之后再访问https://win.ruxue.online:8443
没有任何问题了,点击那把绿色的锁,可以看到这个网站的安全证书信息。