2017-06-12 47 views
1

我'使用流浪漢,Ansible角色生成SSL/TLS證書,但無論我怎麼努力,將生成的證書缺少主題備用名稱:Ansible X509證書丟失主題備用名稱

- name: Create an SSL security key & CSR (Certificate Signing Request)  
    shell: openssl req -new -newkey rsa:2048 -nodes -keyout /etc/apache2/ssl/{{ item.host }}.key -subj "/subjectAltName=DNS.1={{ item.host }}, DNS.2=www.{{ item.host }}, IP.1=192.168.33.11/C={{params['ssl'].country_name}}/ST={{params['ssl'].state}}/L={{params['ssl'].locality}}/O={{params['ssl'].organization}}/CN={{ item.host }}" -out /etc/apache2/ssl/{{ item.host }}.csr 
    args: 
    executable: "/bin/bash" 
    with_items: "{{params['vhosts']}}" 
    when: item.ssl is defined and item.ssl 

的證書文件被產生,但他們谷歌瀏覽器總是說

Subject Alternative Name Missing

這是我的環境的調試:

$ openssl version 
OpenSSL 1.0.2l 25 May 2017 

$ openssl x509 -noout -text -in /etc/apache2/ssl/myhost.dev.crt 
Certificate: 
    Data: 
     Version: 1 (0x0) 
     Serial Number: 
      a2:77:35:c7:6a:72:35:22 
    Signature Algorithm: sha256WithRSAEncryption 
     Issuer: subjectAltName=DNS.1=myhost.dev, DNS.2=www.myhost.dev, IP.1=192.168.33.11, C=DE, ST=Berlin, L=Berlin, O=Ltd, CN=myhost.dev 
     Validity 
      Not Before: Jun 12 15:36:58 2017 GMT 
      Not After : Jun 10 15:36:58 2027 GMT 
     Subject: subjectAltName=DNS.1=myhost.dev, DNS.2=www.myhost.dev, IP.1=192.168.33.11, C=DE, ST=Berlin, L=Berlin, O=Ltd, CN=myhost.dev 
+0

'發行人:subjectAltName = DNS.1 = myhost.dev,DNS.2 = www.myhost.dev,IP.1 = 192.168.33.11 ...'是*不正確。它看起來像是因爲你使用了'-subj ...'。也許你應該手動創建它。另請參閱[如何使用您的證書頒發機構簽署證書籤名請求](http://stackoverflow.com/a/21340898/608639)和[如何使用openssl創建自簽名證書?](http:// stackoverflow .com/q/10175812/608639)您還需要將自簽名證書放入適當的信任庫中。 – jww

回答

1

經過對openssl庫的一些研究並理解它是如何工作的,我在使用-X509 *時犯的錯誤:添加-X509將創建證書而不是請求!

我解決我的問題,按照這個主要步驟:

  1. 建立一個證書頒發機構:實體頒發數字證書 。
  2. 創建服務器或用戶證書請求。
  3. 簽署服務器證書請求。
  4. 將此密鑰和證書添加到您的主機。
  5. 將證書添加到瀏覽器。

我寫了一篇關於如何在blog post上實現這個功能的長篇教程。

2

您的密鑰不使用X509擴展。爲了將它們添加到您的CSR中,您需要一個配置文件來指定要添加的擴展名。命令行界面不夠友好,無法讓您在命令行上輕鬆指定X509擴展。

你可以做的是使用bash的進程替換與上飛生成修改配置文件一個命令,當你調用openssl生成CSR:

openssl req \ 
    -new -newkey rsa:2048 \ 
    -subj "{your existing subject}" \ 
    ... \ 
    -x509 \ 
    -reqexts SAN \ 
    -config <(
     cat /etc/ssl/openssl.cnf 
     printf '\n[SAN]\nsubjectAltName=DNS:example.com,DNS:www.example.com' 
    ) 

同樣,process substitution只有作品在GNU bash中,如果你的CI運行器的默認shell是Bourne Shell,它將不起作用,因爲它有時候是基於Ubuntu的發行版。

此答案改編自here

+0

我仍然在google chrome上遇到同樣的錯誤 – numediaweb