[Feature] Add support for client certificate password and test with real services that require client certificate auth (#32)

* Add support for client certificate password and test with some real services that require client certificates. Also update so when proxying, the path and query will be passed to the proxied api.

* Add correct param

* Update to read certificate from store instead of file

* Add support for client certificate password and test with some real services that require client certificates. Also update so when proxying, the path and query will be passed to the proxied api.

* Add correct param

* Fixup PR issues

* Add support for client certificate password and test with some real services that require client certificates. Also update so when proxying, the path and query will be passed to the proxied api.

* Add correct param

* Fixup PR issues
This commit is contained in:
phillee007
2017-06-16 21:36:10 +12:00
committed by Stef Heyenrath
parent c29b88eb43
commit 49ce2f0dfb
11 changed files with 149 additions and 47 deletions

View File

@@ -18,8 +18,8 @@ namespace WireMock.ResponseBuilders
/// With Proxy URL using X509Certificate2.
/// </summary>
/// <param name="proxyUrl">The proxy url.</param>
/// <param name="clientX509Certificate2Filename">The X509Certificate2 file to use for client authentication.</param>
/// <param name="clientX509Certificate2ThumbprintOrSubjectName">The X509Certificate2 file to use for client authentication.</param>
/// <returns>A <see cref="IResponseBuilder"/>.</returns>
IResponseBuilder WithProxy([NotNull] string proxyUrl, [CanBeNull] string clientX509Certificate2Filename);
IResponseBuilder WithProxy([NotNull] string proxyUrl, [CanBeNull] string clientX509Certificate2ThumbprintOrSubjectName);
}
}

View File

@@ -35,9 +35,9 @@ namespace WireMock.ResponseBuilders
public string ProxyUrl { get; private set; }
/// <summary>
/// The client X509Certificate2Filename to use.
/// The client X509Certificate2 Thumbprint or SubjectName to use.
/// </summary>
public string X509Certificate2Filename { get; private set; } = null;
public string X509Certificate2ThumbprintOrSubjectName { get; private set; }
/// <summary>
/// Gets the response message.
@@ -247,7 +247,7 @@ namespace WireMock.ResponseBuilders
/// <param name="proxyUrl">The proxy url.</param>
/// <returns>A <see cref="IResponseBuilder"/>.</returns>
[PublicAPI]
public IResponseBuilder WithProxy(string proxyUrl)
public IResponseBuilder WithProxy([NotNull] string proxyUrl)
{
Check.NotEmpty(proxyUrl, nameof(proxyUrl));
@@ -259,15 +259,15 @@ namespace WireMock.ResponseBuilders
/// With Proxy URL.
/// </summary>
/// <param name="proxyUrl">The proxy url.</param>
/// <param name="clientX509Certificate2Filename">The X509Certificate2 file to use for client authentication.</param>
/// <param name="clientX509Certificate2ThumbprintOrSubjectName">The X509Certificate2 file to use for client authentication.</param>
/// <returns>A <see cref="IResponseBuilder"/>.</returns>
public IResponseBuilder WithProxy(string proxyUrl, string clientX509Certificate2Filename)
public IResponseBuilder WithProxy([NotNull] string proxyUrl, [NotNull] string clientX509Certificate2ThumbprintOrSubjectName)
{
Check.NotEmpty(proxyUrl, nameof(proxyUrl));
Check.NotEmpty(clientX509Certificate2Filename, nameof(clientX509Certificate2Filename));
Check.NotEmpty(clientX509Certificate2ThumbprintOrSubjectName, nameof(clientX509Certificate2ThumbprintOrSubjectName));
ProxyUrl = proxyUrl;
X509Certificate2Filename = clientX509Certificate2Filename;
X509Certificate2ThumbprintOrSubjectName = clientX509Certificate2ThumbprintOrSubjectName;
return this;
}
@@ -285,7 +285,10 @@ namespace WireMock.ResponseBuilders
if (ProxyUrl != null)
{
return await HttpClientHelper.SendAsync(requestMessage, ProxyUrl, X509Certificate2Filename);
var requestUri = new Uri(requestMessage.Url);
var proxyUri = new Uri(ProxyUrl);
var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery);
return await HttpClientHelper.SendAsync(requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri, X509Certificate2ThumbprintOrSubjectName);
}
if (UseTransformer)