Nginx 配置 HTTPS 证书

随着我们网站用户的增多,我们会逐渐意识到 HTTPS 加密的重要性。在不修改现有代码的情况下,要从 HTTP 升级到 HTTPS,让 Nginx 支持 HTTPS 是个很好的选择。今天我们来讲下如何从 Nginx 入手,从 HTTP 升级到 HTTPS,同时支持静态网站和 Spring Boot 应用,希望对大家有所帮助!

生成 SSL 自签名证书


虽然自签名证书浏览器认为并不是安全的,但是学习下 SSL 证书的生成还是很有必要的!

首先创建 SSL 证书私钥,期间需要输入两次用户名和密码,生成文件为 blog.key

$ openssl genrsa -des3 -out blog.key 2048

利用私钥生成一个不需要输入密码的密钥文件,生成文件为 blog_nopass.key

$ openssl rsa -in blog.key -out blog_nopass.key

创建 SSL 证书签名请求文件,生成 SSL 证书时需要使用到,生成文件为 blog.csr

$ openssl req -new -key blog.key -out blog.csr

在生成过程中,我们需要输入一些信息,需要注意的是 Common Name 需要和网站域名一致:

Enter pass phrase for blog.key:
-----
$ Country Name (2 letter code) [XX]:CN                                         # 国家代码
$ State or Province Name (full name) []:jiangsu                                # 省份
$ Locality Name (eg, city) [Default City]:jiangsu                              # 城市
$ Organization Name (eg, company) [Default Company Ltd]:antoniopeng             # 机构名称
$ Organizational Unit Name (eg, section) []:dev                                # 单位名称
$ Common Name (eg, your name or your server's hostname) []:blog.antoniopeng.com # 网站域名
$ Email Address []:antoniopeng@foxmail.com                                           # 邮箱

Please enter the following 'extra' attributes
to be sent with your certificate request
$ A challenge password []:                                                     # 私钥保护密码,可以不输入直接回车
$ An optional company name []:                                                 # 可选公司名称,可以不输入直接回车

生成 SSL 证书,有效期为 365 天,生成文件为 blog.crt

$ openssl x509 -req -days 365 -in blog.csr -signkey blog.key -out blog.crt

其实最终有用的文件是两个,一个是证书文件 blog.crt,另一个是不需要输入密码的证书私钥文件 blog_nopass.key

Nginx 支持 HTTPS


SSL 证书生成好了,接下来我们就可以配置 Nginx 来支持 HTTPS 了!

将我们生成好的 SSL 证书和私钥拷贝到 Nginx 的 html/ssl 目录下:

$ cp blog_nopass.key /mydata/nginx/html/ssl/
$ cp blog.crt /mydata/nginx/html/ssl/

接下来我们需要给 antoniopeng.com 这个域名添加 HTTPS 支持,修改 nginx.conf 内容如下:

server {
    listen       80; # 同时支持HTTP
    listen       443 ssl; # 添加HTTPS支持
    server_name  antoniopeng.com;
  
    #SSL配置
    ssl_certificate      /usr/share/nginx/html/ssl/blog/blog.crt; # 配置证书
    ssl_certificate_key  /usr/share/nginx/html/ssl/blog/blog_nopass.key; # 配置证书私钥
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本
    ssl_ciphers          ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 配置SSL加密算法
    ssl_prefer_server_ciphers  on; # 优先采取服务器算法
    ssl_session_cache    shared:SSL:10m; # 配置共享会话缓存大小
    ssl_session_timeout  10m; # 配置会话超时时间

    location / {
        root   /usr/share/nginx/html/docs;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

通过 HTTPS 访问 antoniopeng.com 这个域名,由于我们使用的是自己签名的SSL证书,浏览器会提示 您的连接不是私密连接,点击继续前往可以通过HTTPS正常访问。我们可以查看下证书的 颁发者 信息,可以发现正好是之前我们创建 SSL 证书签名请求文件时录入的信息。

接下来动态代理添加 HTTPS 支持,修改 nginx.conf 内容如下:

server {
    listen       80; # 同时支持HTTP
    listen       443 ssl; # 添加HTTPS支持
    server_name  antoniopeng.com; #修改域名

    #ssl配置
    ssl_certificate      /usr/share/nginx/html/ssl/blog/blog.crt; # 配置证书
    ssl_certificate_key  /usr/share/nginx/html/ssl/blog/blog.crt; # 配置证书私钥
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本 # 配置SSL加密算法
    ssl_ciphers          ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers  on; # 优先采取服务器算法
    ssl_session_cache    shared:SSL:10m; # 配置共享会话缓存大小
    ssl_session_timeout  10m; # 配置会话超时时间

    location / {
        proxy_pass   http://192.168.3.101:4000; # 设置代理服务访问地址
        proxy_set_header  Host $http_host; # 设置客户端真实的域名(包括端口号)
        proxy_set_header  X-Real-IP  $remote_addr; # 设置客户端真实IP
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; # 设置在多层代理时会包含真实客户端及中间每个代理服务器的IP
        proxy_set_header X-Forwarded-Proto $scheme; # 设置客户端真实的协议(http还是https)
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

使用受信任的证书


之前我们使用的是自签名的 SSL 证书,对于浏览器来说是无效的。使用权威机构颁发的 SSL 证书浏览器才会认为是有效的,这里给大家推荐两种申请免费 SSL 证书的方法,一种是从阿里云申请,另一种是从 FreeSSL 申请。

阿里云证书

阿里云上可以申请的免费证书目前只有支持单个域名的 DV 级 SSL 证书。比如说你有 blog.antoniopeng.comapi.antoniopeng.com 两个二级域名需要使用 HTTPS,就需要申请两个 SSL 证书:

img

申请成功后点击下载 Nginx 证书即可。

img

下载完成后解压会有下面两个文件:

blog.antoniopeng.com.key # 证书私钥文件
blog.antoniopeng.com.pem # 证书文件

拷贝证书文件到 Nginx 的指定目录下,然后修改 nginx.conf 配置路径即可,修改完成后重启Nginx:

#SSL配置
ssl_certificate      /usr/share/nginx/html/ssl/blog/blog.antoniopeng.com.pem; # 配置证书
ssl_certificate_key  /usr/share/nginx/html/ssl/blog/blog.antoniopeng.com.key; # 配置证书私钥

再次通过 HTTPS 访问 blog.antoniopeng.com 这个域名,发现证书已经有效了,连接也是安全的了。

FreeSSL 证书

如果你有使用通配符域名的需求,可以上 FreeSSL 申请SSL证书,不过免费的有效期只有 3 个月,这就意味着你过 3 个月就要重新申请一次了。

img

附上官网地址:https://freessl.cn/

使用 acme.sh 自动申请证书

acme.sh 脚本实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。一般我们申请的证书有效期都是 1 年,过期就要重新申请了,使用 acme.sh 脚本可以实现到期自动申请,再也不用担心证书过期了!

img

更多干货请移步:https://antoniopeng.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值