Linux 기반 Stunnel 2개, 서버 1개, 클라이언트 1개가 있습니다. 내가 하고 싶은 것은 stunnel 클라이언트를 사용하고 검증을 통해 인증서를 기반으로 사용자를 인증하는 것입니다.
각각에 대한 구성 파일은 다음과 같습니다.
고객:
cert = /stunnel/client_Access_stunnel.pem
key = /stunnel/client_Access_stunnel.pem
CAfile = /stunnel/client_Access_stunnel.pem
CApath = /stunnel/cacerts/
flips=no
pid = /var/run/stunnel-tcap.pid
; Socket parameters tuning
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
socket = l:SO_KEEPALIVE=1
socket = r:SO_KEEPALIVE=1
output = /stunnel/stunnel.log
client = yes
;verify = 3
debug = 5
[tcap]
accept = 0.0.0.0:3701
connect = 192.168.1.4:3700
섬기는 사람:
pid = /var/run/stunnel/server.pid
cert = /opt/quasar/cert/certs/stunnels/server.pem
key = /opt/quasar/cert/certs/stunnels/server.pem
CApath = /opt/certs/stunnels/cacerts/
; Socket parameters tuning
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
socket = l:SO_KEEPALIVE=1
socket = r:SO_KEEPALIVE=1
; Security level
verify = 2
; Uncomment for troubleshooting purposes
debug = 7
; Log file path
output = /opt/stunnels/stunnel.log
[stunnel1]
accept = 0.0.0.0:3700
connect = 127.0.0.1:3701
오류는 다음과 같습니다
고객:
2016.11.16 12:55:10 LOG7[77]: Remote descriptor (FD=11) initialized
2016.11.16 12:55:10 LOG6[77]: SNI: sending servername: 192.168.104.74
2016.11.16 12:55:10 LOG7[77]: SSL state (connect): before/connect initialization
2016.11.16 12:55:10 LOG7[77]: SSL state (connect): SSLv2/v3 write client hello A
2016.11.16 12:55:10 LOG6[78]: Certificate verification disabled
2016.11.16 12:55:10 LOG6[78]: Certificate verification disabled
2016.11.16 12:55:10 LOG6[78]: Certificate verification disabled
2016.11.16 12:55:10 LOG6[77]: Certificate verification disabled
2016.11.16 12:55:10 LOG6[77]: Certificate verification disabled
2016.11.16 12:55:10 LOG6[77]: Certificate verification disabled
2016.11.16 12:55:10 LOG7[77]: SSL alert (read): fatal: unknown CA
2016.11.16 12:55:10 LOG3[77]: SSL_connect: 14094418: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca
2016.11.16 12:55:10 LOG5[77]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2016.11.16 12:55:10 LOG7[77]: Deallocating application specific data for addr index
섬기는 사람:
2016.11.16 11:55:17 LOG7[36384:140097622492928]: SSL state (accept): before/accept initialization
2016.11.16 11:55:17 LOG7[36384:140097622492928]: SSL state (accept): SSLv3 read client hello A
2016.11.16 11:55:17 LOG7[36384:140097622492928]: SSL state (accept): SSLv3 write server hello A
2016.11.16 11:55:17 LOG7[36384:140097622492928]: SSL state (accept): SSLv3 write certificate A
2016.11.16 11:55:17 LOG7[36384:140097622492928]: SSL state (accept): SSLv3 write certificate request A
2016.11.16 11:55:17 LOG7[36384:140097622492928]: SSL state (accept): SSLv3 flush data
2016.11.16 11:55:17 LOG4[36384:140097622492928]: VERIFY ERROR: depth=0, error=unable to get local issuer certificate: /C=UK/ST=London/L=London/O=org/OU=OP/CN=client/[email protected]
2016.11.16 11:55:17 LOG7[36384:140097622492928]: SSL alert (write): fatal: unknown CA
2016.11.16 11:55:17 LOG3[36384:140097622492928]: SSL_accept: 140890B2: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
2016.11.16 11:55:17 LOG5[36384:140097622492928]: Connection reset: 0 bytes sent to SSL, 0 bytes sent to socket
타임스탬프를 무시하세요. 동일한 오류가 다른 시간에 발생합니다.
- 아무런 변경 없이 client_Access_stunnel.pem에 CA 인증서를 추가했습니다.
- CApath에 모든 CA 인증서를 추가했습니다.
- 인증서는 xca 로컬 관리에 의해 서명됩니다.
답변1
CApath는 verifyChain 또는 verifyPeer 옵션과 함께 사용되지만 이러한 옵션 중 어느 것도 설정되어 있지 않습니다. 또한 "이 디렉터리에 있는 인증서의 이름은 XXXXXXXX.0이어야 합니다. 여기서 XXXXXXXX는 인증서의 DER로 인코딩된 제목의 해시입니다(터널 매뉴얼 참조)."
다음을 사용하여 인증서를 테스트하면 어떻게 되나요?
openssl verify -CApath /opt/certs/stunnels/cacerts/ server-certificate-file