zoukankan      html  css  js  c++  java
  • Nginx + Tomcat 应用证书启用 SSL

    第一部分 简述

    附:相关概念

    1 Nginx 是什么?

    2 Tomcat 是什么?

    3 SSL 是什么?

        Secure Sockets Layer,现在应该叫“TLS",但由于习惯问题,还是称呼“SSL”较多。

    HTTP 协议默认情况下是不加密内容的,这样就很可能在内容传播的时候被别人监听到,如果安全性要求较高的场合,

    必须要加密,https 就是带加密的http协议,而https的加密是基于SSL的,它执行的是一个比较下层的加密,也就是说,在加密前,你的服务器程序在干吗,加密后也一样在干嘛,不用动,这个加密对用户和开发者来说都是透明的。

        OpenSSL, 简单的说OpenSSL 是 SSL的一个实现, SSL只是一种规范,理论上来说 SSL这种规范是安全的,目前的技术水平很难破解,但SSL的实现就可能有些漏洞。如著名的“心脏出血”。OpenSSL还提供了一大堆强大的工具软件,强大到90%我们都用不到。

    注:心脏出血漏洞: https://jingyan.baidu.com/article/fb48e8be5919136e632e1476.html

    4 证书是什么?

    (1)证书标准

    X.509- 这是一种证书标准,主要定义了证书中应该包含哪些内容,其详情可以参考RFC5280,SSL使用的就是这种证书标准。

    (2)编码格式

    同样的X.509 证书,可能有不同的编码格式,目前有以下两种编码格式。

    PEM - Privacy Enhanced Mail ,打开看文本格式以“-----BEGIN..."开头,“-----END..."结尾,内容是BASE64编码。

    查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout

    Apache 和 *NIX 服务器偏向于使用这种编码格式。

    DER - Distinguished Encoding Rules,打开看是二进制格式,不可读

    查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout

    Java和Windows服务器偏向于使用这种编码格式

    (3)相关的文件扩展名

    这是比较误导人的地方,虽然我们已经知道有PEM和DER这两种编码格式,但文件扩展名并不一定叫”PEM"或者 “DER"

    常见的扩展名除了PEM 和 DER还有以下这些,他们除了编码格式可能不同外,内容也有差别,但大多数都能相互转换编码格式。

    CRT/CER/KEY/CSR/PFX/P12

    4 Keytool 是什么?

    5 openSSL 是什么?

    第二部分 操作过程

    1 创建证书

    keytool -genkeypair -alias spads -keyalg RSA -keystore d:/keys/spadskey

    -genkey 生成密钥对

    -alias  要处理的条目的别名

    -keyalg 密钥算法名称

    -keystore 密钥库名称

    Image

    其中密钥库口令与密钥口令均为 spads2017

    其中 d:/keys/spadskey 中 spadskey 为 keystore名称,也可以这样命名 d:/keys/spads.keystore

    注:需确保生成路径(此处d:/keys)存在,否则在最后一步抛异常

    Image


    2 导出证书(将密钥库导出 crt格式证书文件)

    keytool -export -file d:keys/spads.crt -alias spads -keystore d:/kyes/spadskey

    -export 导出证书

    -file 输出文件名

    -alias 要处理的条目的别名

    -keystore 密钥库名称

    3 为 客户端的JVM导入证书

    keytool -import -keystore D:DevelopToolsJavajdk1.8.0_31jrelibsecuritycacerts -file spads.crt -alias spads

    Image

    注: 执行命令时,输入密钥库口令spads2017,抛出异常java.io.IOException: Keystore was tampered with, or password was incorrect

    解决办法:输入保护密码,默认为 changeit.

    4 导出私钥

    (1)首先将keystore 转换为pkcs12 格式

    keytool -importkeystore -srckeystore D:/keys/spadskey -destkeystore D:/keys/intermediate.p12 -deststoretype PKCS12

    Image

    其中 输入的目标密钥库口令和源密钥库口令均为 spads2017

    (2)之后使用 OpenSSL 导出pem 文件

    openssl pkcs12 -in D:/keys/intermediate.p12 -out D:/keys/extracted.pem –nodes

    Image

    其中输入的 import Password 为 spads2017

    5 应用证书到Tomcat8

    (1) 将生成的密钥库文件、证书文件、key文件 拷贝到 ${catalina.base}/conf/ 目录下


    (2) ${catalina.base}/conf/server.xml 开启 SSL connector

    注释默认的connector

        <!--

        <Connector port="8280" protocol="HTTP/1.1"

                   connectionTimeout="20000"

                   redirectPort="8443" />

        -->

    开启SSL的connector

        <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"

                   maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

                   clientAuth="false" sslProtocol="TLS"

                   keystoreFile="${catalina.base}/conf/spadskey"

                  keystorePass="spads2017"

                  SSLCertificateFile="${catalina.base}/conf/spads.crt"

                  SSLCertificateKeyFile="${catalina.base}/conf/extracted.pem"/>


    6 应用证书到Nginx

    (1)使用pem 转key 命令得到spads.key

    openssl rsa –in d:/keys/extracted.pem –out d:/keys/spads.key

    (2)配置nginx.conf

    image

    (3) 查看效果

    image


    image

  • 相关阅读:
    C++学习9 this指针详解
    福建省第八届 Triangles
    UVA 11584 Partitioning by Palindromes
    POJ 2752 Seek the Name, Seek the Fame
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    HDU 2988 Dark roads(kruskal模板题)
    HDU 1385 Minimum Transport Cost
    HDU 2112 HDU Today
    HDU 1548 A strange lift(最短路&&bfs)
  • 原文地址:https://www.cnblogs.com/driftingshine/p/7601617.html
Copyright © 2011-2022 走看看