我的组织已经成功使用服务代理、对话安全性几年了。
我有一个我想配置的新服务代理实例,但我相信我遇到了这样一种情况,即新代理实例被错误地放入数据库的顺序(现有代理实例就位)导致新代理实例失败。
我的错误在目标服务器上;找不到证书。无法检索安全上下文。
我的情况是:源服务器 A (dmz) 发送到目标服务器 B,其中已经存在代理实例以两种方式但在不同的数据库上发送消息。
测试 1:我调换了源服务器和目标服务器的角色,使服务器 B 成为我的源,服务器 A (dmz) 成为我的目标,同时使用相同的数据库。这是成功的。
测试 2:我删除了测试 1 实例并在每台服务器上创建了 2 个新数据库。我再次重新配置了源和目标角色,现在从服务器 A (dmz) 发送到服务器 B,这是成功的。新数据库中只配置了一个服务代理实例,因此放置顺序不是问题。
过去,当我们第一次设置开发/测试环境时,我遇到过这种情况;但是,情况略有不同,因为许多其他代理实例也在失败。不是全部,而是一些。一旦我意识到发生了什么,删除所有实例并以特定顺序重新创建它们,源实例在目标实例之前,情况就解决了。
我认为服务代理会自动在正确的订单位置添加一个新实例。
我认为必须在特定订单内配置代理实例是否正确?如果是这样,我如何在不中断现有代理的情况下添加新的代理实例?
请分享您的想法和建议。
设置探查器跟踪并监控
Security Audit/Audit Broker Conversation
. 重现这个问题,应该产生这个类的一个事件。查看活动详情。它应该会发光。我认为两个事件列(不记得是哪个,MSDN 似乎省略了信息)包含问题证书颁发者名称/序列号,这应该进一步帮助缩小使用哪个证书的范围。[编辑] 在所有三个数据库上运行此查询查询以找出哪些服务和远程服务绑定使用哪些证书:
[根据您的数据进行编辑]
1) 在 PRd2DB 服务选项卡中:数据库中的所有服务均由 拥有
dbo
,并dbo
拥有 4 个对 SSB 有效的证书(证书 ID 280、288、327 和 357)。xls 没有正确捕获expiry_date
(全是 00:00.0)所以我不能确定使用了哪个,但是如果结果来自我在上面发布的查询,那么将使用第一个,证书 ID 280 和序列号号54 89 2c 1a...
。所以这是用于识别来自该数据库的任何服务的证书。2) 在 RSB 选项卡的 Prd2 中,查询显示了带有私钥的证书和没有私钥的证书的混合。这永远不应该发生。与 RSB 关联的用户代表远程服务的身份,应该只拥有没有私钥的证书。此外,所有远程服务只有一个 RSB 用户(principal_id 为 58 的用户)。每个远程服务应该有不同的身份用户。现在,在 PrdDB2 中启动的任何对话,对于任何服务,都将使用带有序列号的证书
34 99 ...
。3) DMZDB1 服务:与prd2 相同,属于
dbo
dbo 的所有服务有3 个证书(ids 335、341、371),使用的是带有序列号的证书74 0a ...
4)DMZDB RSBs:有两个RSB用户,一个principal id 9和一个30。principal id 9混合了证书,其中一些有私钥,而principal id 30只有一个证书,但那个证书有私钥.
总的来说,配置存在严重缺陷,难怪它不起作用。您不了解远程服务绑定的作用和正确配置。
请遵守以下规则。考虑一个远程服务“Foo”:
remote_user_Foo
remote_user_Foo
)为每个远程服务创建一个 RSBremote_user_Foo
不应该有私钥SEND
)remote_user_Foo
下次运行显示 RSB 的查询时,它应该显示与远程服务绑定数相等的行数,
principal_id
值应该都是不同的,并且pvt_key_encryption_type
应该都是NA
.