다음과 같이 openSSL을 사용하여 자체 서명된 인증서를 만들 수 있습니다.
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX -nodes
인터페이스는 어떻게든 내 일반 이름을 64바이트로 제한합니다. 64바이트보다 긴 일반 이름을 가진 인증서를 만들려면 어떻게 해야 합니까?
답변1
"이렇게 하지 마세요. 표준에 위배됩니다."라는 모든 대답은 제가 아는 한 매우 도움이 되지 않습니다. 왜냐하면 리버스 엔지니어링 과제의 일환으로 이 작업을 수행해야 하기 때문입니다. 내가 아는 한, 표준을 위반했다는 사실은 중요하지 않습니다.
(대략) 단계는 다음과 같습니다.
- 다음에서 libressl의 최신 소스 코드를 다운로드하세요.https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/(저는 macOS Mojave와 함께 제공되는 버전인 2.6.0을 사용하고 있습니다)
- /tar/gz의 압축을 풀고
/crypto/asn1/a_mbstr.c
원하는 편집기에서 엽니다. 다음과 유사한 콘텐츠를 검색하세요.
if ((maxsize > 0) && (nchar > maxsize)) { ASN1error(ASN1_R_STRING_TOO_LONG); ERR_asprintf_error_data("maxsize=%ld", maxsize); return -1; }
그리고 댓글을 달아보세요. 버전 2.6.0의 경우 155-159행입니다. 이 줄을 제거하면 최대 CN 길이 확인이 제거됩니다.
파일의 지침에 따라
README
바이너리를 빌드합니다 . macOS에서 빌드할 때 YMMV를 제외한 라이브러리를 설치할 필요가 없습니다. 나는cmake
그것을 사용하여 새로운 openssl 바이너리를/build/apps/openssl
명령줄 플래그를 사용하여 CSR을 생성합니다(읽기: 대화형 도구가 아닙니다. 특별한 검사가 있지만 이 수정 사항은 해당 검사를 패치하지 않습니다!).
예를 들어:
/build/apps/openssl/openssl req -new -newkey rsa:2048 -nodes -out a.csr -keyout a.key -subj "/CN=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
openssl
스톡 바이너리(또는 필요한 경우 수정된 바이너리)를 사용하여 CSR에 서명합니다.openssl x509 -req -in a.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out a.crt -days 500 -sha256
그 후에는 멋진 비준수 인증서를 사용할 준비가 된 것입니다. 64자보다 긴 CN이 있는 인증서를 사용할 때 많은 문제가 있음을 발견했지만(Wireshark가 해부 디스플레이에서 CN을 자르는 등) 실제로는 내 요구 사항에 적합합니다.
답변2
당신은 할 수 없습니다.
이것최대 한도 지정64입니다:
-- 천장 사양은 필수 사항으로 간주되어야 합니다.
-- ITU-T X.411 MTS 매개변수 참조 정의의 부록 B에서 발췌
-- 상한
-- 상한
ub 이름 INTEGER ::= 32768
ub 일반 이름 INTEGER ::= 64
하위 장소 이름 INTEGER ::= 128
ub 상태 이름 INTEGER ::= 128
ub 조직 이름 INTEGER ::= 64
답변3
Allison의 탁월한 답변 외에도 다른 인증서 생성 도구는 openssl처럼 이 CN 제한 사항을 항상 준수하지는 않는다는 것을 발견했습니다.
예: Golang을 사용하여 CN을 원하는 만큼 길게 설정할 수 있는 간단한 자체 서명 인증서와 키 생성 스크립트를 만들었습니다.
내 솔루션은 다음과 같습니다. 브라우저에서 실행하거나 코드를 복사하여 로컬에서 수정하고 실행할 수 있습니다.https://go.dev/play/p/GbdoV0UEmFb
이 코드는 키를 생성하고, 인증서에 서명하고, PEM 형식으로 출력에 인쇄합니다(이 스레드에서 사용된 openssl 명령과 유사). 중요한 용도로 사용을 고려하고 계시다면 리뷰를 주의 깊게 읽어보시기 바랍니다. 다음은 openssl을 사용하여 이 스크립트에서 생성된 인증서를 읽을 때 긴 CN에 대한 증거입니다.
$ openssl x509 -text -noout -in playground.crt | head -n 11
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
a8:fd:bf:b8:f3:f9:85:09:36:28:89:fa:65:27:33:ed:19:08
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN = MY REALLY LONG COMMON NAME THAT IS DEFINITELY LONGER THAN 64 CHARACTERS
Validity
Not Before: Nov 10 23:00:00 2009 GMT
Not After : Nov 10 23:00:00 2010 GMT
Subject: CN = MY REALLY LONG COMMON NAME THAT IS DEFINITELY LONGER THAN 64 CHARACTERS