제공 subjectAltName OpenSSL 에 직접 명령 라인

입 가능을 제공하 subjectAltName-확장자를 OpenSSLreq모듈을 직접 명령행에?

나는 그것을 알's 를 통해 가능한 openssl.cnf 파일,그러나는's 지 않은 정말 우아한 배치를 위한 창조의 Csr.

질문에 대한 의견 (3)
해결책

에 따라[link](http://openssl.6102.n7.nabble.com/cmd-line-and-subjectAltName-td47538.html#a47548 에서)DarkLighting,여기's 명령을 내놓았을 사용하여 중첩 subshells.


openssl req -new -sha256 \
    -key domain.key \
    -subj "/C=US/ST=CA/O=Acme, Inc./CN=example.com" \
    -reqexts SAN \
    -config 
해설 (5)

로 OpenSSL1.1.1 을 제공하 subjectAltName 에 직접 명령 라인에게 됩쉬울,의 소개와 함께-addext깃발openssl req(via이 commit).

커미추가예를 들어openssl req남자 페이지:

Example of giving the most common attributes (subject and extensions)
on the command line:

 openssl req -new -subj "/C=GB/CN=foo" \
                  -addext "subjectAltName = DNS:foo.co.uk" \
                  -addext "certificatePolicies = 1.2.3.4" \
                  -newkey rsa:2048 -keyout key.pem -out req.pem

이것은 하나로 통합되었습니다 master 의openssl 이 명령에 Github,로 월 18 2018 설치될 수 있는 자식을 통해 풀+컴파일(또는 브루는 경우에 OS X:brew 설치-devel openssl@1.1).

참고 설정되어 있다면 config 특성"req_extensions"에서 절"[req]"in openssl.cfg,그것은 무시됩니다 명령행 매개변수

해설 (2)

나의 솔루션을 통과하는subjectAltName을 통해 환경 변수입니다.

먼저 이에 추가하여openssl.conf:

[ san_env ]
subjectAltName=${ENV::SAN}

다음 설정된 환경 변수를 호출하기 전에 openssl:

export SAN=DNS:value1,DNS:value2
openssl req -extensions san_env -subj '/CN=value1' ...

참고:-확장자 san_env매개 변수가 될 필요가 존재하는 로그인할 때 CSR 뿐만 아니라 생성할 때습니다. 따라서,캘리포니아 서명된 Csr 추가-확장자 san_envopenssl 캘리포니아명령뿐만 아니라.

해설 (5)

이 솔루션을 마지막으로 생성하는 작업을 자체 서명된 인증서를 기반으로,위에 답변(받아들인답지 않't work for me):


openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=Acme Root CA" -out ca.crt

openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=*.example.com" -out server.csr
openssl x509 -req -extfile 
해설 (10)

제 2 포스트에서 이link는 것을 말한 그것은 할 수 없는 명령줄에서하지만,4 시에서 같은 링크를 제공하는 해결 방법을 사용하여 bash's 의 기능을 참조 데이터로 경우에서 파일입니다.

을 복용 더 보면,그것으로 누군가가 언급reqexts매개변수를 사용하여 추가하는 인증서를 요청합니다. 이 블로그]3용 bash's환경으로 접근 방식이다.

그러나 나는'm 을 돕습니다. Haven't 테스트의 자신입니다.

해설 (1)

그래서 나는 지옥의 시간이 제대로 작동하고 모든 Ansible. 로 Ansible's명령이 모듈에는'도 할 수 있는 파일로 리디렉션(<(...)),를 사용했다 작은.cnf파일 템플릿으로,하지만 그것이's 는 모든 지금 노력하고 있습니다. 여기's 무엇을 했는지,그것을 만들 작동:

San.cnf 템플릿(에 대해 생성된 각각의 CSR/CRT pair):

[req]
distinguished_name = req_distinguished_name
req_extensions     = v3_req
x509_extensions    = v3_req

[req_distinguished_name]
commonName       = {{ common_name }}
emailAddress     = {{ ssl_certs_email }}
organizationName = {{ ssl_certs_organization }}
localityName     = {{ ssl_certs_locality }}
countryName      = {{ ssl_certs_country }}

[v3_req]
# The extentions to add to a self-signed cert
subjectKeyIdentifier = hash
basicConstraints     = critical,CA:false
subjectAltName       = DNS:{{ common_name }}
keyUsage             = critical,digitalSignature,keyEncipherment

일부 변수

이러한 Ansible 사용되는 변수에서 다음 명령할 수 있지만,대체에서 필요로 하는 스크립트:

ssl_certs_fields: "/C={{ssl_certs_country}}/ST={{ssl_certs_state}}/L={{ssl_certs_locality}}/O={{ssl_certs_organization}}/CN={{common_name}}/emailAddress={{ssl_certs_email}}"
ssl_certs_local_privkey_path:       The path to the Private Key
ssl_certs_local_csr_path:           The path to the CSR
ssl_certs_local_path:               The local dir for this PKI file set
ssl_certs_local_decrypt_cakey_path: A temporarily decrypted copy of the CA 

키 ssl_certs_local_caserial_path:CA's 시리얼 번호 매기기의 파일 ssl_certs_local_cert_path:최종 생성 인증서 파일입니다.

CSR 세대의 명령

openssl req -new -sha256 -subj "{{ ssl_certs_fields }}" 
-key "{{ ssl_certs_local_privkey_path }}"
-out "{{ ssl_certs_local_csr_path }}" 
-config "{{ssl_certs_local_path}}/san.cnf"

자체 서명된 사회책임경영 인증서를 만들

  openssl x509 -req -days {{ ssl_certs_days }}
  -sha256
  -extfile "{{ssl_certs_local_path}}/san.cnf"
  -extensions v3_req
  -in "{{ ssl_certs_local_csr_path }}"
  -CA "{{ ssl_certs_local_ca_path }}"
  -CAkey "{{ ssl_certs_local_decrypt_cakey_path }}"
  -CAcreateserial
  -CAserial "{{ ssl_certs_local_caserial_path }}"
  -out "{{ ssl_certs_local_cert_path }}"

을 확인하는 결과

openssl x509 -noout -text -in {{ ssl_certs_local_cert_path }}

해야 하는 섹션을 포함하는 다음과 같이 나타납니다.

        X509v3 extensions:
        X509v3 Subject Key Identifier:
            3B:6E:E9:9F:B2:30:08:21:1C:C7:0D:4C:21:7A:B4:92:40:B6:71:98
        X509v3 Basic Constraints: critical
            CA:FALSE
        X509v3 Subject Alternative Name:
            DNS:foo.bar.com
해설 (0)

다음과 같은 명령을 생성하는 방법을 보여 줍니다 자체 서명된 인증서 산 위해example.comexample.net.

그것은 휴대용한다는 의미에서 우리는't 야로(또는지에 대해 알)의 위치는openssl.cnffile:


openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
  -keyout example.key -out example.crt -subj '/CN=example.com' \
  -extensions san \
  -config 
해설 (0)

테스트 RHEL7(만드는 자체 서명된 인증서를 SAN)


openssl req -x509 -nodes -newkey rsa:2048 -days 3650 -sha256 -keyout test.key -out test.cert -reqexts SAN -extensions SAN -subj '/CN=test.example.com' -config 
해설 (0)

내 이 문제에 대한 해결책을 만들고 싶었죠 그 참조는 임시 cnf 파일에 추가하여 내 명령줄 수집 subjectAltName 정보입니다.

해설 (0)

내가 원하는 하나의 명령 라인을 만들 CSR 완벽 없는 conf 파일,그러나지 않았't 생성 SubjAltName 항목입니다. 이 버전은 무엇이었을 사용하여를 사용하여 읽어-p 을 요청하는 FQDN나는 이번 작업과 산항목으로 잘 그래서 여기는's 는 솔루션을 위해 노력하고 있습니다.

거기에 의존 버전의 openssl,될 필요가 적어도 1.1.1. 필요하기 때문에-addext.

read -p "FQDN ?" CN; openssl req -new -key yourkeyfile.key -subj /C=GB/ST=county/L=city/O=company/OU=yourorg/CN=$CN -addext "subjectAltName = DNS:$CN" -out./$CN.csr

없이 장난으로 conf 파일을 이 방법입니다.

해설 (0)

질문에 대답하고있다,그러나 내가 여전히 고생을 얻으로 이것을 우아 와 유용한 형태를 자동화하는 CSR 세대입니다. 하이너가 좋은 그래서 나는 통합으로 일상적인할 수 있는 주제는 다른 이름으로 명령어 인수가 아닌 값이 파일에서도 유연성을 SAN 또는 산습니다. 그것을 시도와 함께 인수 한 다음으로 많습니다.


#!/bin/bash

#san_cert.sh

# defaults =====================================================================
DOM=domain.com
O=My\ Company,\ LLC
L=Seattle
ST=Washington
C=US
OU=Operations
EMAIL=certalert

#basic checks and strings ======================================================
if [ -z "$1" ];then
    echo usage: $0 name1 optionalname optionalname ...
    echo example: san_cert.sh www web w3 exch mail
    exit
else
    CN=$1
    SUBJ="/C=$C/ST=$ST/L=$L/O=$O/OU=$OU/CN=$CN.$DOM/emailAddress=$EMAIL.$DOM"
fi

#clearing old files
rm $CN.$DOM.ssl_csr $CN.$DOM.ssl_key

#create private key ============================================================
openssl genrsa -out $CN.$DOM.ssl_key 2048

if [ $# -gt 1 ];then #test for arg count
    #build SAN string ==================
    A=($@)
    I=1
    while [ $I -lt ${#A[@]} ]
    do
        SAN="DNS:${A[I]}.$DOM$CMA${SAN}"
        CMA=","
        I=$[$I+1]
    done
    SAN="\n[SAN]\nsubjectAltName=${SAN}"
    #===================================

    #create SAN certificate signing request ====================================
    openssl req -new -sha256 \
    -subj "$SUBJ" \
    -key   $CN.$DOM.ssl_key \
    -out   $CN.$DOM.ssl_csr \
    -reqexts SAN -config 
해설 (0)

이 대답했다,하지만 사람이's still looking for a no-프롬프트 cli-유일한 방법을 만들기-루트 인증서(없이 CAs 또는 Csr)그리고 don't 마음 Java 를 사용하키툴,여기's 체:

생성 PKCS12 키는키툴

bash 키툴-genkeypair\ -keyalg RSA\ -keysize3072\ -별명 티탄\ -dname"CN=타이탄,OU=엔지니어링,O=타이탄 주식 회사,C=US"\ -ext BC:c=캘리포니아:false\ -ext 결 c=코드는 serverauth\ -ext"샌:c=DNS:타이탄,IP:192.168.1.7"\ -유효성 3650\ -키 server.p12\ -storepass s3cr3t\ -keypass s3cr3t\ -storetype pkcs12

Export 인증서 및 키와openssl

bash openssl pkcs12-에서 서버입니다.p12-노드웃 cert.pem-passin 패스:s3cr3t openssl pkcs12-에서 서버입니다.p12-nodes-nocerts-습니다.pem-passin 패스:s3cr3t

해설 (0)