저는 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 형식으로 남아 있습니다.이 방법출력을 file --mime-encoding
utf-8로 변경했지만 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에 대한 다음 두 가지 질문이 도움이 된다는 것을 알았습니다.