Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement https connection support for the managed HttpListener #19752

Open
Priya91 opened this issue Dec 22, 2016 · 12 comments
Open

Implement https connection support for the managed HttpListener #19752

Priya91 opened this issue Dec 22, 2016 · 12 comments
Labels
area-System.Net enhancement Product code improvement that does NOT require public API changes/additions os-linux Linux OS (any supported distro)
Milestone

Comments

@Priya91
Copy link
Contributor

Priya91 commented Dec 22, 2016

This requires a mechanism to get the ssl certificate info to use on the port of httplistener connection.

Possible solutions:

  • Expose an API that gets the cert filename on Unix and throws PNSE on Windows.
  • Create a tool to maintain/create/delete httplistener certs, mimicking windows httpcfg.

Current behavior:

  • Connections drop on https.
@karelz karelz changed the title Implement https connection support on httplistener on Unix Implement https connection support on HttpListener on Unix Dec 23, 2016
@CIPop CIPop changed the title Implement https connection support on HttpListener on Unix Implement https connection support for the managed HttpListener Jul 6, 2017
@CIPop
Copy link
Member

CIPop commented Jul 6, 2017

/cc @davidsh @DavidGoll
@Priya91 on Mono, HttpListener is searching for certs in a hardcoded path: https://github.com/mono/mono/blob/3f779475e3fc982e312212d5dbbd86515eddfc0c/mcs/class/System/System.Net/HttpListener.Mono.cs#L64
(also see this Stack Overflow discussion).

I couldn't find any documentation on how this could be achieved on Xamarin.

@Priya91
Copy link
Contributor Author

Priya91 commented Jul 7, 2017

@CIPop Yes, that's the second bullet in the description. We could re-use the dotnet crypto cert-store for this purpose, similar to mono, instead the hardcoded path here will be some custom dotnet path.

@DavidGoll
Copy link

@davidsh Document this as a compat issue for UWP6.0. This will require significant design for a cross-plat implementation.

@davidsh
Copy link
Contributor

davidsh commented Jul 12, 2017

Added documentation to https://github.com/dotnet/corefx/wiki/ApiCompat

@davidsh davidsh removed their assignment Jul 12, 2017
@dabretin
Copy link

Any news on this ?

@m5x
Copy link

m5x commented May 31, 2018

It would be great if it was possible to supply the certificate as a stream. It would remove additional steps that are required on each OS to install the certficate and at the same time it would allow developers to control themselves how and where is the certificate stored.

@tomrus88
Copy link

tomrus88 commented Jan 6, 2022

Just add an API that accepts a path to certificate file to use for all OS. We don't need any special tools like httpcfg, this only makes using HttpListener much worse experience. Let developers have full control over certificates (where and how they are stored) without need to use external tools.

@jchristn
Copy link

jchristn commented May 2, 2022

Are there any formal/informal timelines on when we could expect a resolution to this? Or at minimum a reasonable workaround? Thanks!

@freddyrios
Copy link

As it stands today the documentation for this class is very misleading https://learn.microsoft.com/en-us/dotnet/api/system.net.httplistener?view=net-7.0.

First, it provides no indication https is only supported on windows. Some people may begin building something with plain http and then face the missing support by the time they were expecting to simply enable https.

Second, it provides no indication the class is soft deprecated.

@RicardoSSB
Copy link

RicardoSSB commented Mar 16, 2024

Hello,

why not implementing a delegate to let the user decide to use it,

public delegate X509Certificate LoadCertificateAndKeyHandler(IPAddress addr, int port);
    public partial class HttpListener
    {

        public static LoadCertificateAndKeyHandler? LoadCertificateAndKeyHandler { get; set; }
        internal static SslStream CreateSslStream(Stream innerStream, bool ownsStream, RemoteCertificateValidationCallback callback)
        {
            return new SslStream(innerStream, ownsStream, callback);
        }

#pragma warning disable IDE0060
        internal static X509Certificate? LoadCertificateAndKey(IPAddress addr, int port)
        {
            if(LoadCertificateAndKeyHandler!=null) return LoadCertificateAndKeyHandler(addr, port);

            // TODO https://github.com/dotnet/runtime/issues/19752: Implement functionality to read SSL certificate.
            return null;
        }
#pragma warning restore IDE0060
    }

@Cangjier
Copy link

Cangjier commented Sep 4, 2024

啥时候能支持啊....HttpListener挺好用的,如果能支持HTTPS就更加好了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-System.Net enhancement Product code improvement that does NOT require public API changes/additions os-linux Linux OS (any supported distro)
Projects
None yet
Development

No branches or pull requests

14 participants