![SSL.pm](https://linux55.com/image/26943/SSL.pm.png)
내 컴퓨터를 (k)ubuntu 12.04에서 12.10으로 업그레이드했기 때문에 sendemail
.
이전 버전의 IO::Socket::SSL을 설치할 수 없습니다. 내 인상은 모든 것이 예상대로 작동하고 메시지는 단지 경고일 뿐이라는 것입니다.
이 메시지를 어떻게 없앨 수 있나요?
SSL.pm
다음은 문제(/usr/share/perl5/IO/Socket/SSL.pm)와 관련이 있다고 생각합니다.
34 use constant DEFAULT_VERSION => 'SSLv23:!SSLv2';
...
251 my %default_args = (
252 Proto => 'tcp',
253 SSL_server => $is_server,
254 SSL_use_cert => $is_server,
255 SSL_check_crl => 0,
256 SSL_version => DEFAULT_VERSION,
257 SSL_verify_mode => SSL_VERIFY_NONE,
258 SSL_verify_callback => undef,
259 SSL_verifycn_scheme => undef, # don't verify cn
260 SSL_verifycn_name => undef, # use from PeerAddr/PeerHost
261 SSL_npn_protocols => undef, # meaning depends whether on server or client side
262 SSL_honor_cipher_order => 0, # client order gets preference
263 );
...
332 ${*$self}{'_SSL_ctx'} = IO::Socket::SSL::SSL_Context->new($arg_hash) || return;
이메일을 보내
sendemail 끝에 코드는 다음과 같다고 생각합니다.
1903 ## Start TLS if possible
1904 if ($conf{'tls_server'} == 1 and $conf{'tls_client'} == 1 and $opt{'tls'} =~ /^(yes|auto)$/) {
1905 printmsg("DEBUG => Starting TLS", 2);
1906 if (SMTPchat('STARTTLS')) { quit($conf{'error'}, 1); }
1907 if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3 TLSv1')) {
1908 quit("ERROR => TLS setup failed: " . IO::Socket::SSL::errstr(), 1);
1909 }
1910 printmsg("DEBUG => TLS: Using cipher: ". $SERVER->get_cipher(), 3);
1911 printmsg("DEBUG => TLS session initialized :)", 1);
1912
1913 ## Restart our SMTP session
1914 if (SMTPchat('EHLO ' . $opt{'fqdn'})) { quit($conf{'error'}, 1); }
1915 }
1916 elsif ($opt{'tls'} eq 'yes' and $conf{'tls_server'} == 0) {
1917 quit("ERROR => TLS not possible! Remote SMTP server, $conf{'server'}, does not support it.", 1);
1918 }
답변1
데비안의 버그 추적 사이트에 버그 보고서가 있습니다: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679911
또한 해결 방법을 지적합니다.
-o tls=no
명령줄에서 옵션으로 지정됩니다 .
debian.org의 @Manolo Díaz에게 감사드립니다.
답변2
실제로는 기본값을 사용하십시오(두 번째 매개변수 제거). 바라보다https://metacpan.org/pod/IO::소켓::SSL(SSL_version 검색) 기본값은 SSLv23:!SSLv3:!SSLv2입니다.
v1.56의 1906행을 다음과 같이 수정했습니다.
# if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3 TLSv1')) {
if (! IO::Socket::SSL->start_SSL($SERVER)) {
(원래 줄을 주석 처리하세요)
답변3
더 간단한 해결책은 다음과 같습니다.
바꾸다:
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i
그리고:
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
답변4
SSL 버전을 수정한 후에도 여전히 인증서 오류가 발생하는 경우(위에 표시된 대로) 인증서 확인을 비활성화해야 합니다.
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv23:!SSLv2', SSL_verify_mode => 0)) {