Proof of Concept to generate certificate signing requests in a web browser using node-forge.
This repository has been archived on 2022-07-28. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Jan Dittberner e8778dcb3a Add notice for new project location 2022-07-28 18:52:15 +02:00
cmd/goose WIP: migrations 2022-07-28 18:46:14 +02:00
handlers Add support for dynamic set of sub CAs 2022-07-28 18:46:14 +02:00
migrations Add migration for languages 2022-07-28 18:46:14 +02:00
src Implement CSRF protection 2020-12-05 19:46:15 +01:00
templates Implement CSR validation 2020-12-14 06:59:30 +01:00
.gitignore Improve example CA setup 2020-12-05 19:48:34 +01:00
COPYING Add GPL-2 license text 2020-11-22 11:47:19 +01:00
README.md Add notice for new project location 2022-07-28 18:52:15 +02:00
active.de-DE.toml Decouple request and response via WebSocket 2020-12-12 09:59:06 +01:00
active.en-US.toml Decouple request and response via WebSocket 2020-12-12 09:59:06 +01:00
active.en.toml Decouple request and response via WebSocket 2020-12-12 09:59:06 +01:00
ca.cnf Setup more CAB forum compliant CA structure 2022-07-28 18:46:14 +02:00
go.mod Tidy dependencies 2022-07-28 18:46:14 +02:00
go.sum Tidy dependencies 2022-07-28 18:46:14 +02:00
gulpfile.js Add CA chain to download, improve UI 2020-12-11 22:05:27 +01:00
main.go Add support for dynamic set of sub CAs 2022-07-28 18:46:14 +02:00
package-lock.json Update dependency 2020-12-14 17:28:28 +01:00
package.json Implement i18n support 2020-12-05 00:21:18 +01:00
setup_example_ca.sh Setup more CAB forum compliant CA structure 2022-07-28 18:46:14 +02:00

README.md

Browser PKCS#10 CSR generation PoC

Work that started in this repository will continue at code.cacert.org.

This repository contains a small proof of concept implementation of browser based PKCS#10 certificate signing request and PKCS#12 key store generation using node-forge.

The backend is implemented in Go and utilizes openssl for the signing operations. The instructions below have been tested on Debian 11 (Bullseye). Debian 10 works when you use a manual installation of Go.

Running

  1. Install dependencies

    sudo apt install git npm openssl golang-go
    
  2. Clone the repository

    git clone https://git.dittberner.info/jan/browser_csr_generation.git
    
  3. Get dependencies and build assets

    cd browser_csr_generation
    npm install --user gulp-cli
    npm install
    ./node_modules/.bin/gulp
    
  4. Setup the example CA and a server certificate and key

    ./setup_example_ca.sh
    openssl req -new -x509 -days 365 -subj "/CN=localhost" \
      -addext subjectAltName=DNS:localhost -newkey rsa:3072 \
      -nodes -out server.crt.pem -keyout server.key.pem
    
  5. Run the Go based backend

    go run main.go
    

    Open https://localhost:8000/ in your browser.

  6. Run gulp watch

    You can run a gulp watch in a second terminal window to automatically publish changes to the files in the src directory:

    gulp watch
    

Translations

This PoC uses go-i18n for internationalization (i18n) support.

The translation workflow needs the go18n binary which can be installed via

go get -u  github.com/nicksnyder/go-i18n/v2/goi18n

To extract new messages from the code run

goi18n extract

Then use

goi18n merge active.*.toml

to create TOML files for translation as translate.<locale>.toml. After translating the messages run

goi18n merge active.*.toml translate.*.toml

to merge the messages back into the active translation files. To add a new language you need to add the language code to main.go's i18n bundle loading code

for _, lang := range []string{"en-US", "de-DE"} {
    if _, err := bundle.LoadMessageFile(fmt.Sprintf("active.%s.toml", lang)); err != nil {
        log.Panic(err)
    }
}