香港服务器如何在 Windows Server 2019 上部署加密策略,满足跨境金融业务的合规要求?

那天夜里,香港电讯的工程师把最后一根 LC 光纤插回交换机,我盯着机柜里两台新上的服务器:一台运行应用层 API,另一台托管报表与清算数据库。第二天早上,内地总部要连到这套系统走跨境对账与清算,审计部的清单摊在键盘边:数据在静态、传输、使用三个阶段都要加密,密钥要分权、分域、可追溯,TLS1.0/1.1 必须关停,BitLocker 必须用 XTS-AES-256,IPsec 只允许强算法套件。
我把工单写成 Runbook,深呼吸,开始了这一次“既要性能、也要合规”的部署。
目标与适用场景
目标:在香港机房的 Windows Server 2019 上,为跨境金融业务(从内地/其他地区接入香港系统)建立“静态+传输+使用中”的系统级加密与密钥治理方案,满足审计与合规检查(如 HKMA SPM 信息安全要求、PDPO 个人资料私隐条例、PCI DSS 对持卡数据的控制等)的可解释、可验证落地。
范围:IIS/API 服务、SQL Server(或等价数据库)、RDP 远程运维、服务间东西向流量、磁盘与备份、证书与密钥治理、日志与审计。
不做什么:不依赖云厂商托管 KMS;以本地/专线为主,能与既有 AD/PKI 无缝集成。
基础架构与硬件参数(实机房清单)
| 角色 | 型号/规格 | 关键点 |
|---|---|---|
| App01(API) | 2× Intel Xeon Silver 4314(AES-NI 支持),128GB RAM;2× 960GB NVMe(RAID1),2× 1.92TB NVMe(RAID1) | 启用 BitLocker XTS-AES-256;IIS + .NET 6;双 10GbE(X710)做 Teaming |
| DB01(清算库) | Intel Xeon Gold 6330,256GB RAM;4× 3.84TB NVMe(RAID10);HBA 直通 | SQL Server 2019;TDE + 备份加密;独立数据盘与日志盘 |
| 机架 HSM(可选) | Thales/Gemalto Luna SA 或 Utimaco,PKCS#11/KMIP | 密钥分域与审计不可抵赖;可选 HashiCorp Vault + HSM |
| 交换机 | 2× 10/25GbE ToR,MLAG | 东西向流量支持 IPsec/ESP MTU 头部裕量 |
| 管理 | iLO/iDRAC 带独立管控网 | 禁止承载业务/密钥流量 |
经验:凡是涉及大量对称加密(BitLocker、IPsec、TLS),AES-NI 的 CPU 指令集是“白给的性能优化”。在香港机房上设备前,实测下 OpenSSL 的 speed -evp aes-256-gcm,心里更踏实。
总体加密策略蓝图(落地清单)
静态数据(At-Rest)
系统盘与数据盘:BitLocker XTS-AES-256,TPM 2.0 + PIN;恢复密钥入库 AD DS;备份文件启用 Backup Encryption(AES-256)。
数据库:SQL Server TDE(使用内/外部密钥),备份 WITH ENCRYPTION。
传输数据(In-Transit)
外部接入:IIS 强制 TLS 1.2,禁用 TLS 1.0/1.1;采用 ECDHE_RSA + AES_GCM 套件;服务器证书最少 RSA 3072 或 ECDSA P-256。
内部东西向:Windows IPsec(Domain Isolation + Server Isolation),对关键端口(1433/443/9443 等)Require 加密。
使用中(In-Use)与密钥治理
证书与密钥:企业 PKI(AD CS)+(可选)HSM,密钥分域(HK 机房内生成与保存);EFS 仅用于特定敏感文件夹并配置 DRA(数据恢复代理)。
审计:Advanced Audit Policy 开启对象访问、策略变更、证书服务、BitLocker 事件;集中到 SIEM 并做不可改写存档(WORM/NAS)。
分阶段落地:我在机房里是这样做的
阶段 0:基线与合规映射(把审计清单翻成技术任务)
| 合规控制要点 | 技术措施(WS2019) | 验证点 |
|---|---|---|
| 关闭弱协议/套件 | 禁用 TLS 1.0/1.1、禁 CBC、优先 GCM | IISCrypto/Qualys SSL Labs 或 Get-TlsCipherSuite |
| 磁盘全盘加密 | BitLocker XTS-AES-256、TPM+PIN、Recovery Key 入库 AD | manage-bde -status、事件日志 |
| 数据库加密 | SQL Server TDE + 备份加密 | sys.dm_database_encryption_keys |
| 内网强认证传输 | IPsec Require(Kerberos/证书) | Get-NetIPsecRule、实际抓包 ESP |
| 密钥分离 | 密钥在港生成/存放(HSM/PKI) | 密钥托管与审计报表 |
| 审计与追溯 | 高级审计策略、BitLocker/Schannel/IPsec 日志 | SIEM 仪表盘、WORM 归档 |
小技巧:把审计条目转成“可检测的验证点”,比如能用一条 PowerShell 或一个报表证明它存在,后面复核省时一半。
阶段 1:TLS 基线(IIS/RDP/系统组件)
1) 关闭 TLS1.0/1.1、启用并优先 TLS1.2(仅 WS2019 支持到 TLS 1.2)
Windows Server 2019 没有内建 TLS 1.3,不要在报告里写错。
# 以管理员 PowerShell 执行
# 关闭 TLS 1.0/1.1(Server/Client 两端)
$base='HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols'
New-Item "$base\TLS 1.0\Server" -Force | Out-Null
New-ItemProperty "$base\TLS 1.0\Server" -Name Enabled -Type DWord -Value 0 -Force
New-Item "$base\TLS 1.0\Client" -Force | Out-Null
New-ItemProperty "$base\TLS 1.0\Client" -Name Enabled -Type DWord -Value 0 -Force
New-Item "$base\TLS 1.1\Server" -Force | Out-Null
New-ItemProperty "$base\TLS 1.1\Server" -Name Enabled -Type DWord -Value 0 -Force
New-Item "$base\TLS 1.1\Client" -Force | Out-Null
New-ItemProperty "$base\TLS 1.1\Client" -Name Enabled -Type DWord -Value 0 -Force
# 确保 TLS 1.2 打开
New-Item "$base\TLS 1.2\Server" -Force | Out-Null
New-ItemProperty "$base\TLS 1.2\Server" -Name Enabled -Type DWord -Value 1 -Force
New-Item "$base\TLS 1.2\Client" -Force | Out-Null
New-ItemProperty "$base\TLS 1.2\Client" -Name Enabled -Type DWord -Value 1 -Force
2) 设置安全套件顺序(GPO 或本机注册表)
建议仅保留:
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
如果你使用 ECDSA 证书,再增加对应的 ECDHE_ECDSA_* 套件。
生产做法:在 计算机配置 → 管理模板 → 网络 → SSL 配置设置 中启用“SSL 密码套件顺序”,写入逗号分隔字符串。
3) RDP 强制 TLS
GPO:计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 安全
“要求使用特定安全层”:SSL(TLS 1.2)
“设置加密级别”:高
为 RDP 绑定企业证书(远程桌面服务配置或 WMI/PowerShell)。
阶段 2:BitLocker 全盘加密(XTS-AES-256)
我选择先数据盘后系统盘。系统盘加密要重启,窗口期要与业务协调。
1) GPO 统一策略(推荐)
计算机配置 → 管理模板 → Windows 组件 → BitLocker 驱动器加密
“选择 XTS-AES 256 位”
“允许使用 TPM+PIN”;最小 PIN 长度 ≥ 8
“将 BitLocker 恢复信息存储到 Active Directory 域服务”
“仅加密已用空间(新服务器更快)”
2) 实机命令
# 查看 TPM
Get-Tpm
# 系统盘(C:)添加 TPM + PIN 保护器并启用 XTS-AES-256
$SecurePin = Read-Host "输入启动PIN(≥8位)" -AsSecureString
Enable-BitLocker -MountPoint "C:" -EncryptionMethod XtsAes256 -UsedSpaceOnly `
-TpmAndPinProtector -Pin $SecurePin
# 数据盘(D:, E:)
Enable-BitLocker -MountPoint "D:" -EncryptionMethod XtsAes256 -UsedSpaceOnly -TpmProtector
Enable-BitLocker -MountPoint "E:" -EncryptionMethod XtsAes256 -UsedSpaceOnly -TpmProtector
# 确认状态
manage-bde -status
坑 1:没有把恢复密钥写入 AD。后面主板换 TPM、服务器改动 BIOS 时,PIN 卡住无法引导,所幸我在 GPO 开启了“写入 AD”,救回。
坑 2:NVMe 批量加密时 I/O 抖动。生产时分波次执行 -UsedSpaceOnly,并在 SQL 维护窗口跑系统盘。
阶段 3:SQL Server 加密(TDE + 备份加密)
-- 在 master 创建数据库主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '强口令_仅临时使用';
-- 创建证书(可从企业 CA 申请并导入到 SQL 证书存储)
CREATE CERTIFICATE TDECert WITH SUBJECT = 'HK-DB01-TDE';
-- 为目标数据库启用 TDE
USE [FinanceClearing];
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE TDECert;
ALTER DATABASE [FinanceClearing] SET ENCRYPTION ON;
-- 备份时启用加密
BACKUP DATABASE [FinanceClearing]
TO DISK = 'E:\backup\FinanceClearing_full.bak'
WITH COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = TDECert),
STATS = 10;
坑 3:忘记把 TDE 证书安全备份(含私钥)。我在 HSM/安全金库里做了离线备份,并把还原步骤写进 DR Runbook。
坑 4:跨机迁库时,先导入证书(含私钥)再还原 TDE 库,否则只能得到一坨密文文件。
阶段 4:Windows IPsec(内部东西向强制加密)
我用 域隔离 + 服务器隔离 的组合:默认允许域内相互可见,但对关键端口/段落 Require IPsec。Kerberos 做计算机认证足够简洁;若跨林/非域,则改用证书。
1) 快速上手(PowerShell)
# 主模式与快速模式算法(保守强度,兼容性好)
New-NetIPsecMainModeCryptoSet -Name "MM-Strong" -Encryption AES256 -Integrity SHA256 -DHGroup ECP256
New-NetIPsecQuickModeCryptoSet -Name "QM-Strong" -Encryption AES256 -Integrity SHA256
# 认证集(Kerberos,域内最省心)
New-NetIPsecPhase1AuthSet -Name "Auth-Kerberos" -AuthenticationMethod Kerberos
# 规则:App01 <-> DB01 端口 1433 强制加密
$local = "10.20.10.21" # App01
$remote= "10.20.20.31" # DB01
New-NetIPsecRule -DisplayName "App_to_DB_1433_Require" `
-InboundSecurity Require -OutboundSecurity Require `
-LocalAddress $local -RemoteAddress $remote `
-Protocol TCP -LocalPort Any -RemotePort 1433 `
-Phase1AuthSet "Auth-Kerberos" `
-QuickModeCryptoSet "QM-Strong" -MainModeCryptoSet "MM-Strong"
坑 5:NAT/MTU。若中间有负载或防火墙做 NAT,需要开启 IPsec NAT-T(UDP 4500),并给 MTU 留裕量(ESP 有额外头部)。我在 ToR 上把对应 VLAN 的 MTU 提高到 9100,再用 ping -f -l 试探碎片点。
坑 6:时间不同步 会导致 Kerberos 失败,IPsec 协商不上。NTP 指到同一时钟源,这类“玄学问题”直接消失。
阶段 5:EFS(按需)与 DRA(数据恢复代理)
我只在极少数需要落地到磁盘的小型敏感文件(证书请求、清算明文临时件)上用 EFS,并强制启用 DRA,避免人员离职/证书损坏造成数据不可读。
GPO:计算机配置 → Windows 设置 → 安全设置 → 公钥策略 → 加密文件系统
添加 数据恢复代理(DRA) 证书(保存在 HSM/金库中,双人双钥领用)。
阶段 6:证书与 PKI(企业 CA 或 HSM 集成)
AD CS 部署要点
企业根 CA 离线,仅签发中级 CA;在线发放由中级 CA 完成。
模板:Web 服务器(IIS/RDP)、计算机(IPsec)、代码签名(可选)。
最小密钥:RSA 3072 或 ECDSA P-256/P-384;有效期按审计要求设置,建议 Web 证书 ≤ 398 天。
自动注册
GPO → 计算机配置 → Windows 设置 → 安全设置 → 公钥策略 → 证书服务客户端 – 自动注册:启用,自动更新。
HSM/金库(可选)
关键服务器证书/SQL EKM 密钥放入 HSM;通过 PKCS#11/KSP 与 Windows 集成,或 SQL EKM Provider。
运维与审计:我如何“把话说清楚”
高级审计策略(AuditPol)
# 对象访问、策略更改、认证、密钥服务相关
AuditPol /set /subcategory:"File System" /success:enable /failure:enable
AuditPol /set /subcategory:"Policy Change" /success:enable /failure:enable
AuditPol /set /subcategory:"Authentication Policy Change" /success:enable /failure:enable
AuditPol /set /subcategory:"Certificate Services" /success:enable /failure:enable
AuditPol /set /subcategory:"IPsec Main Mode" /success:enable /failure:enable
AuditPol /set /subcategory:"IPsec Quick Mode" /success:enable /failure:enable
AuditPol /set /subcategory:"BitLocker" /success:enable /failure:enable
收集与存档:把 Windows 事件(安全、应用、Schannel、IPsec、BitLocker)集中到 SIEM,开启 WORM/NAS 不可改写 归档,保留 ≥ 1 年(按合规要求调整)。
关键事件举例:
- 登录/失败:4624/4625
- 策略变更:4719、4907
- 证书/Schannel:36874/36888(TLS 告警)
- BitLocker:Microsoft-Windows-BitLocker/BitLocker Management 日志通道
- IPsec:Microsoft-Windows-IPsec 相关通道
性能与压测(我的实测数据)
我用 ntttcp + SQLIO(或 DiskSpd)做了启用前后对比。结果如下(代表性数字,仅供参考,机房可复测入档):
| 场景 | 启用前 | 启用后 | 变化 |
|---|---|---|---|
| NVMe 顺序读(DiskSpd,64K,队列 16) | 5.4 GB/s | 5.1 GB/s | -5.6% |
| NVMe 随机写(4K,队列 32) | 290K IOPS | 270K IOPS | -6.9% |
| App↔DB(10GbE,ntttcp 单流) | 9.2 Gbps | 8.5 Gbps(IPsec) | -7.6% |
| API HTTPS TPS(JMeter,95 线) | 100% 基线 | 94%(TLS1.2 GCM) | -6% |
经验:AES-NI + GCM 套件让开销在可接受范围内;SQL 的瓶颈更多在日志盘与锁竞争,BitLocker 的影响小于想象。
交付物(审计马上要的“证据包”)
配置导出:
- secedit /export /cfg baseline.inf(基线)
- reg export "HKLM\...\SCHANNEL" schannel.reg(TLS)
- Get-BitLockerVolume | Format-List * > bitlocker.txt
- Get-NetIPsecRule | fl * > ipsec_rules.txt
- SQL:SELECT * FROM sys.dm_database_encryption_keys
扫描报表:SSL/TLS 扫描(Qualys/自建脚本)、端口抓包(确认 ESP/TCPDUMP 证据)。
常见坑与我在现场的解决办法(真坑真招)
TLS 扫描爆红:仍有 CBC 套件
解法:GPO 里把“SSL 密码套件顺序”只保留 GCM;重启 Schannel 服务(多数情况下重启服务器)。
IPsec 偶发断流
解法:排查中间设备是否丢弃 UDP 4500;ToR/核心是否有 ECMP 导致对称性问题;统一 NTP。
BitLocker 启动卡 PIN,远程黑屏
解法:出机房前确认 iLO/Console 可用;确保恢复密钥在 AD;必要时改用 TPM Only + OS 帐户登陆 MFA(按风险接受度)。
SQL 备份加密导致备份窗口增加
解法:备份落地 NVMe,再复制到归档;或启用备份压缩 + 多通道,提升吞吐。
RDP 证书不受信任
解法:统一用企业 CA 自动注册计算机证书,RDP 绑定该证书;客户端信任链预置。
我用到的关键命令与脚本(速查表)
# 查看 TLS 套件
Get-TlsCipherSuite | Select-Object Name
# 导出 BitLocker 恢复密钥到文件(仅限授权场景)
(Get-BitLockerVolume -MountPoint "C:").KeyProtector | Where-Object {$_.KeyProtectorType -eq 'RecoveryPassword'}
# 快速核对 IPsec 是否在跑(ESP)
Get-NetIPsecMainModeSA
Get-NetIPsecQuickModeSA
# SQL TDE 状态
sqlcmd -Q "SELECT DB_NAME(database_id) AS DBName, encryption_state, percent_complete FROM sys.dm_database_encryption_keys"
变更回滚与应急(Runbook 片段)
TLS 回滚:保留 .reg 备份;若出现老旧客户端无法接入,临时放开 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(审计备案,限时)。
BitLocker 恢复:iLO 远控 → 输入恢复密钥;或在维护窗口暂时移除 PIN 保护器后重启。
IPsec 降级:将关键规则从 Require 改 Request,保业务连通,等网络侧修复后再回切。
结尾:那一刻,红灯不再闪
夜里两点半,SIEM 的告警面板安静下来。TLS 扫描全绿,IPsec SA 稳定,SQL 的 TDE 进度 100%。我给审计部发了“证据包”,把冷热咖啡换了位置。
第二天上午,深圳的清算系统穿越专线连到我们香港的 API,延迟稳定在 7~9ms,批量对账跑完,唯一的异常是一个遗留客户端尝试用 TLS1.0 被拒。我在变更单上写下最后一行:“密钥在港、本地可证,静态与传输加密全栈可验证。”
机柜的风仍旧冷,但我知道,这一夜的每个改动,都会在未来的审计和事故里,替我们挡掉不必要的风险。
附:一页式“加密策略”总览(便于贴在工单/维保壁纸)
- TLS:仅 TLS 1.2;GCM 套件;RSA3072 或 ECDSA P-256;RDP 绑定企业证书。
- 磁盘:BitLocker XTS-AES-256;TPM+PIN;恢复密钥入 AD。
- 数据库:TDE + 备份加密;证书/密钥离线备份。
- 东西向:IPsec(Kerberos/证书)对关键端口 Require;NAT-T 与 MTU 校验。
- EFS/DRA:仅极少数敏感落地文件;DRA 双人双钥。
- PKI/HSM:密钥在港生成存储;自动注册与更新;证书有效期控制。
- 审计:高级审计策略 + SIEM + WORM 归档;变更可追溯。
- 性能:AES-NI + GCM;压测与基线留档;影响 < 10% 为目标。
如果你也要在香港机房落一套跨境金融系统,加密不是“最后一步”,而是从第一天的机架、地址规划、证书申请、到 Runbook 都要贯穿的“第一原则”。祝你“绿灯一路”,审计顺利。