繁体   English   中英

Ansible X509证书缺失主题备用名称

[英]Ansible X509 certificate missing Subject Alternative Name

我使用Vagrant和Ansible角色生成SSL / TLS证书,但无论我尝试什么,生成的证书都缺少主题备用名称:

- 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

证书文件已生成,但谷歌Chrome总是说

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

您的密钥不使用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'
    )

同样, 进程替换 适用于GNU bash,如果CI运行程序的默认shell是Bourne Shell,则无法工作,因为它有时在基于Ubuntu的发行版上。

这个答案是从这里改编的。

在对openssl库进行一些研究并了解它是如何工作之后,我犯了使用-X509 *的错误:添加-X509将创建证书而不是请求!

我按照以下主要步骤解决了我的问题:

  1. 设置证书颁发机构:颁发数字证书的实体。
  2. 创建服务器或用户证书请求。
  3. 签署服务器证书请求。
  4. 将此密钥和证书添加到您的主机。
  5. 将证书添加到浏览器。

我在博客文章中写了一篇关于如何实现这一目标的一步一步的长篇教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM