mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
feat: Add Support for Proxy with Interceptor (#77)
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# PMG Proxy
|
||||
|
||||
A generic, extensible HTTP/HTTPS proxy server with man-in-the-middle (MITM) capabilities for intercepting and analyzing package manager traffic.
|
||||
Built with [goproxy](https://github.com/elazarl/goproxy) library.
|
||||
|
||||
## Features
|
||||
|
||||
- Selective interception of HTTPS traffic
|
||||
- Pluggable interceptors for different use cases
|
||||
- Certificate generation and management for HTTPS interception (MITM)
|
||||
|
||||
## Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[Package Manager]
|
||||
A -- HTTPS_PROXY --> B[Proxy Server]
|
||||
B --> C{Match?}
|
||||
C -- Yes --> D[MITM]
|
||||
D --> E[Inspect]
|
||||
C -- No --> F[TCP Tunnel]
|
||||
subgraph inside_proxy [ ]
|
||||
G[Interceptor<br/>Chain]
|
||||
end
|
||||
B --> inside_proxy
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||
See [examples/proxy](../examples/proxy/README.md) for a complete example.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/safedep/pmg/proxy"
|
||||
"github.com/safedep/pmg/proxy/certmanager"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Generate CA certificate
|
||||
caCert, _ := certmanager.GenerateCA(certmanager.DefaultCertManagerConfig())
|
||||
|
||||
// Create certificate manager
|
||||
certMgr, _ := certmanager.NewCertificateManagerWithCA(caCert, certmanager.DefaultCertManagerConfig())
|
||||
|
||||
// Create proxy
|
||||
proxyServer, _ := proxy.NewProxyServer(&proxy.ProxyConfig{
|
||||
ListenAddr: "127.0.0.1:8888",
|
||||
CertManager: certMgr,
|
||||
EnableMITM: true,
|
||||
Interceptors: []proxy.Interceptor{NewMyInterceptor()},
|
||||
})
|
||||
|
||||
// Start proxy
|
||||
proxyServer.Start()
|
||||
|
||||
// ... wait for shutdown signal ...
|
||||
|
||||
proxyServer.Stop(context.Background())
|
||||
}
|
||||
```
|
||||
|
||||
## Certificate Manager
|
||||
|
||||
The `certmanager` package provides certificate generation and caching.
|
||||
|
||||
### Usage
|
||||
|
||||
```go
|
||||
import "github.com/safedep/pmg/proxy/certmanager"
|
||||
|
||||
// Generate a new CA certificate
|
||||
config := certmanager.DefaultCertManagerConfig()
|
||||
caCert, err := certmanager.GenerateCA(config)
|
||||
|
||||
// Handle persistence (example)
|
||||
os.WriteFile("ca-cert.pem", caCert.Certificate, 0644)
|
||||
|
||||
// Create certificate manager with CA
|
||||
certMgr, err := certmanager.NewCertificateManagerWithCA(caCert, config)
|
||||
|
||||
// Generate host certificates (automatically cached)
|
||||
hostCert, err := certMgr.GenerateCertForHost("registry.npmjs.org")
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user