搭建本地HTTPS环境
1. 前言
本地测试一些功能的时候需要HTTPS环境。自己查找资料,完成之后整理归纳为笔记。
搭建本地HTTPS环境只需要简单的两个步骤:
- 生成或购买SSL证书
- 将证书导入web容器开启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证书格式
根据不同的服务器以及服务器的版本,我们需要用到不同的证书格式,就市面上主流的服务器来说,大概有以下格式:
- .DER .CER,文件是二进制格式,只保存证书,不保存私钥。
- .PEM,一般是文本格式,可保存证书,可保存私钥。
- .CRT,可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥。
- .PFX .P12,二进制格式,同时包含证书和私钥,一般有密码保护。
- .JKS,二进制格式,同时包含证书和私钥,一般有密码保护。
具体可查看SSL证书格式普及。
2.3.3 CSR,KEY和X.509
- CSR 是Certificate Signing Request的缩写,即证书签名请求,这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。
- KEY 通常指私钥
- X.509 是一种证书格式.对X.509证书来说,认证者总是CA或由CA指定的人,一份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在线生成工具生成
点击KeyTool生成即可获得命令,将命令粘贴到命令行执行即可。
1.JPG
3.2 第三方CA颁发
一般是收费的,但是指定域名一年使用腾讯阿里都可以免费生成,前提条件是你拥有一个域名。
比如说腾讯云,SSL免费购买链接
具体步骤参照官方指引。
购买成功并验证域名之后可下载证书文档,比如说申请的为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
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. 结语
如有疑问,欢迎留言共同探讨。