最近机器人项目的子项目,由于和BAT中的一家进行合作,人家要求用HTTPS连接,于是乎,我们要改造我们的nginx的配置,加添HTTPS的支持。

当然了,HTTPS需要的证书,必须是认证机构颁发的,这里的配置实践,也是从技术路线上的一次操作,证书是基于openssl生成的。没有谁颁发,自建得之!

不多说,开始实践!!!!

1. openssl的版本信息

  1. [root@localhost conf]# openssl version
  2. OpenSSL 1.0.1e-fips Feb

2. openresty的版本信息

  1. [root@localhost sbin]# ./nginx -V
  2. nginx version: openresty/1.11.2.2
  3. built by gcc 4.8. (Red Hat 4.8.-) (GCC)
  4. built with OpenSSL 1.0.1u Sep
  5. TLS SNI support enabled
  6. configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3. --add-module=../echo-nginx-module-0.60 --add-module=../xss-nginx-module-0.05 --add-module=../ngx_coolkit-.2rc3 --add-module=../set-misc-nginx-module-0.31 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.06 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10. --add-module=../ngx_lua_upstream-0.06 --add-module=../headers-more-nginx-module-0.32 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.17 --add-module=../redis2-nginx-module-0.13 --add-module=../redis-nginx-module-0.3. --add-module=../rds-json-nginx-module-0.14 --add-module=../rds-csv-nginx-module-0.07 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-pcre=/opt/pcre-8.40 --with-openssl=/opt/openssl-1.0.1u --with-http_ssl_module
  7. [root@localhost sbin]#

3. 创建服务器私钥,命令会提醒输入一个密码,必须输入(在nginx的conf所在的路径下进行操作,当然也可以在其他路径,需要配合后续的nginx的配置一起改变

  1. [root@localhost conf]# openssl genrsa -des3 -out server.key
  2. Generating RSA private key, bit long modulus
  3. ..............................................................++
  4. ........................++
  5. e is (0x10001)
  6. Enter pass phrase for server.key:
  7. :error::lib():UI_set_result:result too small:ui_lib.c::You must type in to characters
  8. Enter pass phrase for server.key:
  9. :error::lib():UI_set_result:result too small:ui_lib.c::You must type in to characters
  10. Enter pass phrase for server.key:
  11. Verifying - Enter pass phrase for server.key:
  12. [root@localhost conf]# ll
  13. 总用量
  14. -rw-r--r--. root root 3 : fastcgi.conf
  15. -rw-r--r--. root root 3 : fastcgi.conf.default
  16. -rw-r--r--. root root 3 : fastcgi_params
  17. -rw-r--r--. root root 3 : fastcgi_params.default
  18. -rw-r--r--. root root 3 : koi-utf
  19. -rw-r--r--. root root 3 : koi-win
  20. -rw-r--r--. root root 3 : mime.types
  21. -rw-r--r--. root root 3 : mime.types.default
  22. -rw-r--r--. root root 3 : nginx.conf
  23. -rw-r--r--. root root 3 : nginx.conf.default
  24. -rw-r--r--. root root 3 : scgi_params
  25. -rw-r--r--. root root 3 : scgi_params.default
  26. -rw-r--r-- root root 7 : server.key
  27. -rw-r--r--. root root 3 : uwsgi_params
  28. -rw-r--r--. root root 3 : uwsgi_params.default
  29. -rw-r--r--. root root 3 : win-utf

4. 创建签名请求的证书(CSR)

  1. [root@localhost conf]# openssl req -new -key server.key -out server.csr
  2. Enter pass phrase for server.key:
  3. You are about to be asked to enter information that will be incorporated
  4. into your certificate request.
  5. What you are about to enter is what is called a Distinguished Name or a DN.
  6. There are quite a few fields but you can leave some blank
  7. For some fields there will be a default value,
  8. If you enter '.', the field will be left blank.
  9. -----
  10. Country Name ( letter code) [XX]:cn
  11. State or Province Name (full name) []:hubei
  12. Locality Name (eg, city) [Default City]:wuhan
  13. Organization Name (eg, company) [Default Company Ltd]:tk
  14. Organizational Unit Name (eg, section) []:iflab
  15. Common Name (eg, your name or your server's hostname) []:root
  16. Email Address []:shihuc@.com
  17.  
  18. Please enter the following 'extra' attributes
  19. to be sent with your certificate request
  20. A challenge password []:shihuc
  21. An optional company name []:tk
  22. [root@localhost conf]#

5. 在加载SSL支持的Nginx服务器上,使用上述私钥时除去必须的口令(注意,所谓除去,其实就是将必须的私钥密码写入到了私钥文件里面了,更新了原来的私钥文件)

  1. [root@localhost conf]# cp server.key server.key.org
  2. [root@localhost conf]#
  3. [root@localhost conf]# openssl rsa -in server.key.org -out server.key
  4. Enter pass phrase for server.key.org:
  5. writing RSA key
  6. [root@localhost conf]#

6. 通过openssl的x509指令生产证书文件

  1. [root@localhost conf]# openssl x509 -req -days -in server.csr -signkey server.key -out server.crt
  2. Signature ok
  3. subject=/C=cn/ST=hubei/L=wuhan/O=tk/OU=iflab/CN=root/emailAddress=shihuc@.com
  4. Getting Private key

7. nginx的配置

  1. # HTTPS server
  2. #
  3. server {
  4. listen ssl;
  5. server_name localhost;
  6.  
  7. ssl_certificate server.crt;
  8. ssl_certificate_key server.key;
  9.  
  10. ssl_session_cache shared:SSL:1m;
  11. ssl_session_timeout 5m;
  12.  
  13. ssl_ciphers HIGH:!aNULL:!MD5;
  14. ssl_prefer_server_ciphers on;
  15.  
  16. location / {
  17. root html/SSLROOT;
  18. index index.html index.htm;
  19. }
  20. }

在nginx的html目录下,创建SSLROOT目录,并在下面创建一个index.html的页面,用于测试。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>SHIHUC</title>
  5. <style>
  6. body {
  7. width: 50em;
  8. margin: auto;
  9. font-family: Tahoma, Verdana, Arial, sans-serif;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <h1>欢迎来到SHIHUC的博客</h1>
  15. <p>你好,你看到的这个页面是用来测试HTTPS的配置过程效果的。</p>
  16.  
  17. <a href="http://www.cnblogs.com/shihuc/">shihuc</a>.<br/>
  18.  
  19. <p><em>感谢关注SHIHUC的博客,欢迎交流.</em></p>
  20. </body>
  21. </html>

重启nginx。

在浏览器地址栏输入nginx的服务器地址

https://10.90.7.10

得到下面的效果:

注意,上面图中,地址栏出现红色的不安全提醒。

需要注意的是,注意:

A.  若没有第5步,直接进入第6步,则会在咨询x509指令时提醒用户输入私钥密码:

  1. [root@localhost conf]# openssl x509 -req -days -in server.csr -signkey server.key -out server.crt
  2. Signature ok
  3. subject=/C=cn/ST=hubei/L=wuhan/O=tk/OU=iflab/CN=root/emailAddress=shihuc@.com
  4. Getting Private key
  5. Enter pass phrase for server.key:
    [root@localhost conf]#

B. 另外,在nginx启动的时候,也会提醒用户输入ssl的私钥密码

  1. [root@localhost conf]# ./../sbin/nginx -s reload
  2. Enter PEM pass phrase:

到此,基于openresty的nginx做https的配置,到此一个实践完成。其实很简单。重点是要熟悉下openssl的指令应用!

基于openresty的https配置实践的更多相关文章

  1. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

    基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)   前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...

  2. 基于OpenResty和Node.js的微服务架构实践

    什么是微服务? 传统的单体服务架构是单独服务包,共享代码与数据,开发成本较高,可维护性.伸缩性较差,技术转型.跨语言配合相对困难.而微服务架构强调一个服务负责一项业务,服务可以单独部署,独立进行技术选 ...

  3. 基于ZK构建统一配置中心的方案和实践

    背景: 近期使用Zk实现了一个简单的配置管理的小东西,在此开源出来,有兴趣的希望提出您的宝贵意见.如果恰巧您也使用或者接触过类似的东西, 也希望您可以分享下您觉得现在这个项目可以优化和改进的地方. 项 ...

  4. 基于Openresty+Naxsi的WAF:从小白到实践

    序 2019年2月18日,加入妈妈网,至今已经有四个月的时间,上周进到一个网关项目组,这个项目的主要目的是基于openResty+Naxsi实现WAF,相关技术初定涉及到openResty.Lua.N ...

  5. 【实战分享】又拍云 OpenResty / Nginx 服务优化实践

    2018 年 11 月 17 日,由 OpenResty 主办的 OpenResty Con 2018 在杭州举行.本次 OpenResty Con 的主题涉及 OpenResty 的新开源特性.业界 ...

  6. 基于 OpenResty 的动态服务路由方案

    2019 年 5 月 11 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙武汉站,又拍云首席布道师在活动上做了< 基于 OpenResty ...

  7. 基于OpenResty与Consul实现服务网格ServiceMesh

    一.逻辑架构 1.基于OpenResty开发智能代理: 利用其动态可编程特性,动态化配置nginx服务路由: 2.需要向OpenResty添加weibo开源的upsync服务发现模块: 3.基于con ...

  8. 基于Neutron的Kubernetes SDN实践经验之谈

    首先,向大家科普下Kubernetes所选择的CNI网络接口,简单介绍下网络实现的背景. CNI即Container Network Interface,是一套容器网络的定义规范,包括方法规范.参数规 ...

  9. HelloTalk 基于 OpenResty 的全球化探索之路

    2019 年 12 月 14 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 广州站活动,HelloTalk, Inc. 后台技术负责人李凌 ...

随机推荐

  1. 配置MAVEN环境变量

    在配置maven前一定要先配置java jdk 的环境变量 和java配置一样 先写一个MAVEN_HOME:F:\java\apache-maven-3.5.2 (就是你maven 的下载位置) 写 ...

  2. (Object String 类中的方法练习)

    package com.zs.demo1; public class Demo1 { public static void main(String[] args) { fun1(); fun2(); ...

  3. css引入外部字体使网站字体更美观

    @font-face{font-family: myFont;src:url("../font/timesi.ttf");src:url("../font/timesbi ...

  4. 启动mongodb出现的问题

    启动mongodb时,首先要启动服务端,然后再启动客户端 启动服务端 1.找到一个存放mongodb数据的目录  比如D盘下data中 2.找到mongodb下的bin目录 3.配置数据存放路径  m ...

  5. DRBD常用管理篇

          在DRBD进入使用阶段之后,要经常查看它的工作状态,通过这些状态来判断DRBD运行情况. 1) 使用drbd-overview命令观察状态      最为简便的方式就是运行drbd-ove ...

  6. python 实现 KNN 分类器——手写识别

    1 算法概述 1.1 优劣 优点:进度高,对异常值不敏感,无数据输入假定 缺点:计算复杂度高,空间复杂度高 应用:主要用于文本分类,相似推荐 适用数据范围:数值型和标称型 1.2 算法伪代码 (1)计 ...

  7. 【opencv基础】OpenCV installation stuck at [ 98%] Built target opencv_perf_stitching with no error

    前言 按照官网步骤安装opencv的过程中进行到98%时一直没有继续进行. 原因 后台一直在编译运行,只需等待即可,参考here: well, turns out it gets stuck for ...

  8. [LeetCode&Python] Problem 409. Longest Palindrome

    Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...

  9. 2017.7.11 linux 挂载

    挂载:Liunx采用树形的文件管理系统,也就是在Linux系统中,可以说已经没有分区的概念了.分区在Linux和其他设备一样都只是一个文件.要使用一个分区必须把它加载到文件系统中.这可能难于理解,继续 ...

  10. 【Jmeter】插件

    一.插件管理 前提:很多时候,尤其是性能测试的时候,我们需要用到很多场景,需要得到一些参数值等等. 二.插件地址 URL : https://jmeter-plugins.org/downloads/ ...