怎么在nginx中通过配置SSL证书实现https服务

node基本架构如下:

|----项目
| |--- static     # 存放html文件
| | |--- index.html  # index.html
| |--- node_modules  # 依赖包
| |--- app.js     # node 入口文件
| |--- package.json 
| |--- .babelrc    # 转换es6文件

index.html 文件代码如下:

<!DOCTYPE html>
<html>
<head>
 <meta charset=utf-8>
 <meta name="referrer" content="never">
 <title>nginx配置https</title>
</head>
<body>
 <div>
  <h3>欢迎使用https来访问页面</h3>
 </div>
</body>
</html>

app.js 代码如下:

const Koa = require('koa');
const fs = require('fs');
const path = require('path');
const router = require('koa-router')();
const koaBody = require('koa-body');
const static = require('koa-static');

const app = new Koa();

router.get('/', (ctx, next) => {
 // 设置头类型, 如果不设置,会直接下载该页面
 ctx.type = 'html';
 // 读取文件
 const pathUrl = path.join(__dirname, '/static/index.html');
 ctx.body = fs.createReadStream(pathUrl);
 next();
});

app.use(static(path.join(__dirname)));

app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3001, () => {
 console.log('server is listen in 3001');
});

package.json 代码如下;

{
 "name": "uploadandload",
 "version": "1.0.0",
 "description": "",
 "main": "app.js",
 "scripts": {
  "dev": "nodemon ./app.js"
 },
 "author": "",
 "license": "ISC",
 "dependencies": {
  "fs": "0.0.1-security",
  "koa": "^2.7.0",
  "koa-body": "^4.1.0",
  "koa-router": "^7.4.0",
  "koa-send": "^5.0.0",
  "koa-static": "^5.0.0",
  "nodemon": "^1.19.0",
  "path": "^0.12.7"
 }
}

然后我在项目的根目录下执行 npm run dev 后,就可以在浏览器下访问 http://localhost:3001 了,但是为了我想使用域名访问的话,因此我们可以在 hosts文件下绑定下域名,比如叫 xxx.abc.com . hosts文件如下绑定:

127.0.0.1 xxx.abc.com

因此这个时候我们使用 http://xxx.abc.com:3001/ 就可以访问页面了,如下所示:

怎么在nginx中通过配置SSL证书实现https服务

如上所示,我们就可以访问页面了,但是我们有没有发现,在chrome浏览器下 显示http请求是不安全的,因此这个时候我想使用https来访问就好了,网页的安全性就得到了保障,但是这个时候如果我什么都不做,直接使用https去访问的话是不行的,比如地址:https://xxx.abc.com:3001. 如下图所示:

怎么在nginx中通过配置SSL证书实现https服务

我们知道使用https访问的话,一般是需要安全证书的,因此我们现在的任务是需要使用nginx来配置下安全证书之类的事情,然后使用https能访问网页就能达到目标。

nginx配置https服务

1. 首先进入nginx目录下,使用命令:cd /usr/local/etc/nginx。然后在该目录下创建 cert文件夹,目的是存放证书文件。
使用命令:mkdir cert 如下所示:

怎么在nginx中通过配置SSL证书实现https服务

2. 然后我们需要把证书相关的文件,比如server.crt 和 server.key 文件复制到该 cert目录下。比如如下证书文件:

怎么在nginx中通过配置SSL证书实现https服务

至于如上证书是如何生存的,可以请看我上篇文字 使用openssl 生存免费证书

移动命令:mv server.key /usr/local/etc/nginx/cert, 比如把server.key 和 server.crt文件都移动到 /usr/local/etc/nginx/cert目录下。如下图所示:

怎么在nginx中通过配置SSL证书实现https服务

然后我们再查看下 /usr/local/etc/nginx/cert 目录下,有如下文件,如下所示:

怎么在nginx中通过配置SSL证书实现https服务

3. nginx的配置

nginx的配置需要加上如下代码:

server {
 listen    443 ssl;
 server_name  xxx.abc.com;
 ssl on; // 该配置项需要去掉
 ssl_certificate   cert/server.crt;
 ssl_certificate_key cert/server.key;
 /*
  设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。
 */
 ssl_session_cache  shared:SSL:1m;
 // 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
 ssl_session_timeout 5m;

 /*
  选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。
  这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。
 */
 ssl_ciphers HIGH:!aNULL:!MD5;

 // 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
 ssl_prefer_server_ciphers on;

 location / {
  proxy_pass http://localhost:3001;
 }
}

注意:如上 ssl on; 这个配置项需要去掉。假如是如上的配置后,我重新启动下nginx命令会报错,如下所示:

怎么在nginx中通过配置SSL证书实现https服务

SSL: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt error:0906A065:PEM routines:PEM_do_header:bad decrypt 类似这样的错,然后通过百度搜索这个错误,通过如下方法可以解决:

进入到该目录下:cd /usr/local/etc/nginx/cert 然后执行下面两句代码即可:

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

如下所示:

怎么在nginx中通过配置SSL证书实现https服务

可以看百度搜索出来的页面

然后当我继续重启下 nginx, 发现还会报错,报错信息如下:

nginx: [warn] the "ssl" directive is deprecated, use the "listen … ssl" directive instead

然后继续把 ssl on; 这句配置项去掉就可以了,可能和nginx的版本有关系

最近升级到 nginx 1.15,reload之后所有带 ssl 的站点都报这个警告了,查了很多资料,最后在 github 上面找到了一条相关的英文说明: ( https://github.com/voxpupuli/puppet-nginx/issues/1224 ) 本人英文不好,大概意思应该是说 nginx 1.15 及以后的版本,不需要再写 ssl on; 了。

去 nginx.conf 删掉 ssl on; 之后,reload,果然没再报警,目前使用没啥问题。

我确实理解错了,应该把 ssl on 改成 listen 443 ssl 这样才对。

现在我继续重启下nginx就ok了,如下所示:

怎么在nginx中通过配置SSL证书实现https服务

但是如上配置后,我们还不能直接 使用 域名 https://xxx.abc.com/ 访问了,我们还需要在浏览器下把自己之前生成的client.crt 证书安装上去,在mac系统下操作步骤如下:

1. 点击如下启动台。如下所示:

怎么在nginx中通过配置SSL证书实现https服务

2. 搜索钥匙串访问,点击进去,如下所示

怎么在nginx中通过配置SSL证书实现https服务

3. 进入到证书页面,把我们之前的client.crt证书拖进到证书里面去即可,比如我之前生成的 client.crt证书,如下所示:

怎么在nginx中通过配置SSL证书实现https服务

4. 右键点击我的证书,然后点击 "显示简介", 进入到证书详情页面后。如下图所示:

怎么在nginx中通过配置SSL证书实现https服务

5. 进入页面后,使用证书时,选择始终信任后,如下图所示:

怎么在nginx中通过配置SSL证书实现https服务

6. 然后退出,可能需要输入电脑开机密码,输入完成,会自动保存。然后我们在浏览器访问该 https://xxx.abc.com/ 页面后就可以访问的到了。如下所示:

怎么在nginx中通过配置SSL证书实现https服务

然后我们点击继续访问即可看到页面了,如下所示:

怎么在nginx中通过配置SSL证书实现https服务

如上就是使用 nginx + 证书 实现 本地node https服务了。

但是如上https虽然可以访问,但是https前面还是显示不安全的文案; 如下图所示:

怎么在nginx中通过配置SSL证书实现https服务

原创文章,作者:EZVYJ,如若转载,请注明出处:http://www.wangzhanshi.com/n/15506.html

(0)
EZVYJ的头像EZVYJ
上一篇 2025年1月2日 12:30:47
下一篇 2025年1月2日 12:30:49

相关推荐

  • HTTPS协议的原理及其与HTTP协议的区别是什么

    HTTPS协议是什么 https协议比http协议多了一个s,字面意思上s=secure(安全)。它跟http协议一样都是应用层协议,都是工作在TCP协议之上。 只不过https协…

    ssl证书 2025年1月2日
  • ssl证书有什么好处,申请证书的方法

    今天小编给大家分享的是ssl证书有什么好处,申请证书的方法,很多人都不太了解,今天小编为了让大家更加了解ssl证书,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。 当…

    2025年1月2日
  • rhel6.3下如何使用openssl来生成CA证书并颁发证书

    一、配置OPENSSL [root@test1 /]# rpm -qa|grep openssl openssl-1.0.0-20.el6_2.5.i686 [root@test1…

    ssl证书 2025年1月2日
  • 查看ssl证书有效期的方法

    我相信很多的用户的电脑上几乎上都安装了ssl证书,它不但可以体现这个网站是否安全,以及一些性能高不高的问题,有的人虽然已经安装了ssl证书,当然还是有一些人不懂怎么查看ssl证书有…

    2025年1月2日
  • 安装SSL证书对企业有哪些好处

    SSL证书安装对企业有什么好处 现在很多企业网站都会使用SSL证书来对网站数据进行传输加密,这种现象普遍运用在银行、金融类这样子的网站。其实任何企业网站都是需要ssl,这种证书能保…

    ssl证书 2025年1月2日
  • openssl rc5 ecb模式

    ECB(Electronic Code Book)/电码本模式原理非常简单数据按照8个字节一段进行加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字…

    ssl证书 2025年1月2日
  • 如何实现Linux下OpenSSL的DSA与RSA非对称加密

    在日常系统管理工作中,需要作一些加解密的工作,通过openssl工具包就能完成我们很多需求!1. openssl RSA 加解密RSA是基于数论中大素数的乘积难分解理论上的非对称加…

    ssl证书 2025年1月2日
  • 网站证书的用处是什么

    网站证书的用处是什么?当下我们的生活和网络已经分不开了,网络给我们的生活提供了很多的便利,但是网络诈骗、数据泄露等信息,也让很多的人对网络产生了不信任,也是因为这些原因,很多人都感…

    2025年1月2日
  • 证书签名指的是什么

    随着如今互联网的时代越发的走进我们的生活,很多的用户都开始注意起了,自己个人的信息保障安全。而SSL则是当今互联网上使用最为广泛的一种安全协议,被很多人都运用于他们的个人客户电脑。…

    2025年1月2日
  • 多网站域名SSL证书的申请方法

    SSL证书是这种ca证书,遵循SSL协议书,由受信赖的ca证书授予组织CA,在认证网络服务器真实身份后授予,具备网络服务器身份认证和传输数据数据加密作用。在其中SSL协议书就是指S…

    2025年1月2日

发表回复

登录后才能评论