记录一次 SharePoint 通过 IIS 配置 HTTPS 后无法访问的定位过程。

访问地址:https://WIN-1NMHTJKVJBO/

一、问题现象

在 IIS 中使用“服务器证书 → 创建自签名证书”生成证书后,访问:

text
https://WIN-1NMHTJKVJBO/

证书信息类似:

text
颁发给(Subject):WIN-1NMHTJKVJBO.ms.test.com
颁发者(Issuer):WIN-1NMHTJKVJBO.ms.test.com

颁发者和颁发给相同是自签名证书的正常现象。IIS 管理器创建自签名证书时会根据服务器名称生成证书,不能在界面中直接修改 CN、Issuer 或 Subject。

二、通过 Edge CDP 查看实际错误

通过 Edge 的 CDP 端口 9222 查看页面,而不是只根据证书页面猜测错误。

1. 短主机名的错误

访问:

text
https://win-1nmhtjkvjbo/

Edge 实际显示:

text
ERR_SSL_KEY_USAGE_INCOMPATIBLE

这不是普通的“自签名证书不受信任”错误,而是证书的 Key Usage/EKU 不符合 HTTPS 服务端证书要求。常见要求包括:

  • 增强型密钥用法(EKU):Server Authentication
  • OID:1.3.6.1.5.5.7.3.1
  • 密钥用法:Digital Signature
  • RSA 证书通常还需要:Key Encipherment

2. FQDN 的错误

尝试访问证书中的完整名称:

text
https://WIN-1NMHTJKVJBO.ms.test.com/

Edge 实际显示:

text
DNS_PROBE_FINISHED_NXDOMAIN

说明该完整域名没有 DNS 解析记录。此时请求尚未进入 TLS 握手和证书校验阶段,因此需要先解决 DNS/hosts 问题。

三、为什么 IIS 自签名证书不能直接修改 CN

IIS 的“创建自签名证书”功能比较简单:

  • Subject/CN 通常根据当前服务器名称自动生成;
  • 自签名证书由自己签发自己,因此 Subject 和 Issuer 相同;
  • IIS 管理器没有编辑 CN、SAN、Issuer 的功能;
  • 证书创建后不能直接修改字段,只能重新生成或申请新证书。

“证书友好名称”只是证书管理器中的显示名称,不会改变 CN、Issuer,也不会影响证书的实际身份校验。

四、修复方案

方案 A:使用 IIS 自签名证书对应的完整域名

如果使用 IIS 生成的证书,应访问证书中的名称:

text
https://WIN-1NMHTJKVJBO.ms.test.com/

但客户端必须能将该域名解析到 SharePoint/IIS 服务器 IP。

正式环境:配置 DNS A 记录

在内部 DNS 的 ms.test.com 区域添加:

text
WIN-1NMHTJKVJBO.ms.test.com    A    <SharePoint/IIS服务器IP>

客户端验证:

cmd
nslookup WIN-1NMHTJKVJBO.ms.test.com

或:

powershell
Resolve-DnsName WIN-1NMHTJKVJBO.ms.test.com

临时测试:修改 hosts

在每台访问客户端的以下文件中,以管理员身份添加:

text
C:\Windows\System32\drivers\etc\hosts

内容示例:

text
192.168.1.100    WIN-1NMHTJKVJBO.ms.test.com

然后刷新 DNS 缓存:

cmd
ipconfig /flushdns

DNS 解决的是“域名找到服务器”,不会解决证书信任问题。自签名证书还需要导入访问客户端的“受信任的根证书颁发机构”。

方案 B:使用 PowerShell 生成自定义自签名服务器证书

如果必须支持短主机名和完整域名,可以在服务器上用管理员 PowerShell 重新生成,并显式指定 SAN 和服务器身份验证用途:

powershell
New-SelfSignedCertificate `
  -Type SSLServerAuthentication `
  -DnsName "win-1nmhtjkvjbo","WIN-1NMHTJKVJBO.ms.test.com" `
  -CertStoreLocation "Cert:\LocalMachine\My" `
  -FriendlyName "SharePoint HTTPS - WIN-1NMHTJKVJBO" `
  -KeyAlgorithm RSA `
  -KeyLength 2048 `
  -HashAlgorithm SHA256 `
  -NotAfter (Get-Date).AddYears(3)

检查证书:

powershell
Get-ChildItem Cert:\LocalMachine\My |
  Where-Object {$_.FriendlyName -eq "SharePoint HTTPS - WIN-1NMHTJKVJBO"} |
  Format-List Subject,Issuer,EnhancedKeyUsageList,NotAfter,Thumbprint

在证书详细信息中确认“使用者备用名称”(SAN)至少包含:

text
DNS=win-1nmhtjkvjbo
DNS=WIN-1NMHTJKVJBO.ms.test.com

然后在 IIS 中打开:

text
站点 → 目标 SharePoint 网站 → 绑定 → https → 编辑 → SSL 证书

选择新证书。

方案 C:使用内部 CA,正式环境推荐

如果环境中有 AD CS 或其他内部 CA,建议申请服务器证书,而不是长期使用 IIS 简单自签名证书。证书应包含:

text
SAN:
  win-1nmhtjkvjbo
  WIN-1NMHTJKVJBO.ms.test.com
 
EKU:
  Server Authentication

此时证书形式通常为:

text
颁发给:WIN-1NMHTJKVJBO
颁发者:公司内部 CA

只要客户端信任内部 CA,通常不需要逐台客户端手动信任服务器证书。

五、最终验证清单

  1. nslookup 或 Resolve-DnsName 能解析实际访问的域名;
  2. IIS 站点绑定类型为 https,端口为 443;
  3. IIS HTTPS 绑定选择了正确证书;
  4. 证书 SAN 包含浏览器地址栏中的主机名;
  5. EKU 包含 Server Authentication;
  6. 自签名证书或内部 CA 已被客户端信任;
  7. 必要时检查 SSL 绑定:
cmd
netsh http show sslcert

六、结果

后来更换为 Exchange 生成的证书后访问恢复正常。由此确认,原 IIS 自签名证书的问题重点在于其服务端证书用途/扩展配置不适合当前 HTTPS 场景;同时,使用 FQDN 访问时还必须配置 DNS 或 hosts。Exchange 证书通常带有更适合 IIS HTTPS 的 Server Authentication EKU 和 Key Usage,因此替换后可以正常完成 TLS 握手。

注意:证书字段中的“公用名(CN)”不能替代 SAN。现代浏览器主要根据 SAN 校验主机名,生成或申请证书时应显式配置 SAN。