使用自定义 DNS 将 Azure Pack 连接到 Windows 服务器的服务总线
Connect Azure Pack to Service Bus for Windows Server with Custom DNS
我正在尝试将 Azure Pack 配置为使用带有自定义 DNS 的 Windows 服务器 1.1 的服务总线。所有都在 Windows Azure 中的一台虚拟机 (Windows Server 2012 R2) 上运行。
我在关注这篇文章:
http://roysvork.wordpress.com/2014/06/14/developing-against-service-bus-for-windows-1-1/
将 FramDNS "servicebus" 替换为 "mymachine.cloudapp.net",并创建证书:
SelfSSL /N:CN=mymachine.cloudapp.net /V:1000 /T
在 Windows Azure 虚拟机上:
- 我将设置公共 DNS:mymachine.cloudapp.net
- 开放端口:10354,10355,10356,10359,10000-10004
- 主机文件中:127.0.0.1 mymachine.cloudapp.net
- 创建证书
SelfSSL /N:CN=mymachine.cloudapp.net /V:1000 /T
PowerShell:
Stop-SBFarm –Verbose
Set-SBFarm -FarmDns 'mymachine.cloudapp.net'
Update-SBHost –Verbose
Start-SBFarm –Verbose
New-SBAuthorizationRule -NamespaceName ServiceBusDefaultNamespace -Name MainRule -Rights Manage, Send, Listen
之后我可以使用 SAS 连接到我的 ServiceBusDefaultNamespace:
const string sharedAccessKeyName = "MainRule";
const string sharedAccessKey = "<key>";
var sasTokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(sharedAccessKeyName, sharedAccessKey);
string token = sasTokenProvider.GetWebTokenAsync("https://mymachine.cloudapp.net:10355/ServiceBusDefaultNamespace","NotUsedWithSAS", false, TimeSpan.FromSeconds(15)).Result;
var existingTokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(token);
var namespaceManger = new NamespaceManager("https://mymachine.cloudapp.net:10355/ServiceBusDefaultNamespace", existingTokenProvider);
var result = namespaceManger.TopicExists("DefaultTopic");
工作完美。但是,当我尝试从 Azure Pack 租户门户创建服务总线命名空间时 - 在 Log an Exception 中:
Namespace Provisioning Exception. TrackingId: . SystemId: . Namespace:
SomeNamespace. Method: Activating. Exception:
System.Net.Http.HttpRequestException: An error occurred while sending
the request. ---> System.Net.WebException: The underlying connection
was closed: Could not establish trust relationship for the SSL/TLS
secure channel. --->
System.Security.Authentication.AuthenticationException: The remote
certificate is invalid according to the validation procedure.
以及命名空间的状态 - 正在激活。
请帮忙!
我找到了解决方案并写了 post 关于使用自定义 DNS、'Black Jack' 等为 Windows 服务器 On-Premise 配置服务总线。
Post 为俄语,但包含许多屏幕截图和 code/script 样本:
http://habrahabr.ru/post/254059/
描述:
不解释完整的配置过程,很难简单回答。
基本上,证书中的问题:
在具有服务总线的虚拟机上:
1) 使用命令行工具生成访问证书makecert.exe:
(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin)
makecert.exe -r -pe -n "CN=hello-habr-sb.cloudapp.net, CN=hello-habr-sb" -e 11/11/2022 -eku 1.3.6.1.5.5.7.3.2 -ss My -sr "LocalMachine" -sky Exchange -a sha256 -sy 24 -len 2048 "hello-habr-sb.cloudapp.net.cer"
在客户端服务器上将其导入证书 – 本地计算机(受信任的根 CA)。
2) 使用 PowerShell 更改 DNS:
Get-SBFarm
Stop-SBFarm –Verbose
Set-SBFarm -FarmDns 'hello-habr-sb.cloudapp.net'
Update-SBHost –Verbose
Start-SBFarm –Verbose
3) 使用 PowerShell 设置 SAS-Key:
New-SBAuthorizationRule -NamespaceName ServiceBusDefaultNamespace -Name MainRule -Rights Manage, Send, Listen
输出如下所示:
KeyName : MainRule
PrimaryKey : ylF6GWmH6rlZg1ekQMQrLQnht4kwVFWHAfyB8HkrZvM=
SecondaryKey : ZYBpdiCYgZNfwOC37x6DEDLxhv+qan6CJZT0vG3GvTk=
Rights : {Manage, Send, Listen}
CreatedTime : 3/22/2015 12:53:23 AM
ModifiedTime : 3/22/2015 12:53:23 AM
ConnectionString : Endpoint=sb://hello-habr-sb.cloudapp.net/ServiceBusDefaultNamespace;
StsEndpoint=https://hello-habr-sb.cloudapp.net:10355/ServiceBusDefaultNamespace;
RuntimePort=10354;
ManagementPort=10355;
SharedAccessKeyName=MainRule;
SharedAccessKey=ylF6GWmH6rlZg1ekQMQrLQnht4kwVFWHAfyB8HkrZvM=
4) 将 link 添加到主机:
(C:\Windows\System32\drivers\etc)
127.0.0.1 hello-habr-sb.cloudapp.net
在带有 Azure Pack 的 VM 上:
1) 使用命令行实用程序生成证书 makecert.exe è pvk2pfx.exe:
(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin)
对于服务器:
makecert -r -pe -n "CN=WAP Portals" -ss CA -a sha1 -sky signature -cy authority -sv WAPPortals.pvk WAPPortals.cer
makecert -pe -n "CN=hello-habr-wap.cloudapp.net" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -ic WAPPortals.cer -iv WAPPortals.pvk -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -sv WAPLocalServer.pvk WAPLocalServer.cer
pvk2pfx -pvk WAPLocalServer.pvk -spc WAPLocalServer.cer -pfx WAPLocalServer.pfx
对于客户:
makecert -pe -n "CN=WAPMainDeveloper" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.2 -ic WAPPortals.cer -iv WAPPortals.pvk -sv WAPClient.pvk WAPClient.cer
pvk2pfx -pvk WAPClient.pvk -spc WAPClient.cer -pfx WAPClient.pfx -po HelloHabr2015
2) 在证书中导入 WAPPortals.cer – 服务器上的本地计算机(受信任的根 CA)。
3) 在证书中的服务器和客户端上导入 WAPClient.pfx – 本地计算机和当前用户(个人)。
4) 将 link 添加到主机:
(C:\Windows\System32\drivers\etc)
127.0.0.1 hello-habr-wap.cloudapp.net
5) 使用 PowerShell(作为管理员)更改 Azure Pack 管理站点的 FQDN 站点名称:
租户站点:
Import-Module -Name MgmtSvcConfig
Set-MgmtSvcFqdn -Namespace "TenantSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30081 -Server "hello-habr-wap\SQLEXPRESS"
Set-MgmtSvcFqdn -Namespace "AuthSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30071 -Server "hello-habr-wap\SQLEXPRESS"
Set-MgmtSvcRelyingPartySettings -Target Tenant -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30071/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
Set-MgmtSvcIdentityProviderSettings -Target Membership -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30081/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
管理站点:
Import-Module -Name MgmtSvcConfig
Set-MgmtSvcFqdn -Namespace "AdminSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30091 -Server "hello-habr-wap\SQLEXPRESS"
Set-MgmtSvcFqdn -Namespace "WindowsAuthSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30072 -Server "hello-habr-wap\SQLEXPRESS"
Set-MgmtSvcRelyingPartySettings -Target Admin -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30072/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
Set-MgmtSvcIdentityProviderSettings -Target Windows -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30091/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
6) 做其他事情:
更改 IIS 中的绑定;
select hello-habr-wap.cloudapp.net WAP 门户证书;
检查 IIS 上需要 SSL;
最后全部在 3 个虚拟机上运行:
数据库
https://hello-habr-db.cloudapp.net:1433 - MSSQL Server
Windows 服务器的服务总线
https://hello-habr-sb.cloudapp.net:10355 - HttpPort (ManagementPort)
https://hello-habr-sb.cloudapp.net:10354 - TcpPort (RuntimePort)
Windows 服务器的 Azure 包
https://hello-habr-wap.cloudapp.net:30081 - TenantSite
https://hello-habr-wap.cloudapp.net:30091 - AdminSite
希望这对您有所帮助!如果你有一些错误 - 请阅读我的 post(公开部分剧透):
http://habrahabr.ru/post/254059/
- 使用数据库配置 VM:
"Настройка виртуальной машины с базой данных"
- 为 Windows 服务器配置带有服务总线的虚拟机:
"Настройка виртуальной машины с Windows 服务器的服务总线"
- 使用 Azure 包配置 VM:
"Настройка виртуальной машины с Azure Pack"
- Windows 服务器的服务总线的简单 .NET (C#) 客户端:
"Проверка работы 服务总线"
我正在尝试将 Azure Pack 配置为使用带有自定义 DNS 的 Windows 服务器 1.1 的服务总线。所有都在 Windows Azure 中的一台虚拟机 (Windows Server 2012 R2) 上运行。
我在关注这篇文章:
http://roysvork.wordpress.com/2014/06/14/developing-against-service-bus-for-windows-1-1/
将 FramDNS "servicebus" 替换为 "mymachine.cloudapp.net",并创建证书:
SelfSSL /N:CN=mymachine.cloudapp.net /V:1000 /T
在 Windows Azure 虚拟机上:
- 我将设置公共 DNS:mymachine.cloudapp.net
- 开放端口:10354,10355,10356,10359,10000-10004
- 主机文件中:127.0.0.1 mymachine.cloudapp.net
- 创建证书
SelfSSL /N:CN=mymachine.cloudapp.net /V:1000 /T
PowerShell:
Stop-SBFarm –Verbose
Set-SBFarm -FarmDns 'mymachine.cloudapp.net'
Update-SBHost –Verbose
Start-SBFarm –Verbose
New-SBAuthorizationRule -NamespaceName ServiceBusDefaultNamespace -Name MainRule -Rights Manage, Send, Listen
之后我可以使用 SAS 连接到我的 ServiceBusDefaultNamespace:
const string sharedAccessKeyName = "MainRule";
const string sharedAccessKey = "<key>";
var sasTokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(sharedAccessKeyName, sharedAccessKey);
string token = sasTokenProvider.GetWebTokenAsync("https://mymachine.cloudapp.net:10355/ServiceBusDefaultNamespace","NotUsedWithSAS", false, TimeSpan.FromSeconds(15)).Result;
var existingTokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(token);
var namespaceManger = new NamespaceManager("https://mymachine.cloudapp.net:10355/ServiceBusDefaultNamespace", existingTokenProvider);
var result = namespaceManger.TopicExists("DefaultTopic");
工作完美。但是,当我尝试从 Azure Pack 租户门户创建服务总线命名空间时 - 在 Log an Exception 中:
Namespace Provisioning Exception. TrackingId: . SystemId: . Namespace: SomeNamespace. Method: Activating. Exception: System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
以及命名空间的状态 - 正在激活。
请帮忙!
我找到了解决方案并写了 post 关于使用自定义 DNS、'Black Jack' 等为 Windows 服务器 On-Premise 配置服务总线。 Post 为俄语,但包含许多屏幕截图和 code/script 样本:
http://habrahabr.ru/post/254059/
描述:
不解释完整的配置过程,很难简单回答。
基本上,证书中的问题:
在具有服务总线的虚拟机上:
1) 使用命令行工具生成访问证书makecert.exe:
(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin)
makecert.exe -r -pe -n "CN=hello-habr-sb.cloudapp.net, CN=hello-habr-sb" -e 11/11/2022 -eku 1.3.6.1.5.5.7.3.2 -ss My -sr "LocalMachine" -sky Exchange -a sha256 -sy 24 -len 2048 "hello-habr-sb.cloudapp.net.cer"
在客户端服务器上将其导入证书 – 本地计算机(受信任的根 CA)。
2) 使用 PowerShell 更改 DNS:
Get-SBFarm
Stop-SBFarm –Verbose
Set-SBFarm -FarmDns 'hello-habr-sb.cloudapp.net'
Update-SBHost –Verbose
Start-SBFarm –Verbose
3) 使用 PowerShell 设置 SAS-Key:
New-SBAuthorizationRule -NamespaceName ServiceBusDefaultNamespace -Name MainRule -Rights Manage, Send, Listen
输出如下所示:
KeyName : MainRule
PrimaryKey : ylF6GWmH6rlZg1ekQMQrLQnht4kwVFWHAfyB8HkrZvM=
SecondaryKey : ZYBpdiCYgZNfwOC37x6DEDLxhv+qan6CJZT0vG3GvTk=
Rights : {Manage, Send, Listen}
CreatedTime : 3/22/2015 12:53:23 AM
ModifiedTime : 3/22/2015 12:53:23 AM
ConnectionString : Endpoint=sb://hello-habr-sb.cloudapp.net/ServiceBusDefaultNamespace;
StsEndpoint=https://hello-habr-sb.cloudapp.net:10355/ServiceBusDefaultNamespace;
RuntimePort=10354;
ManagementPort=10355;
SharedAccessKeyName=MainRule;
SharedAccessKey=ylF6GWmH6rlZg1ekQMQrLQnht4kwVFWHAfyB8HkrZvM=
4) 将 link 添加到主机:
(C:\Windows\System32\drivers\etc)
127.0.0.1 hello-habr-sb.cloudapp.net
在带有 Azure Pack 的 VM 上:
1) 使用命令行实用程序生成证书 makecert.exe è pvk2pfx.exe:
(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin)
对于服务器:
makecert -r -pe -n "CN=WAP Portals" -ss CA -a sha1 -sky signature -cy authority -sv WAPPortals.pvk WAPPortals.cer
makecert -pe -n "CN=hello-habr-wap.cloudapp.net" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -ic WAPPortals.cer -iv WAPPortals.pvk -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -sv WAPLocalServer.pvk WAPLocalServer.cer
pvk2pfx -pvk WAPLocalServer.pvk -spc WAPLocalServer.cer -pfx WAPLocalServer.pfx
对于客户:
makecert -pe -n "CN=WAPMainDeveloper" -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.2 -ic WAPPortals.cer -iv WAPPortals.pvk -sv WAPClient.pvk WAPClient.cer
pvk2pfx -pvk WAPClient.pvk -spc WAPClient.cer -pfx WAPClient.pfx -po HelloHabr2015
2) 在证书中导入 WAPPortals.cer – 服务器上的本地计算机(受信任的根 CA)。
3) 在证书中的服务器和客户端上导入 WAPClient.pfx – 本地计算机和当前用户(个人)。
4) 将 link 添加到主机:
(C:\Windows\System32\drivers\etc)
127.0.0.1 hello-habr-wap.cloudapp.net
5) 使用 PowerShell(作为管理员)更改 Azure Pack 管理站点的 FQDN 站点名称:
租户站点:
Import-Module -Name MgmtSvcConfig
Set-MgmtSvcFqdn -Namespace "TenantSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30081 -Server "hello-habr-wap\SQLEXPRESS"
Set-MgmtSvcFqdn -Namespace "AuthSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30071 -Server "hello-habr-wap\SQLEXPRESS"
Set-MgmtSvcRelyingPartySettings -Target Tenant -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30071/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
Set-MgmtSvcIdentityProviderSettings -Target Membership -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30081/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
管理站点:
Import-Module -Name MgmtSvcConfig
Set-MgmtSvcFqdn -Namespace "AdminSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30091 -Server "hello-habr-wap\SQLEXPRESS"
Set-MgmtSvcFqdn -Namespace "WindowsAuthSite" -FullyQualifiedDomainName "hello-habr-wap.cloudapp.net" -Port 30072 -Server "hello-habr-wap\SQLEXPRESS"
Set-MgmtSvcRelyingPartySettings -Target Admin -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30072/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
Set-MgmtSvcIdentityProviderSettings -Target Windows -MetadataEndpoint "https://hello-habr-wap.cloudapp.net:30091/FederationMetadata/2007-06/FederationMetadata.xml" -ConnectionString "Data Source=hello-habr-wap\SQLEXPRESS;User ID=sa;Password=HelloHabr2015" –DisableCertificateValidation
6) 做其他事情:
更改 IIS 中的绑定;
select hello-habr-wap.cloudapp.net WAP 门户证书;
检查 IIS 上需要 SSL;
最后全部在 3 个虚拟机上运行:
数据库
https://hello-habr-db.cloudapp.net:1433 - MSSQL Server
Windows 服务器的服务总线
https://hello-habr-sb.cloudapp.net:10355 - HttpPort (ManagementPort) https://hello-habr-sb.cloudapp.net:10354 - TcpPort (RuntimePort)
Windows 服务器的 Azure 包
https://hello-habr-wap.cloudapp.net:30081 - TenantSite https://hello-habr-wap.cloudapp.net:30091 - AdminSite
希望这对您有所帮助!如果你有一些错误 - 请阅读我的 post(公开部分剧透):
http://habrahabr.ru/post/254059/
- 使用数据库配置 VM:
"Настройка виртуальной машины с базой данных"
- 为 Windows 服务器配置带有服务总线的虚拟机:
"Настройка виртуальной машины с Windows 服务器的服务总线"
- 使用 Azure 包配置 VM:
"Настройка виртуальной машины с Azure Pack"
- Windows 服务器的服务总线的简单 .NET (C#) 客户端:
"Проверка работы 服务总线"