Yafp 0.1.0

dotnet add package Yafp --version 0.1.0
NuGet\Install-Package Yafp -Version 0.1.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Yafp" Version="0.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Yafp --version 0.1.0
#r "nuget: Yafp, 0.1.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Yafp as a Cake Addin
#addin nuget:?package=Yafp&version=0.1.0

// Install Yafp as a Cake Tool
#tool nuget:?package=Yafp&version=0.1.0

Yafp

A toolkit for implementing forward proxy based on ASP.NET Core and YARP.

It can be used to implement custom local proxies. For example, it is possible to create something like Fiddler.

[!IMPORTANT] This project is a PoC and is not recommended for production use, but it works well for hobby use with customization. It can be used as a replacement for Titanium Web Proxy, etc.

Architecture

alternate text is missing from this package README image Yafp receives CONNECT requests not supported by ASP.NET Core instead and forwards them to ASP.NET Core + YARP using Unix Domain Socket or Named Pipe.

Yafp can read and modify the content of HTTPS communications with clients by dynamically issuing server certificates.

Demo (Blazor + Yafp)

<video src="https://github.com/mayuki/Yafp/assets/9012/53ce5317-aa18-48ba-8fe4-47172da2933c"></video>

Quick start

Install Yafp package from NuGet.

dotnet add package Yafp

Next, create an empty Web Application (ASP.NET Core Empty) project and modify Program.cs as follows:

using Yafp;

var builder = WebApplication.CreateBuilder(args);

// Add: Register Yafp services
builder.WebHost.UseYafpForwardProxy();

var app = builder.Build();

// Add: Use forward proxy middleware
app.MapForwardProxy();

app.MapGet("/", () => "Hello World!");
app.Run();

Next, add the proxy port and certificate settings in appsettings.json. Here we specify 18080 as the proxy port and use the sample certificate (ca.key, ca.pem).

{
  "Yafp": {
    "ListenPort": 18080,
    "RootCertificate": {
      "Path": "ca.pem",
      "KeyPath": "ca.key"
    }
  },
  ...
}

You need to copy ca.key and ca.pem from samples/ProxySample.

[!WARNING] To access HTTPS, the CA certificate must be trusted. It is recommended that you create and trust your own certificates in the steps described below.

Last, Set the browser's HTTP proxy port to localhost:18080.

Now, launch the application, and if you can access http://www.example.com/ from your browser, you are done. You should see YARP logs in your console.

Create CA private key/certificate

Instead of using the temporary private key/certificate included in the repository, you can create your own.

openssl genrsa -out ca.key 2048
openssl req -x509 -sha256 -new -nodes -key ca.key -days 3650 -out ca.pem

To trust a certificate in Windows, you can create a .der file with the following command:

openssl x509 -outform der -in ca.pem -out ca.der

License

MIT License

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.1.0 94 3/21/2024