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

  • 相关阅读:
    Ubuntu中安装PyCharm2019并破解
    Spark RDD----pyspark第四次作业
    关于“xxx”object is not callable的异常
    sudo: 在加载插件“sudoers_policy”时在 /etc/sudo.conf 第 0 行出错 sudo: /usr/lib/sudo/sudoers.so 必须只对其所有者可写 sudo: 致命错误,无法加载插件
    Hash函数
    数字签名---RSA算法
    中级实训Android学习记录——Activity、Fragment
    中级实训Android学习记录——自定义Dialog、PopupWindow
    中级实训Android学习记录——Toast、AlertDialog、ProgressBar
    unity 3d 七、模型与动画
  • 原文地址:https://www.cnblogs.com/driftingshine/p/7601617.html
Copyright © 2011-2022 走看看