Add role
This commit is contained in:
		
							parent
							
								
									b9cce1be67
								
							
						
					
					
						commit
						e48f14003f
					
				
					 12 changed files with 350 additions and 6 deletions
				
			
		
							
								
								
									
										50
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										50
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,9 +1,47 @@
 | 
			
		|||
# CFSSL-SERVER
 | 
			
		||||
ansible-role-cfssl
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
## Presentation
 | 
			
		||||
Installes CFSSL (CloudFlare's PKI toolkit) binaries and generate certificate :
 | 
			
		||||
- Self Signed Root CA
 | 
			
		||||
- CA Signed Client Certificates
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
For open source projects, say how it is licensed.
 | 
			
		||||
 | 
			
		||||
## Project status
 | 
			
		||||
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
 | 
			
		||||
Role Variables
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
#Specifies the version of CFSSL toolkit we want to download and use
 | 
			
		||||
cfssl_version: "1.6.3"
 | 
			
		||||
 | 
			
		||||
# The directory where CFSSL binaries will be installed
 | 
			
		||||
cfssl_bin_directory: /usr/bin
 | 
			
		||||
 | 
			
		||||
# The CA directory where we will store CA, and Client certificates/keys.
 | 
			
		||||
pki_dir: /opt/cfssl
 | 
			
		||||
 | 
			
		||||
# The Certificates Key Algos for both CA and Client certificates.
 | 
			
		||||
pki_key:
 | 
			
		||||
    algo: rsa
 | 
			
		||||
    size: 4096
 | 
			
		||||
 | 
			
		||||
# The CA Certificate Object and the default Client Certificate Object.
 | 
			
		||||
pki_names:
 | 
			
		||||
  - C: FR
 | 
			
		||||
    L: 'Paris'
 | 
			
		||||
    O: 'Acme'
 | 
			
		||||
    OU: IT
 | 
			
		||||
 | 
			
		||||
pki_ca:
 | 
			
		||||
  cname: My Internal Certification Authority
 | 
			
		||||
 | 
			
		||||
# The properties of the CA 
 | 
			
		||||
pki_ca:
 | 
			
		||||
  cname: My Internal Certification Authority
 | 
			
		||||
  expiry: 262800h (30 Years)
 | 
			
		||||
 | 
			
		||||
# The properties of the Intermediate CA  
 | 
			
		||||
pki_intermediate_ca:
 | 
			
		||||
  cname: My Intermediate Internal Certification Authority
 | 
			
		||||
  expiry: 262800h (30 Years)
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										24
									
								
								roles/cfssl-server/defaults/main.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								roles/cfssl-server/defaults/main.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
---
 | 
			
		||||
cfssl_version: 1.6.3
 | 
			
		||||
cfssl_bin_directory: /usr/bin
 | 
			
		||||
cfssl_port: 8888
 | 
			
		||||
 | 
			
		||||
pki_dir: /opt/cfssl
 | 
			
		||||
 | 
			
		||||
pki_key:
 | 
			
		||||
    algo: rsa
 | 
			
		||||
    size: 4096
 | 
			
		||||
 | 
			
		||||
pki_names:
 | 
			
		||||
  - C: FR
 | 
			
		||||
    L: 'Paris'
 | 
			
		||||
    O: 'Acme'
 | 
			
		||||
    OU: IT
 | 
			
		||||
 | 
			
		||||
pki_ca:
 | 
			
		||||
  cname: My Internal Certification Authority
 | 
			
		||||
  expiry: 262800h
 | 
			
		||||
 | 
			
		||||
pki_intermediate_ca:
 | 
			
		||||
  cname: My Intermediate Internal Certification Authority
 | 
			
		||||
  expirity: 262800h
 | 
			
		||||
							
								
								
									
										0
									
								
								roles/cfssl-server/handlers/main.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								roles/cfssl-server/handlers/main.yml
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										143
									
								
								roles/cfssl-server/tasks/main.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								roles/cfssl-server/tasks/main.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,143 @@
 | 
			
		|||
- name: include pre_requisite.yml
 | 
			
		||||
  import_tasks: pre_requisite.yml
 | 
			
		||||
 | 
			
		||||
- name: Create cfssl user
 | 
			
		||||
  ansible.builtin.user:
 | 
			
		||||
    name: cfssl
 | 
			
		||||
    shell: /usr/sbin/nologin
 | 
			
		||||
    create_home: no
 | 
			
		||||
    home: '{{pki_dir}}'
 | 
			
		||||
 | 
			
		||||
- name: create pki dir
 | 
			
		||||
  file:
 | 
			
		||||
    path: '{{pki_dir}}'
 | 
			
		||||
    state: directory
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0700
 | 
			
		||||
 | 
			
		||||
- name: create pki csr dir
 | 
			
		||||
  file:
 | 
			
		||||
    path: '{{pki_dir}}/csr'
 | 
			
		||||
    state: directory
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0700
 | 
			
		||||
 | 
			
		||||
- name: create pki etc dir
 | 
			
		||||
  file:
 | 
			
		||||
    path: '{{pki_dir}}/etc'
 | 
			
		||||
    state: directory
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0700
 | 
			
		||||
 | 
			
		||||
- name: create pki data dir
 | 
			
		||||
  file:
 | 
			
		||||
    path: '{{pki_dir}}/data'
 | 
			
		||||
    state: directory
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0700
 | 
			
		||||
 | 
			
		||||
- name: create pki CA dir
 | 
			
		||||
  file:
 | 
			
		||||
    path: '{{pki_dir}}/CA'
 | 
			
		||||
    state: directory
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0700
 | 
			
		||||
 | 
			
		||||
- name: creating CA CSR json
 | 
			
		||||
  template:
 | 
			
		||||
    src: csr_ROOT_CA.json.j2
 | 
			
		||||
    dest: '{{pki_dir}}/csr/csr_ROOT_CA.json'
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0600
 | 
			
		||||
 | 
			
		||||
- name: creating Intermediate CA CSR json
 | 
			
		||||
  template:
 | 
			
		||||
    src: csr_intermediate_CA.json.j2
 | 
			
		||||
    dest: '{{pki_dir}}/csr/csr_intermediate_CA.json'
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0600
 | 
			
		||||
 | 
			
		||||
- name: creating config file
 | 
			
		||||
  template:
 | 
			
		||||
    src: cfssl.json.j2
 | 
			
		||||
    dest: '{{pki_dir}}/etc/cfssl.json'
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0600
 | 
			
		||||
 | 
			
		||||
- name: creating db config file
 | 
			
		||||
  template:
 | 
			
		||||
    src: db.json.j2
 | 
			
		||||
    dest: '{{pki_dir}}/etc/db.json'
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0600
 | 
			
		||||
 | 
			
		||||
- name: creating init sql file
 | 
			
		||||
  template:
 | 
			
		||||
    src: init.sql.j2
 | 
			
		||||
    dest: '{{pki_dir}}/data/init.sql'
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0600
 | 
			
		||||
 | 
			
		||||
- name: create certificate authority key pair and CSR, autosign it
 | 
			
		||||
  shell: '{{cfssl_bin_directory}}/cfssl gencert -initca {{pki_dir}}/csr/csr_ROOT_CA.json | {{cfssl_bin_directory}}/cfssljson -bare ca'
 | 
			
		||||
  args:
 | 
			
		||||
    chdir: '{{pki_dir}}/CA/'
 | 
			
		||||
 | 
			
		||||
- name: create intermediate certificate authority key pair and CSR, autosign it
 | 
			
		||||
  shell: '{{cfssl_bin_directory}}/cfssl gencert -ca {{pki_dir}}/CA/ca.pem -ca-key {{pki_dir}}/CA/ca-key.pem -config={{pki_dir}}/etc/cfssl.json -profile="intermediate_ca" {{pki_dir}}/csr/csr_intermediate_CA.json | {{cfssl_bin_directory}}/cfssljson -bare ca-server'
 | 
			
		||||
  args:
 | 
			
		||||
    chdir: '{{pki_dir}}/CA/'
 | 
			
		||||
 | 
			
		||||
- name: create sqlite3 database
 | 
			
		||||
  shell: 'cat {{pki_dir}}/data/init.sql | sqlite3 {{pki_dir}}/data/certdb.db'
 | 
			
		||||
  args:
 | 
			
		||||
    chdir: '{{pki_dir}}/CA/'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- name: Change owner of ca-server.pem by cfssl
 | 
			
		||||
  ansible.builtin.file:
 | 
			
		||||
    path: '{{pki_dir}}/CA/ca-server.pem'
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0600
 | 
			
		||||
 | 
			
		||||
- name: Change owner of ca-server.pem by cfssl
 | 
			
		||||
  ansible.builtin.file:
 | 
			
		||||
    path: '{{pki_dir}}/CA/ca-server-key.pem'
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0600
 | 
			
		||||
 | 
			
		||||
- name: Change owner of certdb.db by cfssl
 | 
			
		||||
  ansible.builtin.file:
 | 
			
		||||
    path: '{{pki_dir}}/data/certdb.db'
 | 
			
		||||
    owner: cfssl
 | 
			
		||||
    group: cfssl
 | 
			
		||||
    mode: 0600
 | 
			
		||||
 | 
			
		||||
- name: Création du fichier de service /lib/systemd/system/cfssl.service
 | 
			
		||||
  ansible.builtin.template:
 | 
			
		||||
    src: cfssl.service.j2
 | 
			
		||||
    dest: /lib/systemd/system/cfssl.service
 | 
			
		||||
    owner: root
 | 
			
		||||
    group: root
 | 
			
		||||
    mode: 0644
 | 
			
		||||
 | 
			
		||||
- name : Create firewall rules
 | 
			
		||||
  ansible.builtin.shell: 'firewall-cmd --zone=public --permanent --add-port=8888/tcp && firewall-cmd --reload'
 | 
			
		||||
 | 
			
		||||
- name: Démarrage et activation du service cfssl
 | 
			
		||||
  ansible.builtin.service:
 | 
			
		||||
    name: cfssl
 | 
			
		||||
    state: started
 | 
			
		||||
    enabled: true
 | 
			
		||||
							
								
								
									
										28
									
								
								roles/cfssl-server/tasks/pre_requisite.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								roles/cfssl-server/tasks/pre_requisite.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
---
 | 
			
		||||
- name: Check if cfssl is already available
 | 
			
		||||
  stat:
 | 
			
		||||
    path: '{{cfssl_bin_directory}}/cfssl'
 | 
			
		||||
  register: cfssl_exist
 | 
			
		||||
- name: Download statically linked cfssl binary
 | 
			
		||||
  get_url:
 | 
			
		||||
    url: https://github.com/cloudflare/cfssl/releases/download/v{{cfssl_version}}/cfssl_{{cfssl_version}}_linux_amd64
 | 
			
		||||
    dest: '{{cfssl_bin_directory}}/cfssl'
 | 
			
		||||
    mode: 0755
 | 
			
		||||
  when: cfssl_exist.stat.exists == false
 | 
			
		||||
 | 
			
		||||
- name: Check if cfssljson is already available
 | 
			
		||||
  stat:
 | 
			
		||||
    path: '{{cfssl_bin_directory}}/cfssljson'
 | 
			
		||||
  register: cfssljson_exist
 | 
			
		||||
- name: Download statically linked cfssljson binary
 | 
			
		||||
  get_url:
 | 
			
		||||
    url: https://github.com/cloudflare/cfssl/releases/download/v{{cfssl_version}}/cfssljson_{{cfssl_version}}_linux_amd64
 | 
			
		||||
    dest: '{{cfssl_bin_directory}}/cfssljson'
 | 
			
		||||
    mode: 0755
 | 
			
		||||
  when: cfssljson_exist.stat.exists == false
 | 
			
		||||
 | 
			
		||||
- name: Install sqlite3
 | 
			
		||||
  ansible.builtin.package:
 | 
			
		||||
    name: sqlite3
 | 
			
		||||
    state: present
 | 
			
		||||
    update_cache : true
 | 
			
		||||
							
								
								
									
										50
									
								
								roles/cfssl-server/templates/cfssl.json.j2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								roles/cfssl-server/templates/cfssl.json.j2
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,50 @@
 | 
			
		|||
{
 | 
			
		||||
    "signing": {
 | 
			
		||||
      "default": {
 | 
			
		||||
          "crl_url": "http://{{inventory_hostname_short}}.{{vm_domain_name}}:8888/crl",
 | 
			
		||||
          "expiry": "26280h",
 | 
			
		||||
          "usages": [
 | 
			
		||||
              "signing",
 | 
			
		||||
              "key encipherment",
 | 
			
		||||
              "client auth"
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
      "profiles": {
 | 
			
		||||
        "intermediate_ca": {
 | 
			
		||||
          "usages": [
 | 
			
		||||
              "signing",
 | 
			
		||||
              "digital signature",
 | 
			
		||||
              "key encipherment",
 | 
			
		||||
              "cert sign",
 | 
			
		||||
              "crl sign",
 | 
			
		||||
              "server auth",
 | 
			
		||||
              "client auth"
 | 
			
		||||
          ],
 | 
			
		||||
          "expiry": "87600h",
 | 
			
		||||
          "ca_constraint": {
 | 
			
		||||
              "is_ca": true,
 | 
			
		||||
              "max_path_len": 0, 
 | 
			
		||||
              "max_path_len_zero": true
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "server": {
 | 
			
		||||
          "usages": [
 | 
			
		||||
            "signing",
 | 
			
		||||
            "digital signing",
 | 
			
		||||
            "key encipherment",
 | 
			
		||||
            "server auth"
 | 
			
		||||
          ],
 | 
			
		||||
          "expiry": "8760h"
 | 
			
		||||
        },
 | 
			
		||||
        "client": {
 | 
			
		||||
          "usages": [
 | 
			
		||||
            "signing",
 | 
			
		||||
            "digital signature",
 | 
			
		||||
            "key encipherment", 
 | 
			
		||||
            "client auth"
 | 
			
		||||
          ],
 | 
			
		||||
          "expiry": "8760h"
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								roles/cfssl-server/templates/cfssl.service.j2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								roles/cfssl-server/templates/cfssl.service.j2
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
[Unit]
 | 
			
		||||
Description=CFSSL PKI Server
 | 
			
		||||
After=syslog.target
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
RestartSec=2s
 | 
			
		||||
Type=simple
 | 
			
		||||
User=cfssl
 | 
			
		||||
Group=cfssl
 | 
			
		||||
WorkingDirectory={{pki_dir}}
 | 
			
		||||
ExecStart={{cfssl_bin_directory}}/cfssl serve -address 0.0.0.0 -db-config {{pki_dir}}/etc/db.json -config {{pki_dir}}/etc/cfssl.json -ca {{pki_dir}}/CA/ca-server.pem -ca-key {{pki_dir}}/CA/ca-server-key.pem -port {{cfssl_port}}
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
							
								
								
									
										6
									
								
								roles/cfssl-server/templates/csr.json.j2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								roles/cfssl-server/templates/csr.json.j2
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
{
 | 
			
		||||
    "CN": {{item.cname | to_json}},
 | 
			
		||||
    "hosts": {{ (item.sans|default([]) + item.altips|default([]) + item.cname.split(',')) | to_json}},
 | 
			
		||||
    "key" : {{item.key | default(pki_key) | to_json}},
 | 
			
		||||
    "names" : {{item.names | default(pki_names) | to_json}}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								roles/cfssl-server/templates/csr_ROOT_CA.json.j2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								roles/cfssl-server/templates/csr_ROOT_CA.json.j2
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
{
 | 
			
		||||
    "CN": {{pki_ca.cname | to_json}},
 | 
			
		||||
    "key" : {{pki_key | to_json}},
 | 
			
		||||
    "names" : {{pki_names | to_json}},
 | 
			
		||||
    "ca": {"expiry": "{{pki_ca.expiry | to_json}}"}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								roles/cfssl-server/templates/csr_intermediate_CA.json.j2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								roles/cfssl-server/templates/csr_intermediate_CA.json.j2
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
{
 | 
			
		||||
    "CN": {{pki_intermediate_ca.cname | to_json}},
 | 
			
		||||
    "key" : {{pki_key | to_json}},
 | 
			
		||||
    "names" : {{pki_names | to_json}},
 | 
			
		||||
    "ca": {"expiry": "{{pki_intermediate_ca.expiry | to_json}}"}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								roles/cfssl-server/templates/db.json.j2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								roles/cfssl-server/templates/db.json.j2
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{"driver":"sqlite3","data_source":"{{pki_dir}}/data/certdb.db"}
 | 
			
		||||
							
								
								
									
										26
									
								
								roles/cfssl-server/templates/init.sql.j2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								roles/cfssl-server/templates/init.sql.j2
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
CREATE TABLE certificates (
 | 
			
		||||
  serial_number            blob NOT NULL,
 | 
			
		||||
  authority_key_identifier blob NOT NULL,
 | 
			
		||||
  ca_label                 blob,
 | 
			
		||||
  status                   blob NOT NULL,
 | 
			
		||||
  reason                   int,
 | 
			
		||||
  expiry                   timestamp,
 | 
			
		||||
  revoked_at               timestamp,
 | 
			
		||||
  pem                      blob NOT NULL,
 | 
			
		||||
  PRIMARY KEY(serial_number, authority_key_identifier)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
CREATE TABLE ocsp_responses (
 | 
			
		||||
  serial_number            blob NOT NULL,
 | 
			
		||||
  authority_key_identifier blob NOT NULL,
 | 
			
		||||
  body                     blob NOT NULL,
 | 
			
		||||
  expiry                   timestamp,
 | 
			
		||||
  PRIMARY KEY(serial_number, authority_key_identifier),
 | 
			
		||||
  FOREIGN KEY(serial_number, authority_key_identifier) REFERENCES certificates(serial_number, authority_key_identifier)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
ALTER TABLE certificates ADD COLUMN "issued_at" timestamp;
 | 
			
		||||
ALTER TABLE certificates ADD COLUMN "not_before" timestamp;
 | 
			
		||||
ALTER TABLE certificates ADD COLUMN "metadata" text;
 | 
			
		||||
ALTER TABLE certificates ADD COLUMN "sans" text;
 | 
			
		||||
ALTER TABLE certificates ADD COLUMN "common_name" text;
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue