webentwicklung-frage-antwort-db.com.de

Wie kann der Sicherheitstyp in Jenkins von SSL in TLS geändert werden?

Ich versuche, die SMTP-E-Mail-Benachrichtigung einzurichten. Ich konnte sehen, dass der Gmail-Teil gut funktioniert. Ich möchte es für mein Office 365 konfigurieren. 

SMTP-Server = SMTP-Büro 365.com

Wir haben kein SSL konfiguriert. Stattdessen verwenden wir TLS. Wie kann ich das TLS in den Jenkins einstellen? Es gibt nur eine Check-Schaltfläche, die die Verwendung von SSL vorschlägt. Wenn ich es deaktiviere, was soll es verwenden?

Ich erhalte folgende Fehler - 

Failed to send out e-mail

javax.mail.MessagingException: Could not connect to SMTP Host: smtp.office365.com, port: 587;
  nested exception is:
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.Sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.Java:1934)
    at com.Sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.Java:638)
    at javax.mail.Service.connect(Service.Java:317)
    at javax.mail.Service.connect(Service.Java:176)
    at javax.mail.Service.connect(Service.Java:125)
    at javax.mail.Transport.send0(Transport.Java:194)
    at javax.mail.Transport.send(Transport.Java:124)
    at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.Java:499)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:616)
    at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.Java:298)
    at org.kohsuke.stapler.Function.bindAndInvoke(Function.Java:161)
    at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.Java:96)
    at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.Java:120)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.Java:53)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.Java:728)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:858)
    at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.Java:248)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.Java:53)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.Java:728)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:858)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.Java:631)
    at org.kohsuke.stapler.Stapler.service(Stapler.Java:225)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:848)
    at org.Eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.Java:686)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1494)
    at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.Java:96)
    at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.Java:88)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1482)
    at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.Java:48)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1482)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.Java:84)
    at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.Java:76)
    at hudson.security.HudsonFilter.doFilter(HudsonFilter.Java:164)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1482)
    at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.Java:46)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1482)
    at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.Java:81)
    at org.Eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1474)
    at org.Eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.Java:499)
    at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:137)
    at org.Eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.Java:533)
    at org.Eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.Java:231)
    at org.Eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.Java:1086)
    at org.Eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.Java:428)
    at org.Eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.Java:193)
    at org.Eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.Java:1020)
    at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:135)
    at org.Eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.Java:116)
    at org.Eclipse.jetty.server.Server.handle(Server.Java:370)
    at org.Eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.Java:489)
    at org.Eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.Java:960)
    at org.Eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.Java:1021)
    at org.Eclipse.jetty.http.HttpParser.parseNext(HttpParser.Java:865)
    at org.Eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.Java:240)
    at org.Eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.Java:82)
    at org.Eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.Java:668)
    at org.Eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.Java:52)
    at winstone.BoundedExecutorService$1.run(BoundedExecutorService.Java:77)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1146)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
    at Java.lang.Thread.run(Thread.Java:679)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at Sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.Java:542)
    at Sun.security.ssl.InputRecord.read(InputRecord.Java:374)
    at Sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.Java:850)
    at Sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.Java:1190)
    at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1217)
    at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1201)
    at com.Sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.Java:507)
    at com.Sun.mail.util.SocketFetcher.getSocket(SocketFetcher.Java:238)
    at com.Sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.Java:1900)
    ... 63 more
29

Öffnen Sie für Jenkins unter Windows die Datei jenkins.xml, und ändern Sie den Argumentenknoten

-Xrs -Xmx256m -Dhudson.lifecycle = hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable = true -jar "% BASE%\jenkins.war" --httpPort = 8080

24
kaloyan

Office 365 erfordert tatsächlich authentifiziertes SMTP mit TLS. Die SSL-Option in der Jenkins-Konfiguration hilft nicht, lassen Sie sie nicht aktiviert. Fügen Sie stattdessen die folgende Systemeigenschaft der Jenkins-VM hinzu:

-Dmail.smtp.starttls.enable=true

Für den Standalone-Server legt Jenkins die Datei in jenkins.xml aus dem Installationsordner ein und für Tomcat aktualisieren Sie das Startskript.

Starten Sie dann Jenkins neu und Sie können loslegen.

13
Bogdan Calmac

Ich betreibe Jenkins unter Ubuntu Server 14.04 und musste die vorherige Antwort anpassen, die die CentOS-Distribution anspricht.

Bei den meisten Linux-Distributionen befindet sich die Konfigurationsdatei für Jenkins unter /etc/default/jenkins ( siehe diesen Link ). Ich benutze Jenkins 2.7 und füge -Dmail.smtp.starttls.enable=true an die vorhandene Einstellungsvariable Java_ARGS an. Zum Schluss endete ich damit:

Java_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
10
Rozar Fabien

Hier ist es gelungen, Jenkins auf CentOS zu betreiben. Bearbeiten Sie /etc/sysconfig/jenkins und fügen Sie die Option -Dmail.smtp.starttls.enable=true zu JENKINS_Java_OPTIONS hinzu. 

Wenn bereits eine andere Variable vorhanden ist, hängen Sie -Dmail.smtp.starttls.enable=true an, so dass sie der folgenden ähnelt:

JENKINS_Java_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"

starten Sie Jenkins mit service jenkins restart neu, und Sie sollten sich auf den Weg machen

6
raj.andy1

Danke für die Antworten, ich habe es behoben. Zunächst unterstützt Java standardmäßig nur SSL. Daher müssen Jenkins Java-Optionen festgelegt werden, um TLS zu aktivieren. Starten Sie anschließend den Jenkins-Dienst. Das Problem dieses Berechtigungsproblems tritt auf, wenn Sie die E-Mail-Adresse des Systemadministrators nicht in der Spalte für die Position von Jenkins angeben. Dies ist bei Google Mail SMTP nicht der Fall. Ich denke, Office 365 hat eine hohe Sicherheit. So kann nur der registrierte Benutzer die E-Mails senden.

1

Das Hinzufügen von "-Dmail.smtp.starttls.enable = true" zu Java-Optionen funktionierte für mich nicht sofort - Jenkins versuchte, eine Verbindung zum SMTP herzustellen, aber in den Protokollen unter/var/log/maillog (CentOS) 7.2) Ich habe gesehen, dass die Verbindung hergestellt ist, und Postfix hat nach einiger Zeit (vermutlich nach Zeitüberschreitung) gemeldet, dass die Verbindung nach CONNECT von {Host_Name} verloren gegangen ist. Ich habe auch eine Verbindung über TLS. Nach einigen Nachforschungen habe ich mich entschlossen, einen anderen Port zu verwenden - 587 - anstelle von Standard 465 und voila! - Schließlich wurde die Test-E-Mail gesendet.

0
Ivan