我最初在 securitystackexchange 中发布了这个问题,但没有得到我期望的答案,而且我发现这个主题也适合这里。
我需要连接不同位置的两台服务器,以便其中一台服务器(Linux 堆栈)使用基于 cron 的作业向另一台服务器(Windows 堆栈) -Windows Server 2008 R2- 发出 HTTP 定期请求。
在 Windows 机器上,我将设置一个具有自签名证书的 IIS,以便向客户端进行身份验证(通过固定证书)并通过 SSL 加密连接。
我还将配置 IIS 以请求客户端证书来验证 Linux 服务器。我已经完成了配置证书身份验证的教程,其中涉及将证书映射到用户帐户。
我不喜欢为远程服务器创建用户帐户的想法,因为我不希望任何人使用该帐户登录(Windows)服务器。
考虑到这一点:
1)我是否真的需要在 Windows 服务器中创建用户来启用客户端证书授权?
2)如果我确实需要在 Windows 机器上创建一个帐户,那么我需要设置什么才能使该用户无法登录 Windows 服务器,也无法执行除了向 IIS 进行身份验证之外的任何其他操作?
注意:active-directory 标签由 @Lex Li 添加。我会保留它,但我明白(我可能错了)在面向 Internet 的服务器中使用 active directory 存在安全问题。
答案1
我假设除了使用 http 之外没有其他方法来完成您的特定任务,因为我不知道这些 https 请求的目的是什么(否则很高兴知道 Windows 10 和 Server 2016 最终支持 SSH)。
我不知道您使用的是哪个版本的 IIS/Windows,因此我给您一个一般性描述:
1)是的,原因如下:
客户端证书适用于验证, 不是为了授权,不要混淆这两者。授权是你对角色/规则/权限等所做的操作,身份验证是让服务器知道你是谁并向它证明你的身份(客户端证书有点像身份证)。
答案也是肯定的,证书始终与某种帐户相关联。这与 Linux 的处理方式没有什么不同。身份验证完成后,授权即可应用。或者一般来说:仅仅因为我知道你是谁,并不意味着我会让你进入我的卧室。这取决于你是同事还是家人。
如果对 IIS 的请求存在任何类型的安全问题(我认为是这样),那么也应该有防火墙规则、VPN 等,并且您也不希望未经身份验证的用户在您的服务器上触发某种响应。
2)不允许外部访问服务器。
如果您在互联网上拥有 Windows Server,则一定要确保您不想要的人无法访问它,防火墙是必需的!因此,您关于无法“登录 Windows Server”的问题有点误导。IIS 是 Windows Server 的一部分,并使用其用户/组/权限系统。例如,如果您查看 Windows 组“用户”,您会看到
你想要做的是这样的:
为此任务创建用户并删除全部用户组/角色。那么用户就完全没有权限了。然后,在 IIS 中授予他仅希望他有权访问的目录的读取权限。我想您的指南应该涵盖了这部分。
注意:AD 和 IIS 都可以处理客户端证书。如果您使用的是独立 IIS,那么您的方法是正确的;在 AD 环境中,您需要在 AD 中配置客户端证书,而不是在 IIS 中。