美文网首页
搭建本地HTTPS环境

搭建本地HTTPS环境

作者: 双流小二郎 | 来源:发表于2018-09-27 17:19 被阅读0次

    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在线生成工具生成

    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. 结语

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

    相关文章

      网友评论

          本文标题:搭建本地HTTPS环境

          本文链接:https://www.haomeiwen.com/subject/izneoftx.html