一、核心需求解析:为何需要域名与HTTPS?
1.1 域名访问的三大价值
在局域网考试场景中,使用自定义域名(如exam.local)替代IP+端口组合(如192.168.1.100:8080)具有显著优势:
- 管理效率提升:统一域名规则便于权限分配(如
teacher.exam.local、student.exam.local) - 访问体验优化:避免记忆复杂数字组合,支持中文域名解析(需终端支持)
- 服务隔离能力:通过子域名区分不同服务(如
api.exam.local指向后端服务)
1.2 HTTPS加密的必要性
考试系统涉及人脸识别、屏幕监控、音频采集等敏感操作,必须满足:
- 功能完整性:主流浏览器强制要求摄像头/麦克风访问需HTTPS
- 数据防篡改:防止考试过程中题目被中间人替换
- 合规性要求:教育行业数据安全规范明确加密传输要求
- 信任标识:避免浏览器地址栏显示”不安全”警告影响考生心态
二、本地域名解析系统搭建方案
2.1 技术选型对比
| 方案类型 | 实施难度 | 扩展性 | 维护成本 | 典型场景 |
|---|---|---|---|---|
| hosts文件修改 | ★ | ☆ | ★★★ | 单台设备临时测试 |
| 自建DNS服务器 | ★★★ | ★★★★ | ★★ | 中大型局域网长期使用 |
| 云服务商DNS解析 | ★★ | ★★★★★ | ★ | 需要公网访问的混合部署 |
推荐方案:采用开源DNS服务器(如某开源DNS服务软件)实现本地解析,兼顾灵活性与可控性。
2.2 容器化部署实战
以Docker环境为例,完整部署流程如下:
2.2.1 环境准备
# 创建专用目录结构(推荐)mkdir -p ~/exam-infra/{pihole/etc-pihole,pihole/etc-dnsmasq.d,nginx/certs}
2.2.2 DNS服务配置
# docker-compose.yml 示例version: '3'services:dns-server:image: pihole/pihole:latestports:- "53:53/tcp"- "53:53/udp"environment:TZ: 'Asia/Shanghai'WEBPASSWORD: 'your_admin_password'volumes:- ~/exam-infra/pihole/etc-pihole:/etc/pihole- ~/exam-infra/pihole/etc-dnsmasq.d:/etc/dnsmasq.ddns:- 127.0.0.1- 8.8.8.8restart: unless-stopped
2.2.3 域名解析规则
在/etc/dnsmasq.d/02-exam.conf中添加:
address=/exam.local/192.168.1.100address=/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
openssl genrsa -aes256 -out ca.key 4096openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \-subj "/C=CN/ST=Beijing/L=Beijing/O=Exam CA/CN=Exam Root CA"
3.2.2 签发服务证书
# 生成私钥openssl genrsa -out exam.local.key 2048# 生成证书请求openssl req -new -key exam.local.key -out exam.local.csr \-subj "/C=CN/ST=Beijing/L=Beijing/O=Exam System/CN=exam.local"# 使用CA签发证书openssl x509 -req -days 730 -in exam.local.csr -CA ca.crt -CAkey ca.key \-CAcreateserial -out exam.local.crt
3.3 Nginx配置示例
server {listen 443 ssl;server_name exam.local;ssl_certificate /certs/exam.local.crt;ssl_certificate_key /certs/exam.local.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {proxy_pass http://exam-backend:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
四、高级配置技巧
4.1 证书自动续期
使用Cron定时任务实现证书自动更新:
# 每月1日凌晨3点执行更新0 3 1 * * /usr/bin/certbot renew --quiet --no-self-upgrade && \/usr/bin/systemctl reload nginx
4.2 多域名通配符配置
对于需要支持多个子域名的场景:
server {listen 443 ssl;server_name *.exam.local;ssl_certificate /certs/wildcard.exam.local.crt;ssl_certificate_key /certs/wildcard.exam.local.key;# ...其他配置同上}
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相关报错
- 确认摄像头/麦克风权限已授予
通过上述方案实施,可构建安全可靠的局域网考试环境,既满足教育机构对数据安全的要求,又提升系统管理的便捷性。实际部署时建议先在测试环境验证所有功能,再逐步推广到生产环境。