部署 企业应用中,在外网不通的情况下,如何使用 https?

dggy · January 22, 2021 · Last by dggy replied at January 28, 2021 · 810 hits

企业内网也会出现数据安全问题:

  • 员工特别多,什么岗位都有,流动性很大,数据安全就没有保障
  • 浏览器(chrome)会在左上角显示“不安全”,特别刺眼(主要原因)

刚才找到一种方法:生成 https 证书,配后端、导入到客户端(chrome -> 设置 -> 隐私设置和安全性 -> 安全 -> 管理证书)

但,每台机器都导入证书的话,也很麻烦,有没有方法自己搭建证书认证服务?

根证书可能要用自己的了

搞了几天,终于搞好了,记一下笔记

之前

先准备一个干净的 nginx,最好新装一个,然后搭建一个 http 服务器(以 ubuntu 为例):

安装 nginx
sudo apt install nginx

安装好后,会自动启动
访问localhost检查一下,如果不成功的话,看看 80 端口是否被占用
检查好后,在命令行启动 nginx

sudo nginx

nginx 的日志读写需要 sudo 权限

之后再检查一下是否启动成功

重新配置 nginx

nginx 的配置文件里(在/etc/nginx/nginx.conf目录下),有很多内容
我想,很少有人能认全,多余的配置只会产生迷惑,先全删掉
填入以下内容:

user root; # 以 root 用户启动 nginx
events {}

http {
  server {
    root /home/gy/static; # http 服务器的跟路径设为 /home/gy/static
  }
}

然后,让 nginx 重新加载配置:

sudo nginx -s reload

然后,随便在根目录下(也就是本例的 /home/gy/static)造个文件
比如 index.css,里面随便写一些东西
再访问localhost/index.css,如果成功了,说明以上配置没问题,一个新的 nginx 装好了

openssl

这个工具是主角,确保它已经安装,并且版本在 1.1.0 以上:

openssl version

版本老的话,就删了:

sudo apt remove openssl

安装:

sudo apt install openssl

准备工作完成

签 https 到 ip

配置 openssl

先对配置文件做一些修改,位置:/etc/ssl/openssl.cnf

  1. req_extensions
    在 [ req ] 模块,添加req_extensions = v3_req 默认应该是有的,只需要解除注释

  2. req_distinguished_name 确保 [ req_distinguished_name ] 模块下没有 0.xxx 如果有,删除 0.(所有)
    比如:0.organizationName = Organization Name (eg, company) 改成:organizationName = Organization Name (eg, company)

  3. alt_names [ v3_req ] 模块下添加:subjectAltName=@alt_names在最后添加新的 [ alt_names ] 模块:

    [ alt_names ]
    IP.1 = 192.168.100.100
    

    [ ip ] 别忘换成你自己的服务器的 ip

准备一个目录

在任意位置,准备一个目录,放你的证书、密钥等文件,比如/home/gy/ssl.
然后,需要下面的目录和文件:

mkdir -p demoCA/newcerts
touch ./demoCA/index.txt ./demoCA/serial
echo "01">> ./demoCA/serial
生成证书、密钥

切换到/home/gy/ssl目录

下面有要求输入信息的,按实际输入即可 需要特别注意的是,有一项是 common name,那里必须输入服务器的 ip 地址

  1. 生成机构密钥 bash openssl genrsa -out ca.key 2048
  2. 生成机构证书 bash openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -config /etc/ssl/openssl.cnf
  3. 生成服务器密钥 bash openssl genrsa -out server.key 2048
  4. 生成服务器证书 bash openssl req -new -out server.csr -key server.key -config /etc/ssl/openssl.cnf
  5. 机构签署证书 bash openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config /etc/ssl/openssl.cnf

其中有要求输入信息的,按实际输入即可 需要特别注意的是,有一项是 common name,那里必须输入服务器的 ip 地址

之后

证书生成好了,把证书发给客户端和服务器

服务端

修改 nginx 的配置文件:/etc/nginx/nginx.conf,修改好后:

user root;
events {
}

http {
  server {
    listen 443 ssl;
    ssl_certificate /home/gy/ssl/server.crt;
    ssl_certificate_key /home/gy/ssl/server.key;

    root /home/gy/static;
  }
}

重新加载 nginx 配置:

sudo nginx -s reload
客户端

用 u 盘或某种工具,把上一步生成的ca.crt文件搞到客户端电脑,双击即可安装
step1 step2 step3

step4 重启 浏览器

完成

缺陷及解决

服务器 ip 变化
  • 方案一:重新生成证书,交给服务器、交给客户端
  • 方案二:绑定域名
绑定域名的两种方式
  • host 文件(每个客户端都要修改,部署较麻烦)
  • dns

原文链接

干货啊!正好有需要。

Reply to xiaox

嘿嘿,共勉

直接 dhcp 建立 host 映射 然后申请域名证书就行了吧

Reply to RoyZheng

外网不通(不可以上百度、淘宝等)的情况下,可以吗

You need to Sign in before reply, if you don't have an account, please Sign up first.