详解Nginx配置SSL证书实现Https访问

背景

由于项目需求,安全起见,需要将之前的http接口访问变成https访问,所以需要配置SSL证书。项目的架构是这样的:

基本架构是硬负载(ReadWhere)+ 软负载(Nginx)+ Tomcat集群,现在的问题是SSl证书要配置在哪里,直接配置在硬负载上?还是分别配置在Nginx和Tomcat上?还是其他的配置方法呢?

首先在硬负载上配置放弃了,然后通过在网上查找资料,发现可以只在Nginx上配置证书,就是说Nginx接入使用Https,而Nginx与Tomcat之间使用Http进行衔接,这样就游了一个整体思路。

关于SSL证书

关于SSL证书这里简单进行介绍,也是因为项目需要,进行了简单的了解。

SSL证书分为大致分为三种,域名级(DV)、企业级(OV)、增强级(EV),安全性以及价格依次增加。根据自己的需求进行选择,个人使用可以使用DV,便宜;企业用的话一般使用OV,特殊情况下使用EV。下面是几家云服务商的OV SSL证书的价格对比,Symantec和GeoTrust被选用的比较多,都属于赛门铁克旗下。

云服务商 证书品牌 价格
阿里云 Symantec 4000/年
阿里云 GeoTrust 2062.4/年
腾讯云 Symantec 5000/年
腾讯云 GeoTrust 2850/年
西部数码 Symantec 3880/年
西部数码 GeoTrust 2137/年

SSL证书配置

由于Nginx对于SSL证书配置的支持才使得这种实现方式成为了可能,不得不感叹Nginx的强大。

证书准备

Nginx配置需要.pem/.crt证书 + .key秘钥,如果您现在拥有的是其他形式的证书,请按照相关说明转化成要求的证书类型,否则是不能完成证书的配置的。一般购买商家都会有相应的转换工具。

准备好了之后,将证书和秘钥放到Nginx的conf目录下(也就是跟配置文件nginx.conf在同一个目录),这里特别需要注意:

  1. 如果是在linux系统下配置,这就算准备好了;
  2. 如果是在windows系统下,需要将.key秘钥文件中的密码去除,否则就会导致配置之后Nginx启动不起来,这里是一个坑,本人就卡在了这里,具体处理方法也很简单,在网上下载openssl的windows版本,然后将cmd切换到bin目录下,执行openssl rsa -in server.key -out server2.key,生成的server2.key就是配置需要的秘钥文件,但是需要将文件名改成server.key。

修改Nginx配置文件

以下是我nginx.conf配置文件的局部,端口着迷没有使用默认的443,而是改成了8185,根据您的需要进行修改即可,其他配置基本上按照下面就没问题。

server {
    listen    8185;
    server_name localhost;
    ssl         on;
    ssl_certificate   server.pem;
    ssl_certificate_key server.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
    ssl_prefer_server_ciphers  on;

    location / {
      proxy_set_header Host $host:$server_port;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_connect_timeout  5;
      proxy_send_timeout   5;
      proxy_read_timeout   5;
      proxy_pass http://qlddm_server;
    }

修改Tomcat配置文件

虽然不需要在Tomcat配置证书,但是仍然需要修改一下Tomcat的配置Server.xml配置文件,具体包含两个地方:

<Connector
    executor="tomcatThreadPool"
    port="7083"
    protocol="org.apache.coyote.http11.Http11Nio2Protocol"
    connectionTimeout="20000"
    maxConnections="8000"
    redirectPort="8185"
    proxyPort="8185"
    enableLookups="false"
    acceptCount="100"
    maxPostSize="10485760"
    compression="on"
    disableUploadTimeout="true"
    compressionMinSize="2048"
    acceptorThreadCount="2"
    compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
    URIEncoding="utf-8"
  />

需要将redirectPort和proxyPort都修改为您的Nginx监听端口号。

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

需要增加以上的Value标签,注意httpsServerPort也需要修改为Nginx监听端口号。

写在最后

至此,关于SSL的配置基本上就完成了,启动Nginx以及Tomcat容器之后,不出意外应该就可以通过Https正常访问了。另外想说的是,由于本人工作场景是一个硬负载均衡两台服务器,所以相同的配置需要在两台服务器上分别做一次。本文仅供参考,如对您有所帮助,实乃万幸,也希望大家多多支持我们。

(0)

相关推荐

  • 详解nginx使用ssl模块配置HTTPS支持

    默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这个文件名类似libssl-dev. 生成证书 可以通过以下步骤生成一个简单的证书: 首先,进入你想创建证书和私钥的目录,例如: $ cd /usr/local/nginx/conf 创建服务器私钥,命令会让你输入一个口令: $ openssl genrsa -des3 -out serverkey

  • Nginx+SSL搭建 HTTPS 网站

    一.HTTPS 是什么? 根据维基百科的解释: 复制代码 代码如下: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定.HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输.HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混. HTTPS 目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,H

  • 微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)

    微信小程序Server环境配置详解 主要内容: 1. SSL免费证书申请步骤 2. Nginx HTTPS 配置 3. TLS 1.2 升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申请SSL证书 小程序也要求 TLS(传输层安全协议)的版本至少为 1.2,在配置好 https之后,如果 TLS 的版本较低,就涉及到升级问题 所以 Server端环境配置的主要步骤: 申请 SSL 证书 配置web服务器支持https(我使用的是nginx)

  • nginx环境下配置ssl加密(单双向认证、部分https)

    nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始采用的是全站加密,所有访问http:80的请求强制转换(rewrite)到https,后来自动化测试结果说响应速度太慢,https比http慢慢30倍,心想怎么可能,鬼知道他们怎么测的.所以就试了一下部分页面https(不能只针对某类动态请求才加密)和双向认证.下面分节介绍. 默认nginx是没有安装ssl模块的,需要编译安装nginx时加入--with

  • 详解Nginx配置SSL证书实现Https访问

    背景 由于项目需求,安全起见,需要将之前的http接口访问变成https访问,所以需要配置SSL证书.项目的架构是这样的: 基本架构是硬负载(ReadWhere)+ 软负载(Nginx)+ Tomcat集群,现在的问题是SSl证书要配置在哪里,直接配置在硬负载上?还是分别配置在Nginx和Tomcat上?还是其他的配置方法呢? 首先在硬负载上配置放弃了,然后通过在网上查找资料,发现可以只在Nginx上配置证书,就是说Nginx接入使用Https,而Nginx与Tomcat之间使用Http进行衔接

  • nginx配置ssl证书实现https访问的示例

    一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址:47.89.12.99 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的域名点"解析",进入解析页面后选择[添加解析]按钮会弹出如下页面: 主机记录这里选择@,记录值就是服务器ip地址,确认. 三,申请ca证书 在阿里云控制台-产品与服务-安全(云盾)-CA证书服务(数据安全),点击购买证书, 选择"免费版DV SSL",点击立即购买: 然

  • 关于Nginx配置ssl证书实现https安全访问

    目录 一.Nginx的安装与配置 安装步骤 二.SSL证书获取 三.Nginx配置 前题条件,拥有服务器与可以解析到该服务器的自己的域名. 一.Nginx的安装与配置 若已安装好了Nginx,则需查看自己的Nginx是否开启了SSL的模块功能: ./nginx -V 显示如上,则代表ssl功能已开启,否则可能出现以下错误提示: nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/ng

  • Nginx配置SSL证书部署HTTPS网站的方法(颁发证书)

    自行颁发不受浏览器信任的SSL证书 手动颁发 xshell登录服务器,使用openssl生成RSA密钥及证书 # 生成一个RSA密钥 $ openssl genrsa -des3 -out tfjybj.key 1024 # 拷贝一个不需要输入密码的密钥文件 $ openssl rsa -in dmsdbj.key -out tfjybj_nopass.key # 生成一个证书请求 $ openssl req -new -key tfjybj.key -out tfjybj.csr 这里会提示输

  • nginx配置SSL证书实现https服务的方法

    在前面一篇文章中,使用openssl生成了免费证书后,我们现在使用该证书来实现我们本地node服务的https服务需求.假如我现在node基本架构如下: |----项目 | |--- static # 存放html文件 | | |--- index.html # index.html | |--- node_modules # 依赖包 | |--- app.js # node 入口文件 | |--- package.json | |--- .babelrc # 转换es6文件 index.htm

  • Nginx配置ssl证书(https)的全过程

    如果有防火墙的话,记得开通443端口 安装nginx请看我的另一篇文章 < Nginx安装配置详解> 准备材料: 1.申请ssl证书,这个如何申请可以到百度搜一下,因为域名服务商不同,这里不做过多赘述: 2.服务器上已安装nginx,并可以正常访问. 开始配置: 1.进入到nginx目录,查看有没有http_ssl_module模块 ./nginx -V 2.如果没有,找到源码,输入以下命令进行安装(如果有,跳转到第6步) #prefix后面的路径是你安装nginx的路径 ./configur

  • 详解Nginx服务器和iOS的HTTPS安全通信

    详解Nginx服务器和iOS的HTTPS安全通信 简介 在网络通信中,使用抓包软件可以对网络请求进行分析,并进行重放攻击,重放攻击的解决方案一般是使用一个变化的参数,例如RSA加密的时间戳,但考虑到网络传输时延,时间戳需要有一定的误差容限,这样仍然不能从根本上防止重放攻击.想要较好的解决重放攻击问题,应考虑使用HTTPS通信,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比HTTP协议安全. 实现 对于用浏览器访问的网站,需要向CA申请证书才能保证HTTPS的网

  • 详解nginx配置vue h5 history去除#号

    vue的默认配置是使用hash模式,这样我们访问的时候都带有了一个#号,再支付回调的地址或者其他原因不支持#号或者不喜欢#号这种模式,优势就出现了需要去除#号,于是vue端就需要配置该模式,并且使用懒加载,vue端的配置如下: 首先先声明一下,这是使用vue+nginx实现前后端分离的项目,并且使用vue axios实现代理功能(允许跨域并且服务端已经开启跨域), 然后就是打包的配置: !!!注意,这里配置的assetsPublicPath一定要配置成  "/"  而不是  "

  • 详解nginx配置location总结及rewrite规则写法

    location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/ { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 # 只有后面的正则表达式没有匹配到时,这

  • 详解nginx使用ssl模块配置支持HTTPS访问

    背景: 项目开发中用到了微信小程序,但是服务器配置URL必须是HTTPS,所以需要通过配置nginx的SSL模块来支持HTTPS访问,也就是说,要做一个网站域名为 dmsdbj.com 要求通过HTTPS://dmsdbj.com进行访问. SSL英文名为Secure Socket Layer,安全套接字层.SSL是一种数字证书,它使用ssl协议在浏览器和web server之间建立一条安全通道,数据信息在client与server之间的安全传输. 本篇博客是对这个操作步骤的详解. 前提: 1.

随机推荐