搭建本地HTTPS环境

2018-09-27  本文已影响0人  双流小二郎

1. 前言

本地测试一些功能的时候需要HTTPS环境。自己查找资料,完成之后整理归纳为笔记。
搭建本地HTTPS环境只需要简单的两个步骤:

2. 一些基本概念

2.1 HTTPS

HTTPS 是http的扩展,简单来说就是在 HTTP 协议基础上加了一层TLS/ SSL 加密协议。

Hypertext Transfer Protocol Secure (HTTPS) is an extension of the Hypertext Transfer Protocol (HTTP) for secure communication over a computer network, and is widely used on the Internet.[1][2] In HTTPS, the communication protocol is encrypted using Transport Layer Security (TLS), or formerly, its predecessor, Secure Sockets Layer (SSL). The protocol is therefore also often referred to as HTTP over TLS,[3] or HTTP over SSL.
摘自Wikipedia HTTPS

2.2 TLS和SSL

两种保护通信安全和数据完整性的协议,可以当做并列,前后关系。

传输层安全性协议(Transport Layer Security),及其前身安全套接层(Secure Sockets Layer)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。
摘自Wikipedia TLS

2.3 证书

2.3.1 什么是证书

证书由第三方 CA 认证机构颁发,网站所有者向 CA 机构申请证书,证书中包含了公钥、颁证机构、网址、失效日期。如果网站使用假冒证书,浏览器向 CA 认证机构发送证书是否合法的请求,如果检测非法证书,浏览器可以直接断开请求。

简而言之,证书是服务器端和客户端安全通信的凭证。

2.3.2 常见SSL证书格式

根据不同的服务器以及服务器的版本,我们需要用到不同的证书格式,就市面上主流的服务器来说,大概有以下格式:

具体可查看SSL证书格式普及

2.3.3 CSR,KEY和X.509

3. 两种渠道获得SSL证书

3.1 自签

一般本地测试使用这种方法
由于我使用tomcat作为web容器,这里就用java自带keytool工具生成。

3.1.1 cmd输入keytool命令

keytool -genkey -alias cas -keyalg RSA -keysize 2048 
  -keypass changeit -storepass changeit -keystore httptestkian.jks 
-dname "CN=http://httptestkian.com/,OU=httptestkian.com,O=httptestkian,L=httptestkian,ST=httptestkian,C=CN"

使用的参数含义

参数名称 参数含义
-genkey 在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias 产生别名 缺省值”mykey”
-keyalg 指定密钥的算法 (如 RSA DSA(如果不指定默认采用DSA))
-keysize 指定密钥长度 缺省值1024
-keypass 指定别名条目的密码(私钥的密码)
-storepass 指定密钥库的密码(获取keystore信息所需的密码)
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)
-dname 指定证书拥有者信息 例如: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码”

再列一些keytool常用的例子

# 把密钥库导出成证书文件
keytool -export -alias cas.server.com -keystore casServer.keystore -file casServer.crt -storepass changeit
# 查看证书
keytool -printcert -file casServer.crt
# 将创建过的证书导入java的cacerts证书库(需要管理员权限)
# 切换到目录 ${JAVA_HOME}/jre/lib/security
keytool -import -alias cas.server.com -keystore cacerts -file casServer.keystore
# 查看JDK证书内容
keytool -list -v -keystore cacerts -alias cas.server.com
# 根据 alias 别名删除 JDK 证书, JDK证书目录: cd 'C:\Program Files (x86)\Java\jdk1.8.0_172\jre\lib\security\'
keytool -delete -alias cas.server.com -keystore cacerts

如果对命令不熟悉,可以使用在线工具CSR在线生成工具生成

3.JPG
点击KeyTool生成即可获得命令,将命令粘贴到命令行执行即可。
1.JPG

3.2 第三方CA颁发

一般是收费的,但是指定域名一年使用腾讯阿里都可以免费生成,前提条件是你拥有一个域名。
比如说腾讯云,SSL免费购买链接

4.JPG
具体步骤参照官方指引。
购买成功并验证域名之后可下载证书文档,比如说申请的为www.testdomain.com,则下载文件为www.testdomain.com.zip。文件中包含针对IIS,tomcat,nginx等多种web容器适用的证书文件。

4.配置tomcat实现HTTPS

修改conf/server.xml文件

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
  <SSLHostConfig>
     <Certificate certificateKeystoreFile="D:/temp/httptestkian.com.jks" 
certificateKeystorePassword="changeit" type="RSA" />
     </SSLHostConfig>
</Connector>

重启tomcat服务,浏览器中输入https://localhost:8443/cas/login

2.JPG

5. tomcat8配置HTTP自动跳转HTTPS

在conf/web.xml中</welcome-file-list>节点后面添加

<login-config>
    <!-- Authorization setting for SSL -->
    <auth-method>CLIENT-CERT</auth-method>
    <realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
    <!-- Authorization setting for SSL -->
    <web-resource-collection>
        <web-resource-name>SSL</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

6. 结语

如有疑问,欢迎留言共同探讨。

上一篇下一篇

猜你喜欢

热点阅读