• Stars
    star
    2
  • Language
    Lua
  • Created almost 2 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Lua extension for HAProxy to turn an SSL client certificate into a JWT for the backend

haproxy-cert-jwt

A Lua extension to HAProxy supporting encoding of a client SSL certificate into a JWT in the Authorization header for the backend server.

Note that the JWT produced is of the JSON Web Signature (JWS) variant. Your backend will need the secret key in order to verify the signature.

Pre-requesites

  • HAProxy compiled with Lua support
  • luarocks for downloading dependencies

Usage

Install lua dependencies:

git clone https://github.com/oliyh/luajwt.git
luarocks install --tree rocks luajwt/luajwt-1.0-1.rockspec

Then run haproxy setting the CERT_JWT_KEY environment variable.

CERT_JWT_KEY=mysecret haproxy -f haproxy.cfg

Example

Build the example docker image

docker build . -t cert-jwt-example -f example/Dockerfile

Start a Docker image

docker run -it --rm cert-jwt-example

Start HAProxy with the example config:

CERT_JWT_KEY=some-long-and-secure-secret-key! haproxy -f haproxy.cfg &

And try it out:

curl --cert localhost.crt --key localhost.crt.key --cacert myCA.pem https://localhost/anything

You will see the backend request echoed back to you. Note the Authorization header which has been populated with the JWT. You can use https://token.dev/ to verify the contents and signing of the JWT.

Example JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE2Njk4Mjg2ODEsImlzcyI6IlwvQz1BVVwvU1Q9U29tZS1TdGF0ZVwvTz1vbGl5aFwvQ049aGFwcm94eS1jZXJ0LWp3dC1leGFtcGxlIiwiaWF0IjoxNjY5ODI4NzExLCJleHAiOjE3NDExMDg2ODEsInN1YiI6ImhhcHJveHktY2VydC1qd3QtZXhhbXBsZSJ9.0osWZg5ecOAdJFvwh-IbTKr8oAienTF81MT1WwLpRIo

Decoded on https://token.dev/

{
  "nbf": 1669828681,
  "iss": "/C=AU/ST=Some-State/O=oliyh/CN=haproxy-cert-jwt-example",
  "iat": 1669828711,
  "exp": 1741108681,
  "sub": "haproxy-cert-jwt-example"
}

More Repositories

1

martian

The HTTP abstraction library for Clojure/script, supporting OpenAPI, Swagger, Schema, re-frame and more
Clojure
470
star
2

re-graph

A graphql client for clojurescript and clojure
Clojure
447
star
3

superlifter

A DataLoader for Clojure/script
Clojure
158
star
4

re-learn

A library for integrating tutorials into your re-frame/reagent application
Clojure
138
star
5

pedestal-api

Easily build APIs in Pedestal using Schema and Swagger
Clojure
106
star
6

kamera

UI testing via image comparison and devcards
Clojure
86
star
7

lacinia-gen

Generators for GraphQL
Clojure
69
star
8

re-jump.el

emacs navigation for re-frame projects
Emacs Lisp
69
star
9

locksmith

Want to use GraphQL with Clojure/script but don't want keBab or snake_keys everywhere? Use locksmith to change all the keys!
Clojure
61
star
10

slacky

Memes as a Slack Service
Clojure
33
star
11

angel-interceptor

Express relations between Pedestal interceptors and decouple scope from execution order
Clojure
28
star
12

doo-chrome-devprotocol

A runner for doo which runs tests in Chrome, using the Chrome Dev Protocol with no need for karma or npm.
Clojure
27
star
13

carmine-streams

Utility functions for working with Redis streams in carmine
Clojure
26
star
14

fixa

Better test fixtures for clojure
Clojure
26
star
15

oxbow

A Server Sent Events (SSE) client for Clojurescript based on js/fetch
Clojure
24
star
16

spa-skeleton

A skeleton project for a ClojureScript Single Page Application backed by a Swagger API
Clojure
21
star
17

re-partee

How I build Clojurescript apps
Clojure
15
star
18

carve.el

Emacs plugin for borkdude/carve
Emacs Lisp
9
star
19

alrightee

Tee for re-frame
Clojure
7
star
20

learning-clojure

Learning materials for Clojure
Clojure
5
star
21

tinybeans-archive

Create an archive of a tinybeans journal
Clojure
4
star
22

cljockwork

A REST API for cron4j, written in Clojure
Clojure
4
star
23

stardev-feedback

Capturing feedback for https://stardev.io
3
star
24

one-route

A Ring webserver with one route
HTML
2
star
25

slacky-bot

All the memes for Slack
Clojure
2
star
26

cljs-webapp-from-scratch

Clojure
2
star
27

ingred

Search recipes by ingredient - a REST api written in Clojure with data scraped from the BBC
Clojure
2
star
28

sunshine

Clojure
2
star
29

fast-feedback

A presentation giving guidance on how to optimise your feedback loop and improve efficiency
HTML
1
star
30

a-taste-of-clojure

A talk to introduce (Java) developers to Clojure
JavaScript
1
star
31

sanakone

Learn Finnish
Clojure
1
star
32

masvn

Subversion integration for emacs based on dsvn and inspired by magit
Emacs Lisp
1
star