Nginx + Tomcat 8.5 启用SSL HTTPS

2023-05-16

一、申请SSL证书

阿里云申请证书   图文教程:http://www.chinaz.com/web/2017/0105/639110.shtml

腾讯云申请证书

二、Nginx 配置SSL

server {
		listen                           443;
		server_name                      localhost;
		ssl                              on;
		ssl_certificate                  cert/xxx.pem;
		ssl_certificate_key              cert/xxx.key;
		ssl_session_timeout              5m;
		ssl_ciphers                      ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
		ssl_protocols                    TLSv1 TLSv1.1 TLSv1.2;
		ssl_prefer_server_ciphers        on;
}
其他配置可以参考nginx官网

80端口重定向到 443 端口配置如下:

server {
        listen          80;
        server_name     localhost;
        rewrite ^(.*)$  https://$host$1 permanent;
    }

可能的问题:

1. Nginx 没有启用SSL模块:

报错:

./configure: error: the HTTP cache module requires md5 functions
 
from OpenSSL library.  You can either disable the module by using
 
--without-http-cache option, or install the OpenSSL library into the system,
 
or build the OpenSSL library statically from the source with nginx by using
 
--with-http_ssl_module --with-openssl=<path> options.

解决办法:

1. 安装openssl 和 openssl-devel

 yum -y install openssl openssl-devel

2. 如果已经安装了,但还是报错,则可以使用参数指定openssl源码路径

 ./configure --with-http_v2_module --with-http_ssl_module--with-openssl=/work/openssl-1.0.2n

3. Nginx升级可以使用如下方式:

 nginx:[emerg]unknown directive "ssl" 解决方法:http://blog.csdn.net/u014227715/article/details/77649156

4. 如果之前安装的Nginx没有SSL模块可以参考下面连接升级:

 http://blog.csdn.net/u014227715/article/details/77649156

5. 升级完成之后一定要重启Nginx 注意,不是重新加载配置文件 !!!

这样Nginx基本就配置完了


三、Tomcat 8 配置SSL openSSL

注意:tomcat 8 配置ssl 有两种配置方式,一种是apr 另外一种是JSSE

两种配置方式不一样。具体配置方案可见:https://stackoverflow.com/questions/6306314/tomcat-7-ssl-failed



















四、配置说明

1. 使用 阿里云负载均衡(https) + Nginx(http) + Tomcat(http),阿里云负载均衡通过http 协议与后端通信

 a.阿里云负载均衡 启用 https 并配置证书,并在高级配置中启用 X-Forwarded-Proto

 b.Nginx 不需要配置,但需要启用 Http 监听即可

 c.Tomcat 在 server.xml 中的Host标签下配置(主要用于记录客户端请求的是http还是https):

<Valve className="org.apache.catalina.valves.RemoteIpValve"  
				remoteIpHeader="X-Forwarded-For"  
				protocolHeader="X-Forwarded-Proto"  
				protocolHeaderHttpsValue="https"/>

2. Nginx(https) + Tomcat(http),客户端 ->(Https) Nginx ->(http) Tomcat

 a. Nginx 启用SSL配置如下:

user              nobody;
worker_processes  auto;
pid               logs/nginx.pid;
events {
    use epoll;
    worker_connections  65535;
}

http { 
   
	proxy_set_header     X-Real-IP          $remote_addr;
        proxy_set_header     Host               $host;
        proxy_set_header     X-Forwarded-For    $proxy_add_x_forwarded_for;
	# 设置到Http请求头中,标识用户请求方式是http还是https
	proxy_set_header     X-Forwarded-Proto  $scheme; 
	
	upstream  backend { 
        server    127.0.0.1:8080;
    }
    
	
	server {
		listen                           443;
		server_name                      127.0.0.1;
		ssl                              on;
		ssl_certificate                  cert/214404386550201.pem;
		ssl_certificate_key              cert/214404386550201.key;
		ssl_session_timeout              5m;
		ssl_ciphers                      ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
		ssl_protocols                    TLSv1 TLSv1.1 TLSv1.2;
		ssl_prefer_server_ciphers        on;
		
        
        location ~*/* {
            proxy_pass                  http://backend;
        }
	}
}
 b. Tomcat 配置需要从请求头中获取客户端请求协议类型: T omcat 在 server.xml 中的Host标签下配置(主要用于记录客户端请求的是http还是https):

<Valve className="org.apache.catalina.valves.RemoteIpValve"  
				remoteIpHeader="X-Forwarded-For"  
				protocolHeader="X-Forwarded-Proto"  
				protocolHeaderHttpsValue="https"/>




参考资料:

1. Tomcat 9 官网SSL配置属性:https://tomcat.apache.org/tomcat-9.0-doc/config/http.html#SSL_Support_-_SSLHostConfig

2. Nginx SSL+tomcat集群 Nginx tomcat no 不用https  http://blog.csdn.net/vfush/article/details/51086274

3. nginx:[emerg]unknown directive "ssl" http://blog.csdn.net/u014227715/article/details/77649156

4. Tomcat 配置SSL两种方式:https://stackoverflow.com/questions/6306314/tomcat-7-ssl-failed

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx + Tomcat 8.5 启用SSL HTTPS 的相关文章

  • 在 Go 中使用电子邮件地址创建证书签名请求 (CSR)

    我尝试使用 crypto x509 包生成 CSR 但没有找到将 emailAddress 字段添加到其主题中的方法 根据文档证书申请 http golang org pkg crypto x509 CertificateRequest结构
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • nginx设置问题

    我知道这不是一个直接的编程问题 但是 stackoverflow 上的人似乎能够回答任何问题 我有一台运行 Centos 5 2 64 位的服务器 非常强大的双核 2 服务器 具有 4GB 内存 它主要提供静态文件 Flash 和图片 当我
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • 通过 ESI:include 设置 Cookie,如何?

    我正在尝试使用 esi 在我的网站上创建忍者缓存 这个想法是 该网站大部分是静态的 我只需要在用户是否登录时做一些花哨的事情 所以我试图在页面A上放置一个 并在页面B的应用程序中设置触发器 这样我就可以将页面 A 缓存在 varnish 上
  • 将 http 和 https 请求重定向到新主机

    在 Apache 2 4 6 中 我想重定向来自http A org foo and https A org foo to https B org foo 我正在使用以下指令
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • Nginx 与 Daphne 给出 502 Bad Gateway

    由于 Django Channels 和 uwsgi 出现问题 我决定用 daphne 替换 uwsgi 关注后this http masnun rocks 2016 11 02 deploying django channels usin
  • Eclipse:覆盖 Tomcat 中的 JNDI 资源

    我正在 Eclipse 中开发 Java Web 应用程序 并将其部署到由 Eclipse 运行的 Tomcat 实例 我正在尝试让此应用程序通过 JNDI 与另一台主机上的数据库进行通信Resource元素 应用程序中包含的 contex
  • nginx 获取静态文件失败,返回 404

    我现在正在 ubuntu 12 上部署带有 nginx 和 Gunicorn 的 django 应用程序 我配置nginx虚拟主机文件如下 server listen 80 server name mydomain com access l
  • 未找到证书管理器证书并且未创建挑战

    我跟着https docs cert manager io en venafi tutorials quick start index html https docs cert manager io en venafi tutorials
  • HttpClient SSLException

    我尝试向 Web 服务发送 https 请求 经过几次成功的尝试后 我开始不断收到此错误 这个错误是什么意思 为什么它第一次发生 javax net ssl SSLException java lang RuntimeException C
  • 使用 Android WebViewClient 启用特定 SSL 协议

    我的应用程序使用WebViewClient与服务器建立 SSL 连接 服务器配置为仅接受 TLSv1 1 及以上协议 使用 Android 时 如何检查哪些 SSL 协议是 a 支持的和 b 默认启用的WebViewClient在设备上 如
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 从 Firefox 33.0.2 中的 javascript 清除 ssl 客户端证书状态(已删除专有 window.crypto)

    我正在寻找一种方法来清除 Firefox 中的 SSL 客户端证书缓存 作为一种 注销 功能 以便服务器在我下次连接到服务器时不再通过客户端证书识别我 解决方案来自从 JavaScript 清除 ssl 客户端证书状态 https stac
  • 如何在 Eclipse 导出到 war 时将所有外部 jar 添加到库

    现在我已经做了一些研究 我明白我需要将依赖的外部 jar 放在 eclipse 中的动态 Web 项目的 web inf lib 文件夹中 不幸的是 到目前为止 我只是将它们导入到 eclipse 内的构建路径中 然后再次导入到我的测试服务
  • 使用 SSL 证书验证 Web 浏览器

    是否可以使用 ssl 证书对 Web 浏览器进行身份验证 假设我在应用程序中存储私钥 有什么方法可以从浏览器读取密钥并尝试基于该私钥进行身份验证 您可以使用 SSL TLS 客户端证书身份验证来对浏览器 用户进行身份验证 服务器必须请求客户
  • 经典 asp 中的 WinHttp TLS 连接

    我正在尝试将付款数据发送到 SagePay 由于他们关闭了 SSL 因此需要使用 TLS 发送数据 我的代码如下 set httpRequest Server CreateObject WinHttp WinHttprequest 5 1

随机推荐