nginx如何将http访问的网站改成https访问

1. 背景

我有个用于数据展示的网站使用nginx对外提供http访问,另外一个系统用超链接的方式跳转到我的网站提供给终端用户访问。后来对方说他们的站点是https访问的,不能直接访问http,所以需要我支持https访问。

所以这里仅限于展示类网站的参考,交互式网站我也不会。

***对nginx的了解仅限于可以通过配置文件完成网站访问的配置,其他没有深入理解。***

2. 预备知识

https:

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

简单来讲就是网站中嵌入证书,用户通过浏览器和网站服务器交互时数据会被加密,保证安全。

证书体系:

树状结构,可能有多层证书办法机构,最顶层的叫根证书机构,持有根证书私钥,可以签发下一级证书,每个机构或者人使用的证书由证书颁发机构颁发,简单来讲就是用颁发机构的私钥,对证书人的个人信息、公钥等诸多信息做数字签名,对外宣称这个证书由他证明。证书可以公开访问以验证持有者身份,由颁发机构背书,证书对应私钥由持有人持有,不对外公开,用于解密他人通过证书中公钥加密的私密消息。

有点类似于公安机构对于身份证的颁发,全国总上层有一个公安部,负责所有省级公安厅的管理,省级负责市级,...,最终由派出所给个人颁发身份证,我们拿着身份证就可以对外证明自己的身份,因为有派出所的背书,而派出所又有上级、上上级一直到公安部的背书。不同的是我们的身份证里并没有证书包含的那么多消息。

备注:证书依赖于公钥加密体制,公钥密码体系包含公钥、私钥两把密钥,公钥用户加密、验签,私钥用于解密、签名。

3. 操作过程

3.1 证书生成

主要过程是:根证书 -->服务器证书,这里的服务器证书指的是我上面所提到需要添加https访问的网站服务器,

1. 生成根证书私钥、生成根证书请求、创建自签发根证书

#生成根证书私钥
openssl genrsa -out root.key 2048
 
#生成根证书请求
openssl req -new -key root.key -out root.csr
 
#用根证书私钥自签生成根证书
openssl x509 -req -in root.csr -extensions v3_ca -signkey root.key -out root.crt

这里根证书私钥自签证书的原因是,证书的格式都是一致的,需要有证书颁发签发,因为根证书颁发机构没有上级,所以根证书颁发机构给自己签发证书,因此有需要大家都信任他。

2. 生成服务器证书私钥、生成服务器证书请求、使用根证书私钥签发服务器证书,这里注意此服务器证书的commonName需要设置成nginx配置文件中的server_name,保持一致。

#生成服务器证书私钥
openssl genrsa -out server.key 2048
 
#生成服务器证书请求
openssl  req -new -key server.key  -out server.csr
 
#生成服务器证书
openssl x509 -days 365 -req -in server.csr -extensions v3_req -CAkey root.key -CA root.crt -CAcreateserial -out server.crt -extfile openssl.cnf

 这里有个openssl.cnf文件需要注意,里面描述了需要颁发的服务器证书的一些信息,内容如下

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = CN
countryName_default = CN
stateOrProvinceName = Guizhou
stateOrProvinceName_default = Guizhou
localityName = Guizhou
localityName_default = Guizhou
organizationalUnitName = (如果网页访问是ip就写ip,如果是域名就写域名)
organizationalUnitName_default = (如果网页访问是ip就写ip,如果是域名就写域名)
commonName = (如果网页访问是ip就写ip,如果是域名就写域名)
commonName_max = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

3.2 nginx配置

打开nginx配置中HTTPS server部分的注释,修改server_name、ssl_certificate、ssl_certificate_key、location中的root等字段。

...
 # HTTPS server
 #
 server {
  listen  443 ssl;
  server_name xxx.com(网址访问地址);

 ssl on;
  ssl_certificate  xxx.crt(服务器证书);
  ssl_certificate_key xxx.key(服务器证书私钥);

  ssl_session_cache shared:SSL:1m;
  ssl_session_timeout 5m;

  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;

  location / {
   root xxx(前端代码目录);
   index index.html index.htm;
  }
 }
...

启动nginx,即可对外提供服务了。

3.3 浏览器访问

到现在我们已经在服务器端配置了https访问,但是浏览器访问的时候会提示证书错误,因为浏览器现在还不认识我们的证书,不确定它是不是安全的。就像我们都拿着公安部颁发的身份证去证明身份没问题,但是你拿着自己颁发的一个身份证去证明别人就不一定会信了,因为没人知道你的颁发机构是什么情况。

所以我们要把服务器证书的颁发机构,即我们上面生成的根证书添加到浏览器的信任列表中,具体操作方法:如果是windows系统,可以直接双击根证书文件,点击安装,安装到受信任的根证书颁发机构,这时候就可以顺利访问了。

以上就是nginx如何将http访问的网站改成https访问的详细内容,更多关于nginx http访问改成https访问的资料请关注我们其它相关文章!

(0)

相关推荐

  • Nginx实现https网站配置代码实例

    https基础 443端口. 用于了一个叫密钥的东西. 不要觉得这些东西您不了解也能实现. 不可能的. 1.先成密钥.咱们直接linux下生成 假设nginx目录为 /usr/local/nginx-1.2.9 接下来 cd /usr/local/nginx-1.2.9/conf/; mkdir ssl; cd ssl; #下面开始创建密钥.如果不熟悉完全不必理会为什么这么做照做就可以了 openssl genrsa -des3 -out server.key 1024;#这一步会让您输入密码.

  • nginx配置https加密访问的详细教程

    环境: 1台 CentOS Linux release 7.5.1804 (Core) 关闭防火墙和selinux 开始部署: 1.安装nginx @1.1 依赖安装 yum -y install wget gcc gcc-c++ pcre-devel openssl-devel @1.2 nginx软件包下载 wget http://nginx.org/download/nginx-1.19.0.tar.gz @1.3 解压.编译.安装 [root@localhost ~]# tar xf n

  • Nginx配置同一个域名同时支持http与https两种方式访问实现

    Nginx配置同一个域名http与https两种方式都可访问,证书是阿里云上免费申请的 server { listen 80; listen 443 ssl; ssl on; server_name 域名; index index.html index.htm index.php default.html default.htm default.php; ssl_certificate /usr/local/nginx/cert/21402058063066221.pem; //下载申请后阿里s

  • Nginx域名转发https访问的实现

    说在前面的话: 突然接到这么一个任务,将多个域名的访问必须使用https的转发访问,其实对Niginx的使用很简单,文档也很齐全(不管是腾讯云还是阿里云),入坑的原因是对Niginx服务器的陌生和走的弯路. 1.弯路:Tomcat支持SSL 腾讯云Tomcat服务器证书配置 修改server.xml文件 <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSL

  • 阿里云Nginx配置https实现域名访问项目(图文教程)

    第一步:签署第三方可信任的 SSL 证书 证书可以直接在阿里云里面申请免费的ssl证书 登录阿里云账号,在上方搜索栏内搜索ssl,点击ssl证书(应用安全) 来到这个页面后点击购买证书 如图选择免费版ssl证书,点击支付 支付完成后跳转到控制台首页,点击证书申请 填写完证书申请表单之后点击下一步 点击验证显示验证成功后再提交审核 审核通过后点击下载按钮 选择nginx旁边的下载 下载解压后得到一个.key和.pem文件,到这里,我们的证书申请工作已经做完了,下面可以开始配置https了 第二步:

  • Nginx配置https原理及实现过程详解

    使用linux实用工具certbot来生成https证书 这个工具是生成Let's Encrypt证书, Let's Encrypt数字证书认证机构,Let's Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务 提供免费的SSL/TLS证书 2015年12月3日,该服务进入公测阶段,正式面向公众. 2016年4月12日,该项目正式离开Beta阶段. 到2016年9月9日,Let's Encrypt 已经发放 1000 万张证书. 因此对于大部分中小型网站来说,是一个值得

  • 使用Nginx实现301跳转至https的根域名示例代码

    基于 SEO 和安全性的考量,需要进行 301 跳转,以下使用 Nginx 作通用处理 实现结果 需要将以下地址都统一跳转到 https 的根域名 https://chanvinxiao.com http://chanvinxiao.com (不带 www 的 http) http://www.chanvinxiao.com (带 www 的 http) https://www.chanvinxiao.com (带 www 的 https) 301 与 302 的区别 301是永久重定向,302

  • Nginx同时支持Http和Https的配置详解

    现在的网站支持Https几乎是标配功能,Nginx能很好的支持Https功能.下面列举一个配置同时支持Http和Https的功能. 需要注意的是:既然选择使用Https,就是为了保证通信安全,那么就没必要再用Http进行通信了.在URL中还支持Http的方式,主要是为了用户不知道网站支持Https,还是使用Http的方式进行访问.这时Nginx后台需要自动将Http请求转成Https的方式,这样就又能支持Http,又能保证通信安全了. 废话不多说,下面直接贴一个Nginx支持Http和Https

  • nginx配置ssl实现https的方法示例

    环境说明 服务器系统:Ubuntu  18.04 64位 nginx:1.14 这篇文章主要是记录配置 https 的步骤,就不介绍申请ca证书的相关细节了 这里有免费的 ssl 证书:https://cloud.tencent.com/act/pro/ssl 我是西部数码的域名,在腾讯云申请的证书 申请证书并签发后,把证书先下载到本地 1.安装 nginx $ apt-get update // 更新软件 $ apt-get install nginx // 安装nginx 2.配置 ca 证

  • Nginx反向代理多域名的HTTP和HTTPS服务的实现

    当前Nginx已经反向代理了两个网站,分别是基于Windows的IIS和Linux的Apach服务器,提供网页服务. 现在有新项目的网页需要对外提供服务,需要在代理服务器上增加另外一个网站,使用HTTPS访问以及HTTP自动跳转HTTPS.由于新网页是静态页面,所以使用Docker部署在Nginx代理服务器上.相关的certificates是通过let's encrypt来获取的,都是单独的证书,没有申请通配符形式的证书. 在Nginx代理端部署SSL证书即可,后端不需要部署SSL也可以实现HT

随机推荐