기존 CSR (인증서 서명 요청)에 SAN (주체 대체 이름) 추가


9

누구든지 기존 CSR에 여러 주제 대체 이름을 추가하는 방법을 알려줄 수 있습니까?

서명 시간에 SAN을 사용하여 CSR을 생성하거나 SAN을 추가하는 것에 대해서는 이야기하지 않습니다.이 두 가지를 모두 수행하는 방법을 알고 있습니다.

배경 : HP 블레이드 섀시는 CSR을 생성 할 수 있지만 단일 SAN 만 허용한다는 문제가 있습니다. 블레이드 섀시에 키를 업로드 할 방법이 없기 때문에 결과 인증서를 사용할 수 없으므로 다른 곳에서 생성 된 CSR을 사용할 수 없습니다.

CA의 표준 프로세스는 SAN 추가 시간을 허용하지 않습니다. 그들은 기꺼이 실험하려고하지만, 우리가 끝날 때 해결책을 찾으려고 노력하고 있습니다. 이것은 우리가 비표준 프로세스를 사용해야하는 경우 내 경험에 비표준 프로세스를 사용해야한다는 것을 의미합니다. 인생은 결국 어려워 질 것입니다. 예 : 비표준 절차를 알고있는 직원이 휴가 등으로 인해 부재하는 경우

현재 방법은 웹 GUI를 통해 블레이드 섀시 온보드 관리자에 연결하고 단일 CN으로 CSR을 생성하는 것입니다.

웹 GUI는 CSR에서 단일 SAN 만 허용합니다.

그런 다음 openssl 구성에서 다음 스탠자로 자체 서명합니다.

[ v3_ca ]
subjectAltName = "DNS:bladesystem8,DNS:bladesystem8.services.adelaide.edu.au,DNS:bladesystem8-backup,DNS:bladesystem8-backup.services.adelaide.edu.au"

결과 인증서에는 추가 SAN이 있습니다.


블레이드 섀시에서 인증서를 어떻게 생성합니까? 어떤 방법으로 블레이드 섀시를 연결하는 데 사용하고 있습니까?
Eli

섀시는 c7000입니다. 예, 현재 섀시에서 CSR을 생성하고 서명 시점에 SAN을 추가하고 있지만 이는 자체 서명 된 인증서를위한 것입니다.
Jason Tan

현재 연결하는 데 어떤 방법을 사용하고 있으며 인증서를 생성하는 프로세스는 무엇입니까?
Eli

현재 방법을 포함하도록 주요 질문을 편집했습니다.
Jason Tan

1
다른 컴퓨터에서 인증서 및 개인 키를 생성하여 내보내는 경우 인증서 및 개인 키를 가져올 수 있습니까?
클린트

답변:


15

섀시가 SAN 추가를 지원하지 않는 경우 키를 섀시에서 꺼내고 openssl을 사용하여 CSR을 생성해야합니다.

섹션 req_extensions = v3_req에서 주석 처리가 제거 되었는지 확인하십시오 [ req ].

추가 subjectAltName받는 [ v3_req ]부분.

새로운 CSR을 생성하십시오.

openssl req -new -key extracted_c7000.key -out your_new.csr

기존 CSR을 편집 할 수 없습니다.


cakemox가 말한 것. 인증서가 서명 된 후 인증서 (서명 된 CSR)를 편집 할 수 있으면 인증 기관의 전체 목적을 무효화합니다.
MadHatter

CSR에 서명 한 후 CSR을 편집하고 싶지 않습니다. CSR이 생성 된 후 편집하고 싶지만 서명하기 전에 CSR을 편집하고 싶습니다. openssl을 사용하여 서명하기 전에 CSR의 일부를 편집 할 수 있습니다.
Jason Tan

키를 다운로드 할 수 있다면 그렇게 할 것입니다. 죄송합니다. 원래 질문에서 언급하지 않았지만 키를 다운로드 할 수 없었습니다. 열쇠를 다운로드하는 방법을 알려줄 수있는 사람에게 현상금을 지불하게되어 기쁩니다.
Jason Tan

참고-openssl을 사용하여 서명하기 전에 특히 "openssl req -subj"옵션을 사용하여 CSR의 일부를 편집 할 수 있습니다. 그러나 v3 SAN 확장을 추가 할 수있는 한 추가 CN을 포함하여 새로운 제목 줄을 지정할 수 있습니다.
Jason Tan

2
CSR은 머신의 개인 키로 서명되므로 생성 된 후에는 편집 할 수 없습니다 (그렇지 않으면 더 이상 서명하지 못함). 그러나 CA는 공인 인증서에있는 필드를 편집 할 수 있습니다. 이것이 SAN 필드를 변경하는 유일한 방법입니다 (공개 CA로 보내는 경우 제어 할 수 없음).
Chris S

0

중요 사항 :이 모든 것은 다소 추측 적이므로 코드에 깊고 내가 말하는 것에 동의하지 않으면 코드를 믿으십시오. 저는 CA 전문가가 아니며 TV에서 하나만 재생합니다. 그것은 말했다 :

CSR의 기능으로는 힘들 것입니다. 프로그래밍 방식으로 CSR을 생성하는 마지막 단계는 생성 한 모든 항목을 해시 한 다음 개인 키로 서명하는 것입니다. 따라서 CSR 텍스트에 이러한 특성을 추가 할 수 있지만 서명은 내용과 일치하지 않으므로 서명하지 않습니다.

그러나 귀하의 경우, 귀하는 CA를 통제하거나 적어도 접촉하고 있습니다. 이것은 두 가지 옵션을 제공합니다.

  1. CSR에서 서명을 무시하고 인증서를 발급하도록 CA에 지시 할 수 있습니다.
  2. 요청한 것과 다른 인증서를 CA가 발급하도록 할 수 있습니다 (예 : 속성 추가).

이 중 # 1이 가장 쉬운 것 같습니다. 이를 위해 OpenSSL에서 변조 방지 기능을 해제해야하지만 약간 더 쉬운 기능이 있습니다. asn1parse부터 시작하여 CSR을 분리하는 방법을 보여줍니다.


(예를 들어 추가 추가 연구에서 옵션 # 2도, 실제로는 매우 간단하고, CA의 다수에 의해 수행 site.comA와 www.site.comSAN을 같은 인증서).
BMDan

0

개인 키 사본을 얻을 수 있으면 cakemox의 대답이 가장 쉬운 방법이지만 기본적으로 "등록 에이전트"인증서를 사용하여 CSR에 다시 서명 할 수없는 경우 다른 방법이 있습니다.

css-security.com 블로그 게시물 에는 모든 세부 사항이 있습니다. 그러나 프로세스의 개요는 다음과 같습니다.

  • 등록 에이전트 인증서 획득
  • 발급을 위해 EA 인증서를 요구하도록 SSL 인증서 템플릿 수정
  • SAN 정보가 필요한 CSR 획득
  • SAN 정보를 추가하는 동안 EA 인증서를 사용하여 CSR에 서명

개인적으로 시도했을 때 인증서 템플릿 수정에 대한 부분을 건너 뛰었습니다. 직접 등록 에이전트 인증서를 생성 할 수 있다고 가정하면 실제 프로세스는 다음과 같습니다.

SAN 확장 정보가있는 san.inf를 작성하십시오.

[Extensions]
2.5.29.17="{text}dns=mysan1.example&dns=mysan2.example"

요청을 다시 서명하십시오

certreq -policy -config "myca.example\CA" orig-request.csr san.inf corrected-request.csr

수정 된 요청 제출

certreq -submit -config "myca.example\CA" -attrib "CertificateTemplate:MyTemplate" corrected-request.csr

그리고 발급 과정에서 정상적으로 진행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.