벌채 반출

벌채 반출

저는 일부 IoT 장치에 대해 OpenVPN 서버를 실행하고 있으며 이러한 장치 중 상당수는 이전 인증서가 만료되기 때문에 인증서를 교체해야 합니다. 이러한 인증서를 업데이트하는 것은 느린 모바일 연결을 사용하는 취약한 수동 프로세스이며, 또한 OVPN을 통해서만 해당 장치에 액세스할 수 있습니다. 이러한 이유로 인증서가 성공적으로 교체되었고 이를 사용하여 새 연결이 설정되었는지 추가로 확인하고 싶습니다. 문제는 교체된 인증서의 일련번호나 발행 시간을 확인하기 위해 OVPN에서 충분한 세부 정보를 얻을 수 있는 다소 쉬운 방법을 찾을 수 없다는 것입니다.

그렇다면 OpenVPN의 각 연결에 대한 인증서 세부 정보를 기록하는 방법은 무엇입니까?

상태 로그에 추가 열을 추가하는 것이 가장 좋지만--상태-버전 2인증서에서 추가 세부 정보를 제공하지 않는 것 같습니다. 인증서의 일반 이름과 같은 사항은 이전 인증서와 새 인증서 간에 동일합니다. 내부적으로 사용 가능한 데이터를 기반으로 추가 맞춤 열을 지원합니까?

추가로 로그 수준을 9까지 높였지만 낮은 수준의 패킷 관련 내용을 많이 기록하는 것 외에 클라이언트의 추가 인증서 세부 정보도 볼 수 없었습니다. 그러나 로그 수준에 따라 내용을 쉽게 놓칠 수 있으므로 해당 인증서 세부 정보 자체만 기록하는 것이 선호됩니다.

--client-connect및 같은 개념 --learn-address은 일반 이름만 제공하는 것 같습니다. 또한 일시적인 관심일 뿐이므로 이 경우에는 너무 맞춤화된 소프트웨어를 구현하는 것을 피하고 싶습니다.

감사해요!

답변1

내 질문에는 실제로 두 부분이 포함되어 있습니다. 관심 있는 항목을 기록하는 방법과 오래된 인증서가 더 이상 사용되지 않도록 하는 목표를 달성하는 방법입니다. 그래서 대답도 달라집니다.

벌채 반출

인증서 일련번호와 같은 추가 세부 정보를 기록하는 간단한 구성을 찾지 못했지만 다음의 도움으로 사용자 정의하여 구현할 수 있습니다.--tls-확인. 여기에는 스크립트가 필요하며 해당 스크립트에 대해 OVPN은 일부 인증서의 일련 번호를 포함하는 여러 환경 변수를 설정합니다.

–tls-확인 cmdcmd 명령을 실행하여 다른 모든 인증 테스트를 통과한 보류 중인 TLS 연결의 X509 이름을 확인합니다(–crl-verify 지시어를 통한 해지 제외, 해지 테스트는 –tls-verifytest 이후에 발생함).

지원되는 환경 변수:

tls_id_{n}
tls_serial_{n}
tls_serial_hex_{n}

엄격하게 로깅하지는 않지만 --tls-export-cert이론상 자세한 분석을 위해 서버에서 일부 클라이언트의 전체 인증서를 사용할 수 있기 때문에 관심을 가질 수도 있습니다.

–tls-export-cert 디렉토리클라이언트가 이 디렉터리에 연결할 때 사용하는 인증서를 저장합니다. 이는 –tls-verify가 호출되기 전에 수행됩니다. 인증서는 임시 이름을 사용하며 tls-verify 스크립트가 반환되면 삭제됩니다. 인증서에 사용되는 파일 이름은 Peer_cert 환경 변수를 통해 사용할 수 있습니다.

잘못된 인증서 거부

나의 궁극적인 목표는 교체된 인증서가 예상대로 사용되는지 확인하는 것입니다. 이를 수행하는 한 가지 접근 방식은 인증서 취소 목록을 사용하는 것이며 OVPN은 이를 수행하는 매우 쉬운 방법을 지원합니다. 인증서에 구체적인 파일 형식 등이 필요하지 않지만 일부 구성된 디렉터리 및 모든 인증서에 일부 파일 이름을 간단히 추가할 수 있습니다. 일부 파일 이름에 해당하는 일련 번호가 포함된 경우 차단됩니다. 명심해야 할 가장 중요한 점은 파일 이름이 10진수로 된 인증서 일련번호여야 한다는 것입니다. 그 밖의 모든 것은 매우 쉽습니다.

–crl-crl 확인 ['dir']PEM 형식의 crl 파일에 대해 피어 인증서를 확인하십시오.[...]선택적인 dir 플래그가 지정된 경우 crl이 해지된 일련 번호로 명명된 파일이 포함된 디렉터리인 다른 모드를 활성화하십시오(파일은 비어 있을 수 있으며 내용은 절대 읽지 마세요). 클라이언트가 연결을 요청하는 경우 클라이언트 인증서 일련 번호(10진수 문자열)가 디렉터리에 있는 파일 이름인 경우 연결이 거부됩니다.

server.conf단순히 다음과 같은 추가 구성이 포함되어 있습니다.

crl-verify 'crl' 'dir'

다음 디렉터리에 매핑됩니다.

crl
    7
    8
    9
crl_staging
    12
    13
    14
openvpn-status.log
server.conf

crl및 의 파일은 crl_staging단순히 십진수 인증서 일련번호이며 필요에 따라 디렉터리 간에 이동할 수 있습니다. 에서 시리얼을 사용할 수 있으면 crl연결이 차단되고, 그렇지 않으면 성공합니다. 로그의 오류 메시지 예시는 다음과 같습니다.

ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 TLS: new session incoming connection from [AF_INET]34.252.35.124:35231 (via [AF_INET][...]%eth1)
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 VERIFY OK: depth=1, C=DE, ST=[...], O=[...], OU=[...], CN=[...], emailAddress=[...]
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 VERIFY CRL: certificate serial number 10 is revoked
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 OpenSSL: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 TLS_ERROR: BIO read tls_read_plaintext error
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 TLS Error: TLS object -> incoming plaintext read error
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 TLS Error: TLS handshake failed

관련 정보