web-dev-qa-db-fra.com

Comment changer le type de sécurité de SSL à TLS dans Jenkins?

J'essaie de configurer la notification par courrier électronique smtp. Je pouvais voir que la partie gmail fonctionne bien. Je veux le configurer pour mon Office 365. 

Serveur Smtp = smtp.office365.com

Nous n'avons pas configuré SSL. Au lieu de cela, nous utilisons TLS. Comment paramétrer le TLS dans Jenkins? Si je le désactive, que va-t-il utiliser?

Je reçois les erreurs suivantes - 

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
dexterous_stranger

Pour Jenkins sous Windows, ouvrez jenkins.xml et modifiez le nœud arguments

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

24
kaloyan

Office 365 nécessite en effet un SMTP authentifié avec TLS. L'option SSL dans la configuration de Jenkins n'aide pas, laissez la case décochée. Ajoutez plutôt la propriété système suivante à la machine virtuelle Jenkins:

-Dmail.smtp.starttls.enable=true

Pour le serveur autonome, Jenkins le mettre dans jenkins.xml à partir du dossier d'installation et pour Tomcat, mettez à jour le script de démarrage ou utilisez l'icône de la barre d'état sous Windows.

Puis redémarrez Jenkins et vous êtes prêt à partir.

13
Bogdan Calmac

Je lance Jenkins sous Ubuntu Server 14.04 et je devais adapter la réponse précédente, qui traitait de la distribution CentOS.

Tout d’abord, dans la plupart des distributions Linux, le fichier de configuration de Jenkins se trouve à /etc/default/jenkins ( voir ce lien ). J'utilise Jenkins 2.7 et j'ajoute -Dmail.smtp.starttls.enable=true à la variable de réglage existante Java_ARGS. Finalement, j'ai fini avec ceci:

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

Voici ce qui a fonctionné pour moi, exécuter Jenkins sur CentOS. Éditez /etc/sysconfig/jenkins et ajoutez l'option -Dmail.smtp.starttls.enable=true à JENKINS_Java_OPTIONS

S'il y a déjà une autre variable, ajoutez-y -Dmail.smtp.starttls.enable=true, elle devrait donc ressembler à la suivante

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

redémarrez Jenkins avec service jenkins restart et vous devriez être prêt à partir

6
raj.andy1

Merci pour les réponses, je l'ai fait réparer. Tout d'abord, Java ne prend en charge que SSL par défaut. Ainsi, les options Java de Jenkins doivent être définies pour activer TLS. Ensuite, démarrez le service Jenkins. Le problème de ce problème d'autorisation se produit lorsque vous ne spécifiez pas l'adresse de messagerie de l'administrateur système dans la colonne Emplacement de Jenkins. Cela n'arrive pas pour gmail smtp. Je suppose qu'Office 365 est hautement sécurisé. Ainsi, seul l'utilisateur enregistré peut envoyer les courriels.

1
dexterous_stranger

Pour moi, ajouter "-Dmail.smtp.starttls.enable = true" aux options Java ne fonctionnait pas tel quel - Jenkins essayait de se connecter au SMTP, mais dans les journaux de/var/log/maillog (CentOS 7.2) J'ai vu que la connexion était établie et après un certain temps (vraisemblablement après l'expiration du délai) postfix a signalé "connexion perdue après CONNECT de {nom_hôte}". J'ai aussi la connexion via TLS. Après quelques recherches, j'ai décidé d'essayer différents ports - 587 - au lieu du port par défaut 465 et le tour est joué! - enfin, l'e-mail de test a été envoyé.

0
Ivan