ssl_generate.yml 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. ---
  2. # tasks/ssl_generate.yml: Generate SSL data and stash to dynamic
  3. # data store for deployment to clients
  4. - name: Include ansible_distribution vars
  5. include_vars:
  6. file: "{{ ansible_distribution }}.yml"
  7. - name: Ensure OpenSSL is installed
  8. package:
  9. name: openssl
  10. state: present
  11. - name: Ensure SSL generation directory exists
  12. file:
  13. dest: "{{ sensu_config_path }}/{{ item }}"
  14. state: directory
  15. owner: "{{ sensu_user_name }}"
  16. group: "{{ sensu_group_name }}"
  17. when: sensu_master
  18. loop:
  19. - ssl_generation
  20. - ssl_generation/sensu_ssl_tool
  21. - ssl_generation/sensu_ssl_tool/client
  22. - ssl_generation/sensu_ssl_tool/server
  23. - ssl_generation/sensu_ssl_tool/sensu_ca
  24. - ssl_generation/sensu_ssl_tool/sensu_ca/private
  25. - ssl_generation/sensu_ssl_tool/sensu_ca/certs
  26. - name: Ensure OpenSSL configuration is in place
  27. template:
  28. src: openssl.cnf.j2
  29. dest: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/sensu_ca/openssl.cnf"
  30. owner: "{{ sensu_user_name }}"
  31. group: "{{ sensu_group_name }}"
  32. when: sensu_master
  33. - block:
  34. - name: Ensure the Sensu CA serial configuration
  35. shell: 'echo 01 > sensu_ca/serial'
  36. args:
  37. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/"
  38. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/sensu_ca/serial"
  39. register: sensu_ca_new_serial
  40. - name: Ensure sensu_ca/index.txt exists
  41. file:
  42. dest: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/sensu_ca/index.txt"
  43. state: touch
  44. when: sensu_ca_new_serial is changed
  45. # TODO: The following mirrors the commands used in sensu_ssl_tool/ssl_certs.sh
  46. # from the 1.3 version of the script. Ideally, this moves into the native openssl_* modules.
  47. # See https://docs.sensu.io/sensu-core/1.3/reference/ssl/#reference-documentation for limitations and further instructions
  48. - name: Generate Sensu CA certificate
  49. command: openssl req -x509 -config openssl.cnf -newkey rsa:2048 -days 1825 -out cacert.pem -outform PEM -subj /CN=SensuCA/ -nodes
  50. args:
  51. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/sensu_ca"
  52. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/sensu_ca/cacert.pem"
  53. - name: Generate CA cert
  54. command: openssl x509 -in cacert.pem -out cacert.cer -outform DER
  55. args:
  56. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/sensu_ca"
  57. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/sensu_ca/cacert.cer"
  58. - name: Generate server keys
  59. command: openssl genrsa -out key.pem 2048
  60. args:
  61. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/server"
  62. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/server/key.pem"
  63. - name: Generate server certificate signing request
  64. command: openssl req -new -key key.pem -out req.pem -outform PEM -subj /CN=sensu/O=server/ -nodes
  65. args:
  66. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/server"
  67. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/server/req.pem"
  68. - name: Sign the server certificate
  69. command: openssl ca -config openssl.cnf -in ../server/req.pem -out ../server/cert.pem -notext -batch -extensions server_ca_extensions
  70. args:
  71. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/sensu_ca"
  72. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/server/cert.pem"
  73. - name: Convert server certificate and key to PKCS12 formart
  74. command: openssl pkcs12 -export -out keycert.p12 -in cert.pem -inkey key.pem -passout pass:secret
  75. args:
  76. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/server"
  77. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/server/keycert.p12"
  78. - name: Generate client key
  79. command: openssl genrsa -out key.pem 2048
  80. args:
  81. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/client"
  82. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/client/key.pem"
  83. - name: Generate client certificate signing request
  84. command: openssl req -new -key key.pem -out req.pem -outform PEM -subj /CN=sensu/O=client/ -nodes
  85. args:
  86. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/client"
  87. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/client/req.pem"
  88. - name: Sign the client certificate
  89. command: openssl ca -config openssl.cnf -in ../client/req.pem -out ../client/cert.pem -notext -batch -extensions client_ca_extensions
  90. args:
  91. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/sensu_ca"
  92. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/client/cert.pem"
  93. - name: Convert client key/certificate to PKCS12 format
  94. command: openssl pkcs12 -export -out keycert.p12 -in cert.pem -inkey key.pem -passout pass:secret
  95. args:
  96. chdir: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/client"
  97. creates: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/client/keycert.p12"
  98. when: sensu_master|bool
  99. become: true
  100. become_user: "{{ sensu_user_name }}"
  101. - name: Stash the Sensu SSL certs/keys
  102. fetch:
  103. src: "{{ sensu_config_path }}/ssl_generation/sensu_ssl_tool/{{ item }}"
  104. dest: "{{ dynamic_data_store }}"
  105. when: sensu_master
  106. loop:
  107. - sensu_ca/cacert.pem
  108. - server/cert.pem
  109. - server/key.pem
  110. - client/cert.pem
  111. - client/key.pem