Skip to content

Commit fde0a4a

Browse files
author
John Simons
committed
Add support for tls/amqps
1 parent e8a251e commit fde0a4a

File tree

5 files changed

+73
-2
lines changed

5 files changed

+73
-2
lines changed

src/NServiceBus.RabbitMQ.Tests/ConnectionString/ConnectionConfigurationTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,5 +94,23 @@ public void Should_inform_that_multiple_hosts_are_not_supported()
9494
Assert.That(exception.Message, Is.StringContaining("Multiple hosts are no longer supported"));
9595
Assert.That(exception.Message, Is.StringContaining("consider using a load balancer"));
9696
}
97+
98+
[Test]
99+
public void Should_set_default_use_tls()
100+
{
101+
Assert.AreEqual(defaults.UseTls, false);
102+
}
103+
104+
[Test]
105+
public void Should_set_default_cert_path()
106+
{
107+
Assert.AreEqual(defaults.CertPath, "");
108+
}
109+
110+
[Test]
111+
public void Should_set_default_retry_cert_passphrase()
112+
{
113+
Assert.AreEqual(defaults.CertPassphrase, null);
114+
}
97115
}
98116
}

src/NServiceBus.RabbitMQ.Tests/ConnectionString/ConnectionStringParserTests.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class ConnectionStringParserTests
1010
{
1111
const string connectionString =
1212
"virtualHost=Copa;username=Copa;host=192.168.1.1:1234;password=abc_xyz;port=12345;requestedHeartbeat=3;" +
13-
"prefetchcount=2;maxRetries=4;usePublisherConfirms=true;maxWaitTimeForConfirms=02:03:39;retryDelay=01:02:03";
13+
"prefetchcount=2;maxRetries=4;usePublisherConfirms=true;maxWaitTimeForConfirms=02:03:39;retryDelay=01:02:03;useTls=true;certPath=/path/to/client/keycert.p12;certPassPhrase=abc123";
1414

1515
[Test]
1616
public void Should_correctly_parse_full_connection_string()
@@ -29,6 +29,9 @@ public void Should_correctly_parse_full_connection_string()
2929
Assert.AreEqual(connectionConfiguration.UsePublisherConfirms, true);
3030
Assert.AreEqual(connectionConfiguration.MaxWaitTimeForConfirms, new TimeSpan(2, 3, 39)); //02:03:39
3131
Assert.AreEqual(connectionConfiguration.RetryDelay, new TimeSpan(1, 2, 3)); //01:02:03
32+
Assert.AreEqual(connectionConfiguration.UseTls, true);
33+
Assert.AreEqual(connectionConfiguration.CertPath, "/path/to/client/keycert.p12");
34+
Assert.AreEqual(connectionConfiguration.CertPassphrase, "abc123");
3235
}
3336

3437
[Test]
@@ -146,6 +149,34 @@ public void Should_parse_the_virtual_hostname()
146149
Assert.AreEqual("myVirtualHost", connectionConfiguration.VirtualHost);
147150
}
148151

152+
[Test]
153+
public void Should_parse_use_tls()
154+
{
155+
var parser = new ConnectionStringParser(new SettingsHolder());
156+
var connectionConfiguration = parser.Parse("host=localhost;useTls=true");
157+
158+
Assert.AreEqual(true, connectionConfiguration.UseTls);
159+
Assert.AreEqual(5671, connectionConfiguration.Port);
160+
}
161+
162+
[Test]
163+
public void Should_parse_the_cert_path()
164+
{
165+
var parser = new ConnectionStringParser(new SettingsHolder());
166+
var connectionConfiguration = parser.Parse("host=localhost;certPath=/path/keyfile.p12");
167+
168+
Assert.AreEqual("/path/keyfile.p12", connectionConfiguration.CertPath);
169+
}
170+
171+
[Test]
172+
public void Should_parse_the_cert_passphrase()
173+
{
174+
var parser = new ConnectionStringParser(new SettingsHolder());
175+
var connectionConfiguration = parser.Parse("host=localhost;certPassphrase=abc123");
176+
177+
Assert.AreEqual("abc123", connectionConfiguration.CertPassphrase);
178+
}
179+
149180
[Test]
150181
public void Should_throw_if_given_badly_formatted_max_wait_time_for_confirms()
151182
{

src/NServiceBus.RabbitMQ/Config/ConnectionConfiguration.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ public IDictionary<string, object> ClientProperties
4343
get { return clientProperties; }
4444
private set { clientProperties = value; }
4545
}
46+
public bool UseTls { get; set; }
47+
48+
public string CertPath { get; set; }
49+
50+
public string CertPassphrase { get; set; }
4651

4752
public HostConfiguration HostConfiguration { get; private set; }
4853

@@ -68,6 +73,9 @@ private void SetDefaultClientProperties()
6873
var applicationName = Path.GetFileName(applicationNameAndPath);
6974
var applicationPath = Path.GetDirectoryName(applicationNameAndPath);
7075
var hostname = RuntimeEnvironment.MachineName;
76+
UseTls = false;
77+
CertPath = String.Empty;
78+
CertPassphrase = null;
7179

7280
clientProperties.Add("client_api", "NServiceBus");
7381
clientProperties.Add("nservicebus_version", version);

src/NServiceBus.RabbitMQ/Config/ConnectionStringParser.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ where match.Success
3333
}))
3434
pair.Property.SetValue(connectionConfiguration, TypeDescriptor.GetConverter(pair.Property.PropertyType).ConvertFromString(pair.Value), null);
3535

36+
if (connectionConfiguration.UseTls && !ContainsKey("port"))
37+
{
38+
connectionConfiguration.Port = 5671;
39+
}
40+
3641
if (ContainsKey("host"))
3742
{
3843
connectionConfiguration.ParseHosts(this["host"] as string);

src/NServiceBus.RabbitMQ/Connection/RabbitMqConnectionFactory.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace NServiceBus.Transports.RabbitMQ.Connection
22
{
33
using System;
4+
using System.Security.Authentication;
45
using global::RabbitMQ.Client;
56
using NServiceBus.Transports.RabbitMQ.Config;
67

@@ -31,7 +32,15 @@ public RabbitMqConnectionFactory(ConnectionConfiguration connectionConfiguration
3132
UserName = Configuration.UserName,
3233
Password = Configuration.Password,
3334
RequestedHeartbeat = Configuration.RequestedHeartbeat,
34-
ClientProperties = Configuration.ClientProperties
35+
ClientProperties = Configuration.ClientProperties,
36+
Ssl =
37+
{
38+
ServerName = connectionConfiguration.HostConfiguration.Host,
39+
CertPath = connectionConfiguration.CertPath,
40+
CertPassphrase = connectionConfiguration.CertPassphrase,
41+
Version = SslProtocols.Tls12,
42+
Enabled = connectionConfiguration.UseTls
43+
}
3544
};
3645
}
3746

0 commit comments

Comments
 (0)