| --- |
| # Copyright 2017-present Open Networking Foundation |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # pki-cert/tasks/main.yml |
| |
| - name: Generate server private key (no pw) |
| command: > |
| openssl genrsa |
| -out {{ pki_dir }}/{{ site_name }}_im_ca/private/{{ item.cn }}_key.pem |
| {{ cert_size }} |
| args: |
| creates: "{{ pki_dir }}/{{ site_name }}_im_ca/private/{{ item.cn }}_key.pem" |
| with_items: "{{ server_certs }}" |
| |
| - name: Generate server-specific openssl config |
| template: |
| src: server.cnf.j2 |
| dest: "{{ pki_dir }}/{{ site_name }}_im_ca/server_cnfs/{{ item.cn }}.cnf" |
| with_items: "{{ server_certs }}" |
| |
| - name: Generate server CSR |
| command: > |
| openssl req -config {{ pki_dir }}/{{ site_name }}_im_ca/server_cnfs/{{ item.cn }}.cnf |
| -key {{ pki_dir }}/{{ site_name }}_im_ca/private/{{ item.cn }}_key.pem |
| -new -sha256 -subj "{{ item.subj }}" |
| -out {{ pki_dir }}/{{ site_name }}_im_ca/csr/{{ item.cn }}_csr.pem |
| args: |
| creates: "{{ pki_dir }}/{{ site_name }}_im_ca/csr/{{ item.cn }}_csr.pem" |
| with_items: "{{ server_certs }}" |
| |
| - name: Sign server cert |
| command: > |
| openssl ca -config {{ pki_dir }}/{{ site_name }}_im_ca/server_cnfs/{{ item.cn }}.cnf |
| -batch -passin file:{{ pki_dir }}/{{ site_name }}_im_ca/private/ca_im_phrase |
| -extensions server_cert |
| -days {{ cert_days }} -md {{ cert_digest }} |
| -in {{ pki_dir }}/{{ site_name }}_im_ca/csr/{{ item.cn }}_csr.pem |
| -out {{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.cn }}_cert.pem |
| args: |
| creates: "{{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.cn }}_cert.pem" |
| with_items: "{{ server_certs }}" |
| |
| - name: Verify cert against root + im chain |
| command: > |
| openssl verify -purpose sslserver |
| -CAfile {{ pki_dir }}/{{ site_name }}_im_ca/certs/im_cert_chain.pem |
| {{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.cn }}_cert.pem |
| with_items: "{{ server_certs }}" |
| tags: |
| - skip_ansible_lint # diagnostic command |
| register: server_chain_verify |
| |
| - name: Assert that verify of cert succeeded |
| assert: |
| that: "'OK' in '{{ item.stdout }}'" |
| with_items: "{{ server_chain_verify.results }}" |
| |
| - name: Get the intermediate cert into im_cert var |
| command: > |
| openssl x509 -in {{ pki_dir }}/{{ site_name }}_im_ca/certs/im_cert.pem |
| register: im_cert |
| tags: |
| - skip_ansible_lint # concat of files |
| |
| - name: Get the certs into server_certs var |
| command: > |
| openssl x509 -in {{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.cn }}_cert.pem |
| with_items: "{{ server_certs }}" |
| tags: |
| - skip_ansible_lint # concat of files |
| register: server_certs_raw |
| |
| - name: Create chained server certs |
| copy: |
| dest: "{{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.item.cn }}_cert_chain.pem" |
| content: "{{ item.stdout }}\n{{ im_cert.stdout }}" |
| with_items: "{{ server_certs_raw.results }}" |
| |
| - name: Generate client private key (no pw) |
| command: > |
| openssl genrsa |
| -out {{ pki_dir }}/{{ site_name }}_im_ca/private/{{ item.cn }}_key.pem |
| {{ cert_size }} |
| args: |
| creates: "{{ pki_dir }}/{{ site_name }}_im_ca/private/{{ item.cn }}_key.pem" |
| with_items: "{{ client_certs }}" |
| |
| - name: Generate client-specific openssl config |
| template: |
| src: client.cnf.j2 |
| dest: "{{ pki_dir }}/{{ site_name }}_im_ca/client_cnfs/{{ item.cn }}.cnf" |
| with_items: "{{ client_certs }}" |
| |
| - name: Generate client CSR |
| command: > |
| openssl req -config {{ pki_dir }}/{{ site_name }}_im_ca/client_cnfs/{{ item.cn }}.cnf |
| -key {{ pki_dir }}/{{ site_name }}_im_ca/private/{{ item.cn }}_key.pem |
| -new -sha256 -subj "{{ item.subj }}" |
| -out {{ pki_dir }}/{{ site_name }}_im_ca/csr/{{ item.cn }}_csr.pem |
| args: |
| creates: "{{ pki_dir }}/{{ site_name }}_im_ca/csr/{{ item.cn }}_csr.pem" |
| with_items: "{{ client_certs }}" |
| |
| - name: Sign client cert |
| command: > |
| openssl ca -config {{ pki_dir }}/{{ site_name }}_im_ca/client_cnfs/{{ item.cn }}.cnf |
| -batch -passin file:{{ pki_dir }}/{{ site_name }}_im_ca/private/ca_im_phrase |
| -extensions client_cert |
| -days {{ cert_days }} -md {{ cert_digest }} |
| -in {{ pki_dir }}/{{ site_name }}_im_ca/csr/{{ item.cn }}_csr.pem |
| -out {{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.cn }}_cert.pem |
| args: |
| creates: "{{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.cn }}_cert.pem" |
| with_items: "{{ client_certs }}" |
| |
| - name: Verify cert against root + im chain |
| command: > |
| openssl verify -purpose sslclient |
| -CAfile {{ pki_dir }}/{{ site_name }}_im_ca/certs/im_cert_chain.pem |
| {{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.cn }}_cert.pem |
| with_items: "{{ client_certs }}" |
| tags: |
| - skip_ansible_lint # diagnostic command |
| register: client_chain_verify |
| |
| - name: Assert that verify of cert succeeded |
| assert: |
| that: "'OK' in '{{ item.stdout }}'" |
| with_items: "{{ client_chain_verify.results }}" |
| |
| - name: Get the certs into client_certs var |
| command: > |
| openssl x509 -in {{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.cn }}_cert.pem |
| with_items: "{{ client_certs }}" |
| tags: |
| - skip_ansible_lint # concat of files |
| register: client_certs_raw |
| |
| - name: Create chained client cert |
| copy: |
| dest: "{{ pki_dir }}/{{ site_name }}_im_ca/certs/{{ item.item.cn }}_cert_chain.pem" |
| content: "{{ item.stdout }}\n{{ im_cert.stdout }}" |
| with_items: "{{ client_certs_raw.results }}" |
| |