anonymous 2 years ago
commit
f5fab2a149
14 changed files with 161 additions and 0 deletions
  1. +2
    -0
      .gitignore
  2. +7
    -0
      app/Dockerfile
  3. +10
    -0
      app/Gemfile
  4. +31
    -0
      app/Gemfile.lock
  5. +16
    -0
      app/app.rb
  6. +19
    -0
      docker-compose.yaml
  7. +3
    -0
      nginx/Dockerfile
  8. +0
    -0
      nginx/certs/.keep
  9. +33
    -0
      nginx/nginx.conf
  10. +9
    -0
      script/create-certificate.sh
  11. +7
    -0
      script/create-client-key-and-csr.sh
  12. +9
    -0
      script/create-server-certificate.sh
  13. +6
    -0
      script/create-server-key-and-csr.sh
  14. +9
    -0
      script/sign-client-csr.sh

+ 2
- 0
.gitignore View File

@@ -0,0 +1,2 @@
nginx/certs/*
!nginx/certs/.keep

+ 7
- 0
app/Dockerfile View File

@@ -0,0 +1,7 @@
from ruby

add . /app
workdir /app
run bundle install

cmd ["ruby", "app.rb"]

+ 10
- 0
app/Gemfile View File

@@ -0,0 +1,10 @@
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

# gem "rails"

gem "sinatra", "~> 2.2"
gem "thin", "~> 1.8"

+ 31
- 0
app/Gemfile.lock View File

@@ -0,0 +1,31 @@
GEM
remote: https://rubygems.org/
specs:
daemons (1.4.1)
eventmachine (1.2.7)
mustermann (1.1.1)
ruby2_keywords (~> 0.0.1)
rack (2.2.3)
rack-protection (2.2.0)
rack
ruby2_keywords (0.0.5)
sinatra (2.2.0)
mustermann (~> 1.0)
rack (~> 2.2)
rack-protection (= 2.2.0)
tilt (~> 2.0)
thin (1.8.1)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0, >= 1.0.4)
rack (>= 1, < 3)
tilt (2.0.10)

PLATFORMS
x86_64-linux

DEPENDENCIES
sinatra (~> 2.2)
thin (~> 1.8)

BUNDLED WITH
2.2.19

+ 16
- 0
app/app.rb View File

@@ -0,0 +1,16 @@
require 'sinatra'

set :server, %w[thin webrick]
set :bind, '0.0.0.0'

get '/' do
'Hello world'
end

get '/foo' do
'Bar'
end

get '/cert' do
request.env['HTTP_X_CLIENTCERT_DN']
end

+ 19
- 0
docker-compose.yaml View File

@@ -0,0 +1,19 @@
version: '3.3'
services:
ruby:
container_name: app
image: integralist-ruby
ports:
- 4567:4567
nginx:
container_name: nginx
image: integralist-nginx
volumes:
- ./html:/usr/share/nginx/html
- ./nginx/certs/server.crt:/etc/nginx/certs/server.crt
- ./nginx/certs/server.key:/etc/nginx/certs/server.key
- ./nginx/certs/ca.crt:/etc/nginx/certs/ca.crt
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- 80:80
- 443:443

+ 3
- 0
nginx/Dockerfile View File

@@ -0,0 +1,3 @@
from nginx
expose 80 443
cmd ["nginx", "-g", "daemon off;"]

+ 0
- 0
nginx/certs/.keep View File


+ 33
- 0
nginx/nginx.conf View File

@@ -0,0 +1,33 @@
user nobody nogroup;
worker_processes auto;

events {
worker_connections 512;
}

http {
upstream app {
server app:4567;
}

server {
listen *:443;
ssl on;
server_name "";

ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_client_certificate /etc/nginx/certs/ca.crt;
# @todo this could be made 'optional' so taht
# some connections are allowed to public
# endpooints
ssl_verify_client on;

root /usr/share/nginx/html;

location /app/ {
proxy_pass http://app/;
proxy_set_header X-ClientCert-DN $ssl_client_s_dn;
}
}
}

+ 9
- 0
script/create-certificate.sh View File

@@ -0,0 +1,9 @@
#!/bin/bash

openssl genrsa -des3 -out ca.key 4096

openssl req -new \
-x509 \
-days 365 \
-key ca.key \
-out ca.crt

+ 7
- 0
script/create-client-key-and-csr.sh View File

@@ -0,0 +1,7 @@
#!/bin/bash

openssl genrsa -out client.key 2048

openssl req -new \
-key client.key \
-out client.csr

+ 9
- 0
script/create-server-certificate.sh View File

@@ -0,0 +1,9 @@
#!/bin/bash

openssl x509 -req \
-days 365 \
-in server.csr \
-CA ca.crt \
-CAkey ca.key \
-set_serial 01 \
-out server.crt

+ 6
- 0
script/create-server-key-and-csr.sh View File

@@ -0,0 +1,6 @@
#!/bin/bash

openssl genrsa -out server.key 4096 \
openssl req -new \
-key server.key \
-out server.csr

+ 9
- 0
script/sign-client-csr.sh View File

@@ -0,0 +1,9 @@
#!/bin/bash

openssl x509 -req \
-days 365 \
-in client.csr \
-CA ca.crt \
-CAkey ca.key \
-set_serial 01 \
-out client.crt

Loading…
Cancel
Save