OpenSSL에서 문자를 UTF-8 리터럴로 변환

OpenSSL에서 문자를 UTF-8 리터럴로 변환

저는 OpenSSL 셸 명령을 사용하고 텍스트 데이터베이스에 정보를 저장하는 간단한 PKI 웹 애플리케이션을 Php에서 실행하고 있습니다. ASCII가 아닌 입력 문자(예: 독일어)를 처리해야 하지만 새 인증서가 생성되면 필드가

[...] /C=DE/ST=H\xC3\xA4mburg/L=H\xC3\xA4mburg/O=\xC3\x9FBCD/OU=\xC3\xA4BC/ [...]

나는 추가했다

[req]
utf8                = yes
string_mask         = utf8only
name_opt            = multiline,-esc_msb,utf8

OpenSSL 구성 파일에 추가하고 인증서는 다음을 사용하여 생성됩니다.

openssl req -utf8 [...]
openssl ca -utf8 [...]

프로그램은 사용자 인증서를 요청하고 생성하는 데 사용되는 임시 구성 파일을 작성합니다. 확인해 보니 사용자 구성 파일의 필드와 CA의 필드가 정상입니다. OpenSSL이 인증서를 생성할 때 문제가 나타납니다. 데이터베이스와 인증서에는 올바른 문자 대신 이러한 코드가 포함되어 있습니다.

또한 다음을 사용하여 데이터베이스 파일을 UTF-8로 변환하려고 시도했지만 iconv파일은 US-ASCII 형식으로 남아 있습니다.이 접근법출력 내용을 utf-8로 변경 file --mime-encoding하지만 OpenSSL은 이전과 동일한 방식으로 계속해서 새 항목을 작성합니다.

또한 가상 호스트에서 utf-8 헤더와 설정을 보내고 있다고 언급하겠습니다 AddDefaultCharset utf-8. 로케일은 de_DE.utf8코드와 서버에서 로 설정됩니다 .

내가 무엇을 놓치고 있나요? 도움을 주시면 감사하겠습니다.

답변1

저도 며칠동안 이 문제로 고생하다가 드디어 성공했습니다.

-utf8명령줄과 utf8 = yes구성이 약간 중복된 것 같습니다.

나는 -utf8 -nameopt multiline,utf8명령줄에서 사용했는데 구성 파일에서 아무것도 이스케이프하지 않았습니다(여러 버전을 시도했지만 아무것도 작동하지 않았습니다).UTF-8 유니코드 텍스트내가 달릴 때 file <configfile>.

내 로케일과 cli는 utf-8 입력 및 출력을 사용하도록 구성되었으며 구성은 다음과 유사합니다.

[req]
prompt = no
distinguished_name = subject

[subject]
C = DE
ST = myutf8state
L = myutf8locality
O = myutf8organization
OU = myutf8organizational unit
CN = my.common.name

나는 stackoverflow에 대한 다음 두 가지 질문이 도움이 된다는 것을 알았습니다.

관련 정보