局域网考试系统域名与HTTPS安全配置全攻略

一、核心需求解析:为何需要域名与HTTPS?

1.1 域名访问的三大价值

在局域网考试场景中,使用自定义域名(如exam.local)替代IP+端口组合(如192.168.1.100:8080)具有显著优势:

  • 管理效率提升:统一域名规则便于权限分配(如teacher.exam.localstudent.exam.local
  • 访问体验优化:避免记忆复杂数字组合,支持中文域名解析(需终端支持)
  • 服务隔离能力:通过子域名区分不同服务(如api.exam.local指向后端服务)

1.2 HTTPS加密的必要性

考试系统涉及人脸识别、屏幕监控、音频采集等敏感操作,必须满足:

  • 功能完整性:主流浏览器强制要求摄像头/麦克风访问需HTTPS
  • 数据防篡改:防止考试过程中题目被中间人替换
  • 合规性要求:教育行业数据安全规范明确加密传输要求
  • 信任标识:避免浏览器地址栏显示”不安全”警告影响考生心态

二、本地域名解析系统搭建方案

2.1 技术选型对比

方案类型 实施难度 扩展性 维护成本 典型场景
hosts文件修改 ★★★ 单台设备临时测试
自建DNS服务器 ★★★ ★★★★ ★★ 中大型局域网长期使用
云服务商DNS解析 ★★ ★★★★★ 需要公网访问的混合部署

推荐方案:采用开源DNS服务器(如某开源DNS服务软件)实现本地解析,兼顾灵活性与可控性。

2.2 容器化部署实战

以Docker环境为例,完整部署流程如下:

2.2.1 环境准备

  1. # 创建专用目录结构(推荐)
  2. mkdir -p ~/exam-infra/{pihole/etc-pihole,pihole/etc-dnsmasq.d,nginx/certs}

2.2.2 DNS服务配置

  1. # docker-compose.yml 示例
  2. version: '3'
  3. services:
  4. dns-server:
  5. image: pihole/pihole:latest
  6. ports:
  7. - "53:53/tcp"
  8. - "53:53/udp"
  9. environment:
  10. TZ: 'Asia/Shanghai'
  11. WEBPASSWORD: 'your_admin_password'
  12. volumes:
  13. - ~/exam-infra/pihole/etc-pihole:/etc/pihole
  14. - ~/exam-infra/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
  15. dns:
  16. - 127.0.0.1
  17. - 8.8.8.8
  18. restart: unless-stopped

2.2.3 域名解析规则

/etc/dnsmasq.d/02-exam.conf中添加:

  1. address=/exam.local/192.168.1.100
  2. address=/api.exam.local/192.168.1.101

三、HTTPS证书配置全流程

3.1 证书类型选择

证书类型 有效期 验证方式 适用场景
自签名证书 1-3年 无需验证 纯内网环境
私有CA签发 1-5年 内部验证 跨部门信任体系
公开CA证书 1-2年 域名验证 需要公网访问的混合部署

内网推荐方案:使用某开源工具生成私有CA,为考试系统签发证书。

3.2 证书生成实战

3.2.1 创建私有CA

  1. openssl genrsa -aes256 -out ca.key 4096
  2. openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \
  3. -subj "/C=CN/ST=Beijing/L=Beijing/O=Exam CA/CN=Exam Root CA"

3.2.2 签发服务证书

  1. # 生成私钥
  2. openssl genrsa -out exam.local.key 2048
  3. # 生成证书请求
  4. openssl req -new -key exam.local.key -out exam.local.csr \
  5. -subj "/C=CN/ST=Beijing/L=Beijing/O=Exam System/CN=exam.local"
  6. # 使用CA签发证书
  7. openssl x509 -req -days 730 -in exam.local.csr -CA ca.crt -CAkey ca.key \
  8. -CAcreateserial -out exam.local.crt

3.3 Nginx配置示例

  1. server {
  2. listen 443 ssl;
  3. server_name exam.local;
  4. ssl_certificate /certs/exam.local.crt;
  5. ssl_certificate_key /certs/exam.local.key;
  6. ssl_protocols TLSv1.2 TLSv1.3;
  7. ssl_ciphers HIGH:!aNULL:!MD5;
  8. location / {
  9. proxy_pass http://exam-backend:8080;
  10. proxy_set_header Host $host;
  11. proxy_set_header X-Real-IP $remote_addr;
  12. }
  13. }

四、高级配置技巧

4.1 证书自动续期

使用Cron定时任务实现证书自动更新:

  1. # 每月1日凌晨3点执行更新
  2. 0 3 1 * * /usr/bin/certbot renew --quiet --no-self-upgrade && \
  3. /usr/bin/systemctl reload nginx

4.2 多域名通配符配置

对于需要支持多个子域名的场景:

  1. server {
  2. listen 443 ssl;
  3. server_name *.exam.local;
  4. ssl_certificate /certs/wildcard.exam.local.crt;
  5. ssl_certificate_key /certs/wildcard.exam.local.key;
  6. # ...其他配置同上
  7. }

4.3 终端设备配置

  • Windows系统:通过组策略强制使用内部DNS服务器
  • 移动设备:配置静态IP时指定DNS为自建服务器地址
  • Linux终端:修改/etc/resolv.conf或配置NetworkManager

五、常见问题排查

5.1 域名无法解析

  • 检查容器日志:docker logs dns-server
  • 验证DNS配置:dig @127.0.0.1 exam.local
  • 确认客户端DNS设置正确

5.2 HTTPS连接失败

  • 检查证书有效期:openssl x509 -in cert.crt -noout -dates
  • 验证证书链完整性:openssl verify -CAfile ca.crt exam.local.crt
  • 检查防火墙是否放行443端口

5.3 功能异常

  • 浏览器开发者工具查看控制台错误
  • 检查考试系统日志中的SSL相关报错
  • 确认摄像头/麦克风权限已授予

通过上述方案实施,可构建安全可靠的局域网考试环境,既满足教育机构对数据安全的要求,又提升系统管理的便捷性。实际部署时建议先在测试环境验证所有功能,再逐步推广到生产环境。