CINXE.COM
Using SASL | Libera Chat
<!DOCTYPE html> <html lang="en"><head> <link rel="preload" href="/static/fonts/comfortaa-v30-subset-regular.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/static/fonts/ubuntu-v15-latin-regular.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/static/fonts/ubuntu-v15-subset-500.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/static/img/libera-color.svg" as="image" type="image/svg+xml"> <meta charset="utf-8"> <meta content="IE=edge" http-equiv="X-UA-Compatible"> <meta content="width=device-width, initial-scale=1" name="viewport"><!-- Begin Jekyll SEO tag v2.7.1 --> <title>Using SASL | Libera Chat</title> <meta name="generator" content="Jekyll v4.3.0" /> <meta property="og:title" content="Using SASL" /> <meta property="og:locale" content="en_GB" /> <meta name="description" content="SASL is a way for your IRC client to automatically login to an existing Libera.Chat account. Libera.Chat sometimes requires SASL authentication; if you were disconnected with a message saying you need SASL, skip to the section on connecting from a SASL-only address." /> <meta property="og:description" content="SASL is a way for your IRC client to automatically login to an existing Libera.Chat account. Libera.Chat sometimes requires SASL authentication; if you were disconnected with a message saying you need SASL, skip to the section on connecting from a SASL-only address." /> <link rel="canonical" href="https://libera.chat/guides/sasl" /> <meta property="og:url" content="https://libera.chat/guides/sasl" /> <meta property="og:site_name" content="Libera Chat" /> <meta property="og:type" content="article" /> <meta property="article:published_time" content="2024-11-22T23:13:23+00:00" /> <meta name="twitter:card" content="summary" /> <meta property="twitter:title" content="Using SASL" /> <meta property="article:publisher" content="liberachat" /> <script type="application/ld+json"> {"description":"SASL is a way for your IRC client to automatically login to an existing Libera.Chat account. Libera.Chat sometimes requires SASL authentication; if you were disconnected with a message saying you need SASL, skip to the section on connecting from a SASL-only address.","headline":"Using SASL","dateModified":"2024-11-22T23:13:23+00:00","datePublished":"2024-11-22T23:13:23+00:00","url":"https://libera.chat/guides/sasl","@type":"TechArticle","@context":"https://schema.org"}</script> <!-- End Jekyll SEO tag --> <link rel="alternate" type="application/atom+xml" title="Libera Chat News" href="/atom.xml"> <link rel="icon" type="image/svg+xml" href="/static/img/libera-color.svg"> <link rel="alternate icon" href="/favicon.ico"> <!-- Stylesheets --> <style>/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */ *,::after,::before{box-sizing:border-box}:root{-moz-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}body{font-family:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji'}hr{height:0;color:inherit}abbr[title]{text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,'Liberation Mono',Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}</style> <style>@font-face { /* comfortaa-regular - subset */ font-family: 'Comfortaa'; src: url('/static/fonts/comfortaa-v30-subset-regular.woff2') format('woff2'), url('/static/fonts/comfortaa-v30-subset-regular.woff') format('woff'), url('/static/fonts/comfortaa-v30-subset-regular.ttf') format('truetype'); font-style: normal; font-weight: 400; font-display: swap; /* . C L a b e h i r t */ unicode-range: U+002E, U+0043, U+004C, U+0061-0062, U+0065, U+0068-0069, U+0072, U+0074; } @font-face { /* ubuntu-regular - latin */ font-family: 'Ubuntu'; src: local(''), url('/static/fonts/ubuntu-v15-latin-regular.woff2') format('woff2'), url('/static/fonts/ubuntu-v15-latin-regular.woff') format('woff'), url('/static/fonts/ubuntu-v15-latin-regular.ttf') format('truetype'); font-style: normal; font-weight: 400; font-display: swap; } @font-face { /* ubuntu-500 - subset */ font-family: 'Ubuntu'; src: local(''), url('/static/fonts/ubuntu-v15-subset-500.woff2') format('woff2'), url('/static/fonts/ubuntu-v15-subset-500.woff') format('woff'), url('/static/fonts/ubuntu-v15-subset-500.ttf') format('truetype'); font-style: normal; font-weight: 500; font-display: swap; /* C c e n o t */ unicode-range: U+0043 U+0063 U+0065 U+006E U+006F U+0074; } :root { --header-height: 4rem; --content-inline-padding: 1.3rem; --content-max-width: 80ch; /* define our palette for all themes */ --white: #fff; --gray-100: #f3f4f6; --gray-200: #e5e7eb; --gray-300: #d1d5db; --gray-400: #9ca3af; --gray-800: #1f2937; --gray-900: #111827; --brand-purple: #5555ff; --brand-pink: #ff55dd; /* light-theme vars */ --c-bg: var(--gray-100); --c-bg-secondary: var(--white); --c-text: var(--gray-800); --c-border: var(--gray-300); --c-hl: var(--brand-pink); --c-hl-secondary: var(--brand-purple); --c-text-on-hl: var(--gray-800); --c-text-on-hl-secondary: var(--white); } @media (prefers-color-scheme: dark) { :root { --c-bg: var(--gray-800); --c-bg-secondary: var(--gray-900); --c-text: var(--gray-200); --c-border: var(--gray-400); } } * { color: var(--c-text); box-sizing: border-box; font-family: Ubuntu, sans-serif; letter-spacing: .1ch; } main *, .hero * { line-height: 1.5; } body { background-color: var(--c-bg); min-height: 100vh; display: grid; grid-template-rows: var(--header-height) min-content auto auto min-content; grid-template-columns: 1fr; grid-template-areas: "header" "hero" "main" "aside" "footer"; } a { text-decoration: underline; text-underline-offset: .05rem; } a:hover { text-underline-offset: .25rem; color: var(--c-hl); } h1, h2, h3, h4, h5, h6, p { word-break: break-word; scroll-margin-block-start: 4.5rem; } h1, h2, h3, h4, h5, h6, strong { font-weight: 500; } em { font-style: italic; } h1, h2, h3, h4, h5, h6 { margin-block-end: 0; text-wrap: balance; } h1+*, h2+*, h3+*, h4+*, h5+*, h6+* { margin-block-start: 0; } main h1 { font-size: 2.25rem; } main h2 { font-size: 1.5rem; } main h3 { font-size: 1.25rem; } main :is(h2, h3, h4, h5, h6) a { text-decoration: none; position: relative; } main :is(h2, h3, h4, h5, h6) a:hover::before { content: '#'; position: absolute; left: -1.5ch; bottom: 0; font-weight: normal; font-size: 1rem; } @media screen and (min-width: 800px) { body { grid-template-columns: min-content 8fr; grid-template-rows: 4rem min-content auto min-content; grid-template-areas: "header header" "hero hero" "aside main" "footer footer"; } } .skiplink { z-index: 9999; transform: translateY(calc(-100% - 1rem)); display: block; position: absolute; height: 4rem; padding: var(--content-inline-padding); background-color: var(--c-bg); border-inline-end: 1px solid var(--c-border); border-block-end: 1px solid var(--c-border); } .skiplink:focus { z-index: 9999; transform: translateY(0); } header { grid-area: header; height: var(--header-height); border-block-end: 1px solid var(--c-border); background-color: var(--c-bg-secondary); position: sticky; top: 0; z-index: 1000; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: space-between; } header a { text-decoration: none; } header .logo { display: flex; flex-wrap: nowrap; align-items: center; height: 100%; padding-inline-start: var(--content-inline-padding); } header .logo img { padding-block-end: .3rem; } header .logo h1 { margin: 0; margin-bottom: -.4rem; font-size: 1.7rem; line-height: 1; font-family: Comfortaa, Ubuntu, sans-serif; font-weight: bold; } header .nav-toggle { display: block; border-inline-start: 1px solid var(--c-border); padding: 0 1rem; display: flex; align-items: center; cursor: pointer; } header nav details summary, header nav a { border-block-end: 1px solid var(--c-border); padding: 1rem; display: flex; align-items: center; cursor: pointer; white-space: nowrap; } header nav details summary::before { content: "►"; padding-inline-end: .3rem; } header nav details[open] summary::before { content: "▼"; } header nav .nav-close { display: none; } header nav.show .nav-close { display: flex; } header nav { transform: translateY(calc(-100% - 1rem)); display: flex; flex-direction: column; justify-content: flex-start; position: fixed; right: 0; top: 0; bottom: 0; background-color: var(--c-bg-secondary); min-width: 20rem; max-width: 30rem; border-inline-start: 1px solid var(--c-border); z-index: 10000; } header nav.show, header nav:focus-within { transform: translateY(0); } header nav details summary.highlight, header nav a.highlight { background-color: var(--c-hl); color: var(--c-text-on-hl); font-weight: 500; } header nav details summary:hover, header nav a:hover { background-color: var(--c-bg); } header nav details summary.highlight:hover, header nav a.highlight:hover { background-color: var(--c-hl-secondary); color: var(--c-text-on-hl-secondary); } header nav details { display: flex; flex-direction: column; position: relative; } header nav details a { padding-inline-start: 2.5rem; } @media screen and (min-width: 950px) { header .nav-toggle, header .nav-close, header nav.show .nav-close { display: none; } header nav { transform: initial; display: flex; flex-direction: row; justify-content: flex-end; position: initial; background-color: initial; min-width: unset; max-width: unset; border-inline-start: none; } header nav.show, header nav:focus-within { transform: initial; } header nav details summary, header nav a { border-block-end: none; border-inline-start: 1px solid var(--c-border); border-inline-end: 1px solid var(--c-border); padding: 0 1rem; display: flex; margin-inline-start: -1px; align-items: center; height: 100%; } header nav details:last-of-type summary { border-inline-end: none; } header nav details[open] summary { border-block-end: 1px solid var(--c-border); height: calc(100% + 1px); } header nav details div { position: absolute; right: 0; } header nav details div a { background-color: var(--c-bg-secondary); border-block-end: 1px solid var(--c-border); padding: 1rem; } } main { grid-area: main; padding: 0 var(--content-inline-padding); max-width: var(--content-max-width); min-width: 0; width: 100%; margin: 2rem auto; } nav.article-nav { display: flex; flex-direction: row; justify-content: center; } nav.article-nav div { width: 33%; text-align: center; } footer { grid-area: footer; align-self: end; background-color: var(--c-bg-secondary); border-block-start: 1px solid var(--c-border); padding: .5rem var(--content-inline-padding); display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; } footer div { line-height: 2; } footer div .mobile-hide { display: none; } footer div a { white-space: nowrap; } footer div a:not([rel*=license]), footer div .copyright { display: block; } @media screen and (min-width: 800px) { footer div { line-height: 1.5; } footer div:last-of-type { padding-inline-start: 1rem; } footer div .mobile-hide { display: inline; } footer div a:not([rel*=license]), footer div .copyright { display: initial; } } </style> <style>aside { grid-area: aside; background-color: var(--c-bg-secondary); /* padding: var(--content-inline-padding); */ border-block-start: 1px solid var(--c-border); width: 100%; height: min-content; align-self: end; display: flex; flex-direction: column; justify-content: flex-start; min-width: 30ch; overflow-y: auto; } aside .title { margin-block-end: 0; margin-inline: var(--content-inline-padding); margin-block-start: 1rem; margin-block-end: .5rem; font-size: 2rem; font-weight: 500; } aside details:not(:last-child) { border-block-end: 1px solid var(--c-border); } aside details summary, aside a { padding: 1rem; display: flex; align-items: center; cursor: pointer; white-space: nowrap; } aside a { text-decoration: none; } aside details summary::before { content: "►"; padding-inline-end: .3rem; } aside details[open] summary::before { content: "▼"; } aside details summary:hover, aside a:hover, aside a.active { background-color: var(--c-bg); } aside details { display: flex; flex-direction: column; position: relative; } aside details a { padding-inline-start: 2.5rem; } @media screen and (min-width: 800px) { aside { border-block-start: none; border-inline-end: 1px solid var(--c-border); width: max-content; height: 100%; } } </style> <link rel="stylesheet" href="/static/css/additional-styles.css"> <script src="/static/js/header-links.js" defer></script> </head> <body><a class="skiplink" href="#main">Skip to content</a> <header> <a class="logo" href="https://libera.chat" aria-label="Libera Chat, back to start page"> <img alt="" src="/static/img/libera-color.svg" height="48px" data-proofer-ignore> <h1>Libera.​Chat</h1> </a> <a id="nav-toggle" class="nav-toggle hidden" aria-controls="main-nav"><span>Navigation</span></a> <nav class="" id="main-nav" aria-labelledby="nav-toggle" role="menubar"> <a id="nav-close" class="nav-close hidden" aria-controls="main-nav"><span>Close</span></a> <details name="main-navigation"> <summary >About</summary> <div> <a role="menuitem" href="/policies" ><span>Network Policies</span></a> <a role="menuitem" href="/guidelines" ><span>Channel Guidelines</span></a> <a role="menuitem" href="/news" ><span>Blog & News</span></a> <a role="menuitem" href="/about" ><span>About Libera Chat</span></a> <a role="menuitem" href="/bylaws" ><span>Bylaws</span></a> <a role="menuitem" href="/minutes" ><span>Meeting Minutes</span></a> <a role="menuitem" href="/annual-reports" ><span>Annual Reports</span></a> <a role="menuitem" href="/sponsors" ><span>Sponsors</span></a> </div> </details> <details name="main-navigation"> <summary >Contribute</summary> <div> <a role="menuitem" href="/contributing/donate" ><span>Donate</span></a> <a role="menuitem" href="/contributing/merch" ><span>Buy merch</span></a> <a role="menuitem" href="/contributing/sponsor" ><span>Sponsor Us</span></a> <a role="menuitem" href="/contributing/development" ><span>Development</span></a> </div> </details> <a role="menuitem" href="/chanreg"><span>Channel Namespaces</span></a> <a role="menuitem" href="/guides"><span>Guides</span></a> <a role="menuitem" href="/guides/faq"><span>FAQ</span></a> <details name="main-navigation"> <summary class="highlight" >Connect</summary> <div> <a role="menuitem" href="https://web.libera.chat" rel="noopener noreferrer" ><span>Webchat</span></a> <a role="menuitem" href="ircs://irc.libera.chat:6697" ><span>irc.libera.chat:6697 (TLS)</span></a> <a role="menuitem" href="/guides/connect" ><span>How to Connect</span></a> </div> </details> </nav> </header> <script async> const navToggle = document.querySelector('#nav-toggle') const navClose = document.querySelector('#nav-close') const mainNav = document.querySelector('#main-nav') // progressive enhancement! navToggle.classList.remove('hidden') navClose.classList.remove('hidden') navToggle.addEventListener('click', event => { event.preventDefault() mainNav.classList.toggle('show') }) navClose.addEventListener('click', event => { event.preventDefault() mainNav.classList.remove('show') }) </script> <aside role="menu"> <span class="title">Guides</span> <details open> <summary>About IRC</summary> <div> <a role="menuitem" href="/guides/basics" ><span>Basics of IRC</span></a> <a role="menuitem" href="/guides/faq" ><span>Frequently Asked Questions</span></a> <a role="menuitem" href="/guides/clients" ><span>Choosing an IRC client</span></a> </div> </details> <details open> <summary>Helping you connect</summary> <div> <a role="menuitem" href="/guides/connect" ><span>Connecting to Libera.Chat</span></a> <a role="menuitem" href="/guides/webchat" ><span>Using Our Webchat</span></a> <a role="menuitem" class="active" href="/guides/sasl" ><span>Using SASL</span></a> <a role="menuitem" href="/guides/certfp" ><span>Using CertFP</span></a> </div> </details> <details open> <summary>Using the network</summary> <div> <a role="menuitem" href="/guides/registration" ><span>Nickname Registration</span></a> <a role="menuitem" href="/guides/sendpass" ><span>Resetting your Password</span></a> <a role="menuitem" href="/guides/account" ><span>Manage Your Account</span></a> <a role="menuitem" href="/guides/cloaks" ><span>Cloaks</span></a> <a role="menuitem" href="/guides/findingchannels" ><span>Finding Channels</span></a> <a role="menuitem" href="/guides/channels" ><span>Using Channels</span></a> <a role="menuitem" href="/guides/usermodes" ><span>User Modes</span></a> </div> </details> <details open> <summary>Running a channel</summary> <div> <a role="menuitem" href="/guides/creatingchannels" ><span>Creating Channels</span></a> <a role="menuitem" href="/guides/channelmodes" ><span>Channel Modes</span></a> <a role="menuitem" href="/guides/quickops" ><span>Quick Ops Guide</span></a> <a role="menuitem" href="/guides/bots" ><span>Network bots</span></a> <a role="menuitem" href="/guides/catalyst" ><span>Catalysing and De-escalation</span></a> <a role="menuitem" href="/guides/helpers" ><span>Advice for Helpers</span></a> </div> </details> </aside> <main id="main"> <h1>Using SASL</h1> <p>SASL is a way for your IRC client to automatically login to an existing <a href="/guides/registration">Libera.Chat account</a>. Libera.Chat sometimes requires SASL authentication; if you were disconnected with a message saying you need SASL, skip to the section on <a href="#sasl-access-only-ip-ranges">connecting from a SASL-only address</a>.</p> <p>SASL is <strong>not</strong> the same thing as SSL or TLS. We strongly recommend <a href="/guides/connect#accessing-liberachat-via-tls">using TLS</a> to connect.</p> <h2 id="sasl-client-configuration">SASL Client Configuration</h2> <p>We have instructions on how to configure SASL for some clients below. These instructions are for <code class="language-plaintext highlighter-rouge">PLAIN</code> (username+password) authentication.</p> <ul> <li><a href="https://dev.adiirc.com/projects/adiirc/wiki/SASL">AdiIRC</a></li> <li><a href="https://web.archive.org/web/20210319221818/http://wiki.androirc.com/nickserv_sasl">AndroIRC</a></li> <li><a href="/guides/catgirl">catgirl</a></li> <li><a href="/guides/chatzilla">Chatzilla</a></li> <li><a href="https://elpa.gnu.org/packages/doc/erc.html#SASL">Emacs ERC</a></li> <li><a href="/guides/epic5">EPIC5</a></li> <li><a href="https://github.com/glguy/irc-core/wiki/Automatically-authenticating-to-NickServ">glirc</a></li> <li><a href="https://codeberg.org/emersion/goguma/src/branch/master/doc/connect.md">Goguma</a></li> <li><a href="/guides/hexchat">HexChat</a></li> <li><a href="https://wiki.icechat.net/index.php/New_Server#IRCv3_tab">IceChat</a></li> <li><a href="/guides/irssi">irssi</a></li> <li><a href="http://userbase.kde.org/Konversation/Configuring_SASL_authentication">Konversation</a></li> <li><a href="/guides/kvirc">KVIrc</a></li> <li><a href="/guides/limechat">LimeChat</a></li> <li><a href="/guides/mirc">mIRC</a></li> <li><a href="/guides/pidgin">Pidgin</a></li> <li><a href="/guides/quassel">Quassel</a></li> <li><a href="/guides/revolution">Revolution</a></li> <li><a href="/guides/textual">Textual</a></li> <li><a href="/guides/weechat">WeeChat</a></li> <li><a href="https://wiki.znc.in/Sasl#Example">ZNC</a></li> <li><a href="/guides/irccloud">IRCCloud</a></li> </ul> <p>If you know of any additions or corrections to the lists above, or would like to contribute a script or (better) documentation, contact us on IRC.</p> <p>Documentation on how to create certificates and add their fingerprints to NickServ for <code class="language-plaintext highlighter-rouge">EXTERNAL</code> authentication can be found in <a href="/guides/certfp">the article on NickServ and certificates</a>.</p> <p>Libera.Chat also supports <code class="language-plaintext highlighter-rouge">ECDSA-NIST256P-CHALLENGE</code>. For information on how to provide NickServ with your public key, see <code class="language-plaintext highlighter-rouge">/msg NickServ help set pubkey</code>.</p> <h2 id="sasl-access-only-ip-ranges">SASL access only IP ranges</h2> <p>Some IP address ranges are configured to require SASL authentication to an <strong>existing NickServ account with a verified email address</strong>. If you <strong>do not</strong> already have an account with Libera.Chat services, you will need to connect from an IP address that isn’t restricted to <a href="/guides/registration">create and verify an account</a>.</p> <p>If you are using a VPN or other anonymisation service, consider temporarily disabling it, connecting to Libera.Chat, and only re-enabling it after you have created and verified the account.</p> <p>If your home internet provider is restricted, consider using public access wifi hotspots such as those provided by most libraries and many school or work campuses. If you are concerned about access point privacy, you can <a href="/guides/sendpass">change your password</a> once you are on a network you trust.</p> <p>Connecting bots which lack SASL support from SASL-only ranges can be achieved if you connect the bot via a bouncer that does support SASL authentication. <a href="https://wiki.znc.in/ZNC">ZNC</a> is a popular bouncer that supports SASL.</p> <p>Remember to check your email and verify the address on your account before you try to connect from the IP that is restricted. Once you <strong>do</strong> have an account, there are <a href="#sasl-client-configuration">instructions on configuring your client above</a>.</p> <p>SASL-only restrictions are typically applied to address ranges that are the source of frequent policy violations due to providing easy access to dynamic addresses to a wide range of users. These ranges are typically used by VPN, cloud-computing, and mobile network providers. <em>These restrictions are not targeted at individual users.</em></p> <hr> <p>Based on content © 2016-2021 <a href="https://github.com/freenode/web-7.0/graphs/contributors">freenode/web7.0’s contributors</a> under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons BY-NC-SA</a></p> </main><footer> <div> <span class="copyright">© Libera Chat's contributors 2021</span> (<a rel="license noopener noreferrer" href="/LICENSE-content.txt">Content CC BY-NC-SA</a>, <a rel="license noopener noreferrer" href="/LICENSE-code.txt">Code MIT</a>) <span class="mobile-hide">/</span> <a href="/atom.xml">Feed (atom)</a> <span class="mobile-hide">/</span> <a href="/privacy">Privacy</a> </div> <div> <a rel="me noopener noreferrer" href="https://fosstodon.org/@liberachat">Mastodon</a> <span class="mobile-hide">/</span> <a href="https://github.com/Libera-Chat/libera-chat.github.io" rel="noopener noreferrer">GitHub</a> <span class="mobile-hide">/</span> <a href="https://bsky.app/profile/libera.chat" rel="noopener noreferrer">Bluesky</a> <span class="mobile-hide">/</span> <a href="https://facebook.com/liberachat" rel="noopener noreferrer">Facebook</a> </div> </footer>