CINXE.COM
Enable HTTPS on your servers | Articles | web.dev
<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="157101835696-ooapojlodmuabs2do2vuhhnf90bccmoi.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="web.dev"> <meta property="og:type" content="website"><meta name="theme-color" content="#3740ff"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/web/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/css/app.css"> <link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/css/dark-theme.css" disabled> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/images/favicon.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/images/touchicon-180.png"><link rel="canonical" href="https://web.dev/articles/enable-https"><link rel="search" type="application/opensearchdescription+xml" title="web.dev" href="https://web.dev/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://web.dev/articles/enable-https" /><link rel="alternate" hreflang="x-default" href="https://web.dev/articles/enable-https" /><link rel="alternate" hreflang="ar" href="https://web.dev/articles/enable-https?hl=ar" /><link rel="alternate" hreflang="bn" href="https://web.dev/articles/enable-https?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://web.dev/articles/enable-https?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://web.dev/articles/enable-https?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://web.dev/articles/enable-https?hl=fa" /><link rel="alternate" hreflang="fr" href="https://web.dev/articles/enable-https?hl=fr" /><link rel="alternate" hreflang="de" href="https://web.dev/articles/enable-https?hl=de" /><link rel="alternate" hreflang="he" href="https://web.dev/articles/enable-https?hl=he" /><link rel="alternate" hreflang="hi" href="https://web.dev/articles/enable-https?hl=hi" /><link rel="alternate" hreflang="id" href="https://web.dev/articles/enable-https?hl=id" /><link rel="alternate" hreflang="it" href="https://web.dev/articles/enable-https?hl=it" /><link rel="alternate" hreflang="ja" href="https://web.dev/articles/enable-https?hl=ja" /><link rel="alternate" hreflang="ko" href="https://web.dev/articles/enable-https?hl=ko" /><link rel="alternate" hreflang="pl" href="https://web.dev/articles/enable-https?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://web.dev/articles/enable-https?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://web.dev/articles/enable-https?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://web.dev/articles/enable-https?hl=es-419" /><link rel="alternate" hreflang="th" href="https://web.dev/articles/enable-https?hl=th" /><link rel="alternate" hreflang="tr" href="https://web.dev/articles/enable-https?hl=tr" /><link rel="alternate" hreflang="vi" href="https://web.dev/articles/enable-https?hl=vi" /><link rel="alternate" hreflang="en-cn" href="https://web.developers.google.cn/articles/enable-https" /><link rel="alternate" hreflang="x-default" href="https://web.developers.google.cn/articles/enable-https" /><link rel="alternate" hreflang="ar-cn" href="https://web.developers.google.cn/articles/enable-https?hl=ar" /><link rel="alternate" hreflang="bn-cn" href="https://web.developers.google.cn/articles/enable-https?hl=bn" /><link rel="alternate" hreflang="zh-Hans-cn" href="https://web.developers.google.cn/articles/enable-https?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant-cn" href="https://web.developers.google.cn/articles/enable-https?hl=zh-tw" /><link rel="alternate" hreflang="fa-cn" href="https://web.developers.google.cn/articles/enable-https?hl=fa" /><link rel="alternate" hreflang="fr-cn" href="https://web.developers.google.cn/articles/enable-https?hl=fr" /><link rel="alternate" hreflang="de-cn" href="https://web.developers.google.cn/articles/enable-https?hl=de" /><link rel="alternate" hreflang="he-cn" href="https://web.developers.google.cn/articles/enable-https?hl=he" /><link rel="alternate" hreflang="hi-cn" href="https://web.developers.google.cn/articles/enable-https?hl=hi" /><link rel="alternate" hreflang="id-cn" href="https://web.developers.google.cn/articles/enable-https?hl=id" /><link rel="alternate" hreflang="it-cn" href="https://web.developers.google.cn/articles/enable-https?hl=it" /><link rel="alternate" hreflang="ja-cn" href="https://web.developers.google.cn/articles/enable-https?hl=ja" /><link rel="alternate" hreflang="ko-cn" href="https://web.developers.google.cn/articles/enable-https?hl=ko" /><link rel="alternate" hreflang="pl-cn" href="https://web.developers.google.cn/articles/enable-https?hl=pl" /><link rel="alternate" hreflang="pt-BR-cn" href="https://web.developers.google.cn/articles/enable-https?hl=pt-br" /><link rel="alternate" hreflang="ru-cn" href="https://web.developers.google.cn/articles/enable-https?hl=ru" /><link rel="alternate" hreflang="es-419-cn" href="https://web.developers.google.cn/articles/enable-https?hl=es-419" /><link rel="alternate" hreflang="th-cn" href="https://web.developers.google.cn/articles/enable-https?hl=th" /><link rel="alternate" hreflang="tr-cn" href="https://web.developers.google.cn/articles/enable-https?hl=tr" /><link rel="alternate" hreflang="vi-cn" href="https://web.developers.google.cn/articles/enable-https?hl=vi" /><title>Enable HTTPS on your servers | Articles | web.dev</title> <meta property="og:title" content="Enable HTTPS on your servers | Articles | web.dev"><meta name="description" content="Enabling HTTPS on your servers is critical to securing your webpages."> <meta property="og:description" content="Enabling HTTPS on your servers is critical to securing your webpages."><meta property="og:url" content="https://web.dev/articles/enable-https"><meta property="og:locale" content="en"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "dateModified": "2015-03-27", "headline": "Enable HTTPS on your servers" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Articles", "item": "https://web.dev/articles" },{ "@type": "ListItem", "position": 2, "name": "Enable HTTPS on your servers", "item": "https://web.dev/articles/enable-https" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="web-theme" type="article" appearance layout="docs" display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="webDev" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/images/lockup-dark-theme.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="web.dev"> <img src="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/images/lockup.svg" class="devsite-site-logo" alt="web.dev"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> <devsite-tabs class="upper-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Upper tabs"> <tab class="devsite-dropdown devsite-dropdown-full "> <button class="devsite-tabs-content devsite-tabs-dropdown-only gc-analytics-event devsite-icon devsite-icon-arrow-drop-down" track-type="nav" track-metadata-position="nav - resources" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" > Resources </button> <div class="devsite-tabs-dropdown" role="menu" aria-label="submenu" hidden> <div class="devsite-tabs-dropdown-content"> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section build-icon web-dev-subnav"> <li class="devsite-nav-title" role="heading" tooltip>Web Platform</li> <li class="devsite-nav-description">Dive into the web platform, at your pace. </li> <li class="devsite-nav-item"> <a href="https://web.dev/html" track-type="nav" track-metadata-eventdetail="https://web.dev/html" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="web platform" tooltip > <div class="devsite-nav-item-title"> HTML </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/css" track-type="nav" track-metadata-eventdetail="https://web.dev/css" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="web platform" tooltip > <div class="devsite-nav-item-title"> CSS </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/javascript" track-type="nav" track-metadata-eventdetail="https://web.dev/javascript" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="web platform" tooltip > <div class="devsite-nav-item-title"> JavaScript </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section build-icon web-dev-subnav"> <li class="devsite-nav-title" role="heading" tooltip>User experience</li> <li class="devsite-nav-description">Learn how to build better user experiences. </li> <li class="devsite-nav-item"> <a href="https://web.dev/performance" track-type="nav" track-metadata-eventdetail="https://web.dev/performance" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="user experience" tooltip > <div class="devsite-nav-item-title"> Performance </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/accessibility" track-type="nav" track-metadata-eventdetail="https://web.dev/accessibility" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="user experience" tooltip > <div class="devsite-nav-item-title"> Accessibility </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/identity" track-type="nav" track-metadata-eventdetail="https://web.dev/identity" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="user experience" tooltip > <div class="devsite-nav-item-title"> Identity </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section productivity-icon web-dev-subnav"> <li class="devsite-nav-title" role="heading" tooltip>Learn</li> <li class="devsite-nav-description">Get up to speed on web development.</li> <li class="devsite-nav-item"> <a href="https://web.dev/learn/html" track-type="nav" track-metadata-eventdetail="https://web.dev/learn/html" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="learn" tooltip > <div class="devsite-nav-item-title"> Learn HTML </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/learn/css" track-type="nav" track-metadata-eventdetail="https://web.dev/learn/css" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="learn" tooltip > <div class="devsite-nav-item-title"> Learn CSS </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/learn/javascript" track-type="nav" track-metadata-eventdetail="https://web.dev/learn/javascript" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="learn" tooltip > <div class="devsite-nav-item-title"> Learn JavaScript </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/learn/performance" track-type="nav" track-metadata-eventdetail="https://web.dev/learn/performance" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="learn" tooltip > <div class="devsite-nav-item-title"> Learn Performance </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/learn/accessibility" track-type="nav" track-metadata-eventdetail="https://web.dev/learn/accessibility" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="learn" tooltip > <div class="devsite-nav-item-title"> Learn Accessibility </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/learn" track-type="nav" track-metadata-eventdetail="https://web.dev/learn" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="learn" tooltip > <div class="devsite-nav-item-title"> More courses </div> </a> </li> </ul> </div> <div class="devsite-tabs-dropdown-column "> <ul class="devsite-tabs-dropdown-section experience-icon web-dev-subnav"> <li class="devsite-nav-title" role="heading" tooltip>Additional resources</li> <li class="devsite-nav-description">Explore content collections, patterns, and more.</li> <li class="devsite-nav-item"> <a href="https://web.dev/explore/ai" track-type="nav" track-metadata-eventdetail="https://web.dev/explore/ai" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="additional resources" tooltip > <div class="devsite-nav-item-title"> AI and the web </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/explore" track-type="nav" track-metadata-eventdetail="https://web.dev/explore" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="additional resources" tooltip > <div class="devsite-nav-item-title"> Explore </div> </a> </li> <li class="devsite-nav-item"> <a href="https://pagespeed.web.dev/" track-type="nav" track-metadata-eventdetail="https://pagespeed.web.dev/" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="additional resources" tooltip > <div class="devsite-nav-item-title"> PageSpeed Insights </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/patterns" track-type="nav" track-metadata-eventdetail="https://web.dev/patterns" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="additional resources" tooltip > <div class="devsite-nav-item-title"> Patterns </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/shows" track-type="nav" track-metadata-eventdetail="https://web.dev/shows" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="additional resources" tooltip > <div class="devsite-nav-item-title"> Podcasts & shows </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/newsletter" track-type="nav" track-metadata-eventdetail="https://web.dev/newsletter" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="additional resources" tooltip > <div class="devsite-nav-item-title"> Developer Newsletter </div> </a> </li> <li class="devsite-nav-item"> <a href="https://web.dev/about" track-type="nav" track-metadata-eventdetail="https://web.dev/about" track-metadata-position="nav - resources" track-metadata-module="tertiary nav" track-metadata-module_headline="additional resources" tooltip > <div class="devsite-nav-item-title"> About web.dev </div> </a> </li> </ul> </div> </div> </div> </tab> <tab > <a href="https://web.dev/baseline" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://web.dev/baseline" track-type="nav" track-metadata-position="nav - baseline" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Baseline" track-name="baseline" > Baseline </a> </tab> <tab > <a href="https://web.dev/blog" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://web.dev/blog" track-type="nav" track-metadata-position="nav - blog" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Blog" track-name="blog" > Blog </a> </tab> <tab > <a href="https://web.dev/case-studies" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://web.dev/case-studies" track-type="nav" track-metadata-position="nav - case studies" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Case Studies" track-name="case studies" > Case Studies </a> </tab> </nav> </devsite-tabs> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Articles" tenant-name="web.dev" > <form class="devsite-search-form" action="https://web.dev/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-appearance-selector></devsite-appearance-selector> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <devsite-user enable-profiles id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section devsite-header-no-lower-tabs "> <div class="devsite-header-background"> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars hidden> <div class="devsite-book-nav-filter" hidden> <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="webDev" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <source srcset="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/images/lockup-dark-theme.svg" media="(prefers-color-scheme: dark)" class="devsite-dark-theme" alt="web.dev"> <img src="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/images/lockup.svg" class="devsite-site-logo" alt="web.dev"> </picture> </a> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" > <li class="devsite-breadcrumb-item "> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" > <span class="devsite-nav-text" tooltip > Resources </span> </span> <ul class="devsite-nav-responsive-tabs devsite-nav-has-menu "> <li class="devsite-nav-item"> <span class="devsite-nav-title" tooltip data-category="Site-Wide Custom Events" data-label="Tab: Resources" track-name="resources" > <span class="devsite-nav-text" tooltip menu="Resources"> More </span> <span class="devsite-nav-icon material-icons" data-icon="forward" menu="Resources"> </span> </span> </li> </ul> </li> <li class="devsite-nav-item"> <a href="/baseline" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Baseline" track-name="baseline" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Baseline" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Baseline </span> </a> </li> <li class="devsite-nav-item"> <a href="/blog" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Blog" track-name="blog" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Blog" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Blog </span> </a> </li> <li class="devsite-nav-item"> <a href="/case-studies" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Case Studies" track-name="case studies" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Case Studies" track-type="globalNav" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Case Studies </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="Resources" aria-label="Side menu" hidden> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Web Platform </span> </span> </li> <li class="devsite-nav-item"> <a href="/html" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: HTML" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > HTML </span> </a> </li> <li class="devsite-nav-item"> <a href="/css" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: CSS" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > CSS </span> </a> </li> <li class="devsite-nav-item"> <a href="/javascript" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: JavaScript" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > JavaScript </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > User experience </span> </span> </li> <li class="devsite-nav-item"> <a href="/performance" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Performance" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Performance </span> </a> </li> <li class="devsite-nav-item"> <a href="/accessibility" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Accessibility" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Accessibility </span> </a> </li> <li class="devsite-nav-item"> <a href="/identity" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Identity" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Identity </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Learn </span> </span> </li> <li class="devsite-nav-item"> <a href="/learn/html" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn HTML" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn HTML </span> </a> </li> <li class="devsite-nav-item"> <a href="/learn/css" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn CSS" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn CSS </span> </a> </li> <li class="devsite-nav-item"> <a href="/learn/javascript" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn JavaScript" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn JavaScript </span> </a> </li> <li class="devsite-nav-item"> <a href="/learn/performance" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn Performance" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn Performance </span> </a> </li> <li class="devsite-nav-item"> <a href="/learn/accessibility" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Learn Accessibility" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Learn Accessibility </span> </a> </li> <li class="devsite-nav-item"> <a href="/learn" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: More courses" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > More courses </span> </a> </li> <li class="devsite-nav-item devsite-nav-heading"> <span class="devsite-nav-title" tooltip > <span class="devsite-nav-text" tooltip > Additional resources </span> </span> </li> <li class="devsite-nav-item"> <a href="/explore/ai" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: AI and the web" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > AI and the web </span> </a> </li> <li class="devsite-nav-item"> <a href="/explore" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Explore" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Explore </span> </a> </li> <li class="devsite-nav-item"> <a href="https://pagespeed.web.dev/" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: PageSpeed Insights" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > PageSpeed Insights </span> </a> </li> <li class="devsite-nav-item"> <a href="/patterns" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Patterns" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Patterns </span> </a> </li> <li class="devsite-nav-item"> <a href="/shows" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Podcasts &amp; shows" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Podcasts &amp; shows </span> </a> </li> <li class="devsite-nav-item"> <a href="/newsletter" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: Developer Newsletter" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Developer Newsletter </span> </a> </li> <li class="devsite-nav-item"> <a href="/about" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Responsive Tab: About web.dev" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > About web.dev </span> </a> </li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-sidebar > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars ></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://web.dev/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Home </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://web.dev/articles" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Articles" > Articles </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <h1 class="devsite-page-title" tabindex="-1"> Enable HTTPS on your servers </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <p> <div class="wd-authors" translate="no"> <div class="wd-author"> <img class="devsite-landing-row-item-icon" alt="Chris Palmer" src="https://web.dev/images/authors/chrispalmer.jpg" decoding="async" height="64" loading="lazy" width="64"> <div> <span> Chris Palmer </span> <div class="wd-author__links"> </div> </div> </div> <div class="wd-author"> <div> <span> Matt Gaunt </span> <div class="wd-author__links"> <a href="https://twitter.com/gauntface" aria-label="Matt Gaunt on X" rel="me"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 300 271"> <title>X</title> <path fill="currentColor" d="m236 0h46l-101 115 118 156h-92.6l-72.5-94.8-83 94.8h-46l107-123-113-148h94.9l65.5 86.6zm-16.1 244h25.5l-165-218h-27.4z"></path> </svg></a> <a href="https://gauntface.com/blog" aria-label="Matt Gaunt's homepage" rel="me"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 30 30"> <title>Homepage</title> <circle cx="14.5" cy="14.5" r="13.5" stroke-width="2" stroke-miterlimit="10" fill="none" stroke="currentColor" /> <ellipse cx="14.5" cy="14.5" rx="6.1" ry="13.5" stroke-width="2" stroke-miterlimit="10" fill="none" stroke="currentColor" /> <path d="M1.6 9.6h25.8M1.6 19.4h25.8" stroke-width="2" stroke-miterlimit="10" fill="none" stroke="currentColor" /> </svg></a> </div> </div> </div> </div></p> <p>This page provides guidance for setting up HTTPS on your servers, including the following steps:</p> <ul> <li>Creating a 2048-bit RSA public/private key pair.</li> <li>Generating a certificate signing request (CSR) that embeds your public key.</li> <li>Sharing your CSR with your Certificate Authority (CA) to receive a final certificate or a certificate chain.</li> <li>Installing your final certificate in a non-web-accessible place such as <code translate="no" dir="ltr">/etc/ssl</code> (Linux and Unix) or wherever IIS requires it (Windows).</li> </ul> <h2 id="generate-keys-certificates" data-text="Generate keys and certificate signing requests" tabindex="-1">Generate keys and certificate signing requests</h2> <p>This section uses the openssl command-line program, which comes with most Linux, BSD, and Mac OS X systems, to generate private and public keys and a CSR.</p> <h3 id="key-pair" data-text="Generate a public/private key pair" tabindex="-1">Generate a public/private key pair</h3> <p>To start, generate a 2,048-bit RSA key pair. A shorter key can be broken by brute-force guessing attacks, and longer keys use unnecessary resources.</p> <p>Use the following command to generate an RSA key pair:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code translate="no" dir="ltr">openssl<span class="devsite-syntax-w"> </span>genrsa<span class="devsite-syntax-w"> </span>-out<span class="devsite-syntax-w"> </span>www.example.com.key<span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">2048</span> </code></pre></devsite-code> <p>This gives the following output:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code translate="no" dir="ltr">Generating<span class="devsite-syntax-w"> </span>RSA<span class="devsite-syntax-w"> </span>private<span class="devsite-syntax-w"> </span>key,<span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">2048</span><span class="devsite-syntax-w"> </span>bit<span class="devsite-syntax-w"> </span>long<span class="devsite-syntax-w"> </span>modulus .+++ .......................................................................................+++ e<span class="devsite-syntax-w"> </span>is<span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">65537</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span>0x10001<span class="devsite-syntax-o">)</span> </code></pre></devsite-code> <h3 id="certificate-signing-request" data-text="Generate a certificate signing request" tabindex="-1">Generate a certificate signing request</h3> <p>In this step, you embed your public key and information about your organization and your website into a certificate signing request or CSR. The <code translate="no" dir="ltr">openssl</code> command asks you for the required metadata.</p> <p>Running the following command:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code translate="no" dir="ltr">openssl<span class="devsite-syntax-w"> </span>req<span class="devsite-syntax-w"> </span>-new<span class="devsite-syntax-w"> </span>-sha256<span class="devsite-syntax-w"> </span>-key<span class="devsite-syntax-w"> </span>www.example.com.key<span class="devsite-syntax-w"> </span>-out<span class="devsite-syntax-w"> </span>www.example.com.csr </code></pre></devsite-code> <p>Outputs the following:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code translate="no" dir="ltr">You<span class="devsite-syntax-w"> </span>are<span class="devsite-syntax-w"> </span>about<span class="devsite-syntax-w"> </span>to<span class="devsite-syntax-w"> </span>be<span class="devsite-syntax-w"> </span>asked<span class="devsite-syntax-w"> </span>to<span class="devsite-syntax-w"> </span>enter<span class="devsite-syntax-w"> </span>information<span class="devsite-syntax-w"> </span>that<span class="devsite-syntax-w"> </span>will<span class="devsite-syntax-w"> </span>be<span class="devsite-syntax-w"> </span>incorporated into<span class="devsite-syntax-w"> </span>your<span class="devsite-syntax-w"> </span>certificate<span class="devsite-syntax-w"> </span>request What<span class="devsite-syntax-w"> </span>you<span class="devsite-syntax-w"> </span>are<span class="devsite-syntax-w"> </span>about<span class="devsite-syntax-w"> </span>to<span class="devsite-syntax-w"> </span>enter<span class="devsite-syntax-w"> </span>is<span class="devsite-syntax-w"> </span>what<span class="devsite-syntax-w"> </span>is<span class="devsite-syntax-w"> </span>called<span class="devsite-syntax-w"> </span>a<span class="devsite-syntax-w"> </span>Distinguished<span class="devsite-syntax-w"> </span>Name<span class="devsite-syntax-w"> </span>or<span class="devsite-syntax-w"> </span>a<span class="devsite-syntax-w"> </span>DN. There<span class="devsite-syntax-w"> </span>are<span class="devsite-syntax-w"> </span>quite<span class="devsite-syntax-w"> </span>a<span class="devsite-syntax-w"> </span>few<span class="devsite-syntax-w"> </span>fields<span class="devsite-syntax-w"> </span>but<span class="devsite-syntax-w"> </span>you<span class="devsite-syntax-w"> </span>can<span class="devsite-syntax-w"> </span>leave<span class="devsite-syntax-w"> </span>some<span class="devsite-syntax-w"> </span>blank For<span class="devsite-syntax-w"> </span>some<span class="devsite-syntax-w"> </span>fields<span class="devsite-syntax-w"> </span>there<span class="devsite-syntax-w"> </span>will<span class="devsite-syntax-w"> </span>be<span class="devsite-syntax-w"> </span>a<span class="devsite-syntax-w"> </span>default<span class="devsite-syntax-w"> </span>value, If<span class="devsite-syntax-w"> </span>you<span class="devsite-syntax-w"> </span>enter<span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'.'</span>,<span class="devsite-syntax-w"> </span>the<span class="devsite-syntax-w"> </span>field<span class="devsite-syntax-w"> </span>will<span class="devsite-syntax-w"> </span>be<span class="devsite-syntax-w"> </span>left<span class="devsite-syntax-w"> </span>blank. ----- Country<span class="devsite-syntax-w"> </span>Name<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span><span class="devsite-syntax-m">2</span><span class="devsite-syntax-w"> </span>letter<span class="devsite-syntax-w"> </span>code<span class="devsite-syntax-o">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[</span>AU<span class="devsite-syntax-o">]</span>:CA State<span class="devsite-syntax-w"> </span>or<span class="devsite-syntax-w"> </span>Province<span class="devsite-syntax-w"> </span>Name<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span>full<span class="devsite-syntax-w"> </span>name<span class="devsite-syntax-o">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[</span>Some-State<span class="devsite-syntax-o">]</span>:California Locality<span class="devsite-syntax-w"> </span>Name<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span><span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span>example,<span class="devsite-syntax-w"> </span>city<span class="devsite-syntax-o">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[]</span>:Mountain<span class="devsite-syntax-w"> </span>View Organization<span class="devsite-syntax-w"> </span>Name<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span><span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span>example,<span class="devsite-syntax-w"> </span>company<span class="devsite-syntax-o">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[</span>Internet<span class="devsite-syntax-w"> </span>Widgits<span class="devsite-syntax-w"> </span>Pty<span class="devsite-syntax-w"> </span>Ltd<span class="devsite-syntax-o">]</span>:Example,<span class="devsite-syntax-w"> </span>Inc. Organizational<span class="devsite-syntax-w"> </span>Unit<span class="devsite-syntax-w"> </span>Name<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span><span class="devsite-syntax-k">for</span><span class="devsite-syntax-w"> </span>example,<span class="devsite-syntax-w"> </span>section<span class="devsite-syntax-o">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[]</span>:Webmaster<span class="devsite-syntax-w"> </span>Help<span class="devsite-syntax-w"> </span>Center<span class="devsite-syntax-w"> </span>Example Team Common<span class="devsite-syntax-w"> </span>Name<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span>e.g.<span class="devsite-syntax-w"> </span>server<span class="devsite-syntax-w"> </span>FQDN<span class="devsite-syntax-w"> </span>or<span class="devsite-syntax-w"> </span>YOUR<span class="devsite-syntax-w"> </span>name<span class="devsite-syntax-o">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[]</span>:www.example.com Email<span class="devsite-syntax-w"> </span>Address<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[]</span>:webmaster@example.com Please<span class="devsite-syntax-w"> </span>enter<span class="devsite-syntax-w"> </span>the<span class="devsite-syntax-w"> </span>following<span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'extra'</span><span class="devsite-syntax-w"> </span>attributes to<span class="devsite-syntax-w"> </span>be<span class="devsite-syntax-w"> </span>sent<span class="devsite-syntax-w"> </span>with<span class="devsite-syntax-w"> </span>your<span class="devsite-syntax-w"> </span>certificate<span class="devsite-syntax-w"> </span>request A<span class="devsite-syntax-w"> </span>challenge<span class="devsite-syntax-w"> </span>password<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[]</span>: An<span class="devsite-syntax-w"> </span>optional<span class="devsite-syntax-w"> </span>company<span class="devsite-syntax-w"> </span>name<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[]</span>: </code></pre></devsite-code> <p>To ensure the validity of the CSR, run this command:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code translate="no" dir="ltr">openssl<span class="devsite-syntax-w"> </span>req<span class="devsite-syntax-w"> </span>-text<span class="devsite-syntax-w"> </span>-in<span class="devsite-syntax-w"> </span>www.example.com.csr<span class="devsite-syntax-w"> </span>-noout </code></pre></devsite-code> <p>The response should look like this:</p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Bash"><code translate="no" dir="ltr">Certificate<span class="devsite-syntax-w"> </span>Request: <span class="devsite-syntax-w"> </span>Data: <span class="devsite-syntax-w"> </span>Version:<span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">0</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span>0x0<span class="devsite-syntax-o">)</span> <span class="devsite-syntax-w"> </span>Subject:<span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">C</span><span class="devsite-syntax-o">=</span>CA,<span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">ST</span><span class="devsite-syntax-o">=</span>California,<span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">L</span><span class="devsite-syntax-o">=</span>Mountain<span class="devsite-syntax-w"> </span>View,<span class="devsite-syntax-w"> </span><span class="devsite-syntax-nv">O</span><span class="devsite-syntax-o">=</span>Google,<span class="devsite-syntax-w"> </span>Inc., <span class="devsite-syntax-nv">OU</span><span class="devsite-syntax-o">=</span>Webmaster<span class="devsite-syntax-w"> </span>Help<span class="devsite-syntax-w"> </span>Center<span class="devsite-syntax-w"> </span>Example<span class="devsite-syntax-w"> </span>Team, <span class="devsite-syntax-nv">CN</span><span class="devsite-syntax-o">=</span>www.example.com/emailAddress<span class="devsite-syntax-o">=</span>webmaster@example.com <span class="devsite-syntax-w"> </span>Subject<span class="devsite-syntax-w"> </span>Public<span class="devsite-syntax-w"> </span>Key<span class="devsite-syntax-w"> </span>Info: <span class="devsite-syntax-w"> </span>Public<span class="devsite-syntax-w"> </span>Key<span class="devsite-syntax-w"> </span>Algorithm:<span class="devsite-syntax-w"> </span>rsaEncryption <span class="devsite-syntax-w"> </span>Public-Key:<span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span><span class="devsite-syntax-m">2048</span><span class="devsite-syntax-w"> </span>bit<span class="devsite-syntax-o">)</span> <span class="devsite-syntax-w"> </span>Modulus: <span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">00</span>:ad:fc:58:e0:da:f2:0b:73:51:93:29:a5:d3:9e: <span class="devsite-syntax-w"> </span>f8:f1:14:13:64:cc:e0:bc:be:26:5d:04:e1:58:dc: <span class="devsite-syntax-w"> </span>... <span class="devsite-syntax-w"> </span>Exponent:<span class="devsite-syntax-w"> </span><span class="devsite-syntax-m">65537</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">(</span>0x10001<span class="devsite-syntax-o">)</span> <span class="devsite-syntax-w"> </span>Attributes: <span class="devsite-syntax-w"> </span>a0:00 <span class="devsite-syntax-w"> </span>Signature<span class="devsite-syntax-w"> </span>Algorithm:<span class="devsite-syntax-w"> </span>sha256WithRSAEncryption <span class="devsite-syntax-w"> </span>5f:05:f3:71:d5:f7:b7:b6:dc:17:cc:88:03:b8:87:29:f6:87: <span class="devsite-syntax-w"> </span>2f:7f:00:49:08:0a:20:41:0b:70:03:04:7d:94:af:69:3d:f4: <span class="devsite-syntax-w"> </span>... </code></pre></devsite-code> <h3 id="submit-csr" data-text="Submit your CSR to a certificate authority" tabindex="-1">Submit your CSR to a certificate authority</h3> <p>Different certificate authorities (CAs) require you to submit your CSRs to them in different ways. These can include using a form on their website or sending the CSR by email. Some CAs, or their resellers, might even automate some or all of the process, including, in some cases, key pair and CSR generation.</p> <p>Send the CSR to your CA and follow their instructions to receive your final certificate or certificate chain.</p> <p>Different CAs charge different amounts of money for the service of vouching for your public key.</p> <p>There are also options for mapping your key to more than one DNS name, including several distinct names (e.g. all of example.com, www.example.com, example.net, and www.example.net) or "wildcard" names such as <code translate="no" dir="ltr">*.example.com</code>.</p> <aside class="note"><strong>Note:</strong><span> In wildcard certificates, the wildcard applies to only one DNS label. A certificate good for <code translate="no" dir="ltr">*.example.com</code> works for <code translate="no" dir="ltr">foo.example.com</code> and <code translate="no" dir="ltr">bar.example.com</code>, but not for <code translate="no" dir="ltr">foo.bar.example.com</code>.</span></aside> <p>Copy the certificates to all your front-end servers in a non-web-accessible place such as <code translate="no" dir="ltr">/etc/ssl</code> (Linux and Unix) or wherever IIS (Windows) requires them.</p> <h2 id="https" data-text="Enable HTTPS on your servers" tabindex="-1">Enable HTTPS on your servers</h2> <p>Enabling HTTPS on your servers is a critical step in providing security for your web pages.</p> <ul> <li>Use Mozilla's Server Configuration tool to set up your server for HTTPS support.</li> <li>Regularly test your site with the Qualys' SSL Server Test and ensure you get at least an A or A+.</li> </ul> <p>At this point, you must make a crucial operations decision. Choose one of the following:</p> <ul> <li>Dedicate a distinct IP address to each hostname your web server serves content from.</li> <li>Use name-based virtual hosting.</li> </ul> <p>If you've been using distinct IP addresses for each hostname, you can support both HTTP and HTTPS for all clients. However, most site operators use name-based virtual hosting to conserve IP addresses and because it's more convenient in general.</p> <p></p> <p>If you don't already have HTTPS service available on your servers, enable it now (without redirecting HTTP to HTTPS. See <a href="#redirect-to-https">Redirect HTTP to HTTPS</a> for more information). Configure your web server to use the certificates you bought and installed. You might find <a href="https://mozilla.github.io/server-side-tls/ssl-config-generator/">Mozilla's configuration generator</a> useful.</p> <p>If you have many hostnames or subdomains, they each need to use the right certificate.</p> <aside class="warning"><strong>Warning:</strong><span> If you've already completed these steps, but are using HTTPS only to redirect clients back to HTTP, stop doing that now. See the next section to make sure HTTPS and HTTP work smoothly.</span></aside><aside class="note"><strong>Note:</strong><span> Ultimately you should redirect HTTP requests to HTTPS and use HTTP Strict Transport Security (HSTS). However, that needs to happen later in the migration process. For more information, see <a href="#redirect-to-https">Redirect HTTP To HTTPS</a> and <a href="#hsts">Turn On Strict Transport Security And Secure Cookies</a>.</span></aside> <p>Now, and regularly throughout your site's lifetime, check your HTTPS configuration with <a href="https://www.ssllabs.com/ssltest/">Qualys' SSL Server Test</a>. Your site should score an A or A+. Treat anything that causes a lower grade as a bug, and stay diligent, because new attacks against algorithms and protocols are always being developed.</p> <h2 id="relative-urls" data-text="Make intrasite URLs relative" tabindex="-1">Make intrasite URLs relative</h2> <p>Now that you're serving your site on both HTTP and HTTPS, things need to work as smoothly as possible regardless of protocol. An important factor is using relative URLs for intrasite links.</p> <p>Make sure intrasite URLs and external URLs don't depend on a specific protocol. Use relative paths or leave out the protocol as in <code translate="no" dir="ltr">//example.com/something.js</code>.</p> <p>Serving a page that contains HTTP resources using HTTPS <a href="/articles/what-is-mixed-content">can cause issues</a>. When a browser encounters an otherwise secure page using insecure resources, it warns users that the page isn't completely secure, and some browsers refuse to load or execute the HTTP resources, which breaks the page. However, you can safely include HTTPS resources in an HTTP page. For more guidance on fixing these issues, see <a href="/articles/fixing-mixed-content">Fixing Mixed Content</a>.</p> <p>Following HTTP-based links to other pages on your site can also downgrade the user experience from HTTPS to HTTP. To fix this, make your intrasite URLs as relative as possible, by making them either protocol-relative (lacking a protocol, starting with <code translate="no" dir="ltr">//example.com</code>) or host-relative (starting with just the path, like <code translate="no" dir="ltr">/jquery.js</code>).</p> <div class="wd-compare"> <div class="compare-better">Do</div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="HTML"><h1>Welcome To Example.com</h1> <script src="/jquery.js"></script> <link rel="stylesheet" href="/assets/style.css"/> <img src="/images/logo.png"/>; <p>A <a href="/2014/12/24">new post on cats!</a></p></pre></devsite-code> <span class="wd-caption"> Use relative intrasite URLs. </span> </div> <div class="wd-compare"> <div class="compare-better">Do</div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="HTML"><h1>Welcome To Example.com</h1> <script src="//example.com/jquery.js"></script> <link rel="stylesheet" href="//assets.example.com/style.css"/> <img src="//img.example.com/logo.png"/>; <p>A <a href="//example.com/2014/12/24/">new post on cats!</a></p></pre></devsite-code> <span class="wd-caption"> Or, use protocol-relative intrasite URLs. </span> </div> <div class="wd-compare"> <div class="compare-better">Do</div> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="HTML"><h1>Welcome To Example.com</h1> <script src="/jquery.js"></script> <link rel="stylesheet" href="/assets/style.css"/> <img src="/images/logo.png"/>; <p>A <a href="/2014/12/24">new post on cats!</a></p> <p>Check out this <a href="https://foo.com/"><b>other cool site.</b></a></p></pre></devsite-code> <span class="wd-caption"> Use HTTPS URLs for links to other sites where possible. </span> </div> <p>Update your links with a script, not by hand, to avoid making mistakes. If your site's content is in a database, test your script on a development copy of the database. If your site's content consists of only simple files, test your script on a development copy of the files. Push the changes to production only after the changes pass QA, as normal. You can use <a href="https://github.com/bramus/mixed-content-scan">Bram van Damme's script</a> or something similar to detect mixed content in your site.</p> <p>When linking to other sites (as opposed to including resources from them), don't change the protocol. You don't have control over how those sites operate.</p> <p>To make migration smoother for large sites, we recommend protocol-relative URLs. If you aren't sure whether you can fully deploy HTTPS yet, forcing your site to use HTTPS for all subresources can backfire. There is likely to be a period of time in which HTTPS is new and weird for you, and the HTTP site must still work as well as ever. Over time, you'll complete the migration and lock in HTTPS (see the next two sections).</p> <p>If your site depends on scripts, images, or other resources served from a third party, such as a CDN or jquery.com, you have two options:</p> <ul> <li>Use protocol-relative URLs for these resources. If the third party doesn't serve HTTPS, ask them to. Most already do, including jquery.com.</li> <li>Serve the resources from a server that you control, which offers both HTTP and HTTPS. This is often a good idea anyway, because then you have better control over your site's appearance, performance, and security, and don't have to trust a third party to keep your site secure.</li> </ul> <aside class="caution"><strong>Caution:</strong><span> You'll also need to change intrasite URLs in your stylesheets, JavaScript, redirect rules, <code translate="no" dir="ltr"><link></code> tags, and CSP declarations, not just in your HTML pages.</span></aside> <h2 id="redirect-to-https" data-text="Redirect HTTP to HTTPS" tabindex="-1">Redirect HTTP to HTTPS</h2> <p>To tell search engines to use HTTPS to access your site, put a <a href="https://support.google.com/webmasters/answer/139066">canonical link</a> at the head of each page using <code translate="no" dir="ltr"><link rel="canonical" href="https://…"/></code> tags.</p> <h2 id="hsts" data-text="Turn on Strict Transport Security and secure cookies" tabindex="-1">Turn on Strict Transport Security and secure cookies</h2> <p>At this point, you're ready to "lock in" the use of HTTPS:</p> <ul> <li>Use HTTP Strict Transport Security (HSTS) to avoid the cost of the 301 redirect.</li> <li>Always set the Secure flag on cookies.</li> </ul> <p>First, use <a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security">Strict Transport Security</a> to tell clients they should always connect to your server using HTTPS, even when following an <code translate="no" dir="ltr">http://</code> reference. This defeats attacks like <a href="http://www.thoughtcrime.org/software/sslstrip/">SSL Stripping</a>, and avoids the round-trip cost of the <code translate="no" dir="ltr">301 redirect</code> that we enabled in <a href="#redirect-to-https">Redirect HTTP to HTTPS</a>.</p> <aside class="note"><strong>Note:</strong><span> Clients that have listed your site as a known HSTS Host are likely to <a href="https://tools.ietf.org/html/rfc6797#section-12.1">hard-fail</a> if your site ever has an error in its TLS configuration, (such as an expired certificate). HSTS is explicitly designed this way to ensure that network attackers can't trick clients into accessing the site without HTTPS. Don't enable HSTS until you're certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.</span></aside> <p>To turn on HSTS, set the <code translate="no" dir="ltr">Strict-Transport-Security</code> header. <a href="https://www.owasp.org/index.php/HTTP_Strict_Transport_Security">OWASP's HSTS page has links to instructions</a> for various kinds of server software.</p> <p>Most web servers offer a similar ability to add custom headers.</p> <aside class="note"><strong>Note:</strong><span> <code translate="no" dir="ltr">max-age</code> is measured in seconds. You can start with low values and gradually increase the <code translate="no" dir="ltr">max-age</code> as you become more comfortable operating an HTTPS-only site.</span></aside> <p>It's also important to make sure clients never send cookies (such as for authentication or site preferences) over HTTP. For example, if a user's authentication cookie were to be exposed in plain text, your security guarantee for their entire session is destroyed, even if you've done everything else right!</p> <p>To avoid this, change your web app to always set the Secure flag on cookies it sets. <a href="https://www.owasp.org/index.php/SecureFlag">This OWASP page explains how to set the Secure flag</a> in several app frameworks. Every appl framework has a way to set the flag.</p> <p>Most web servers offer a simple redirect feature. Use <code translate="no" dir="ltr">301 (Moved Permanently)</code> to indicate to search engines and browsers that the HTTPS version is canonical, and redirect your users to the HTTPS version of your site from HTTP.</p> <h3 id="search-ranking" data-text="Search ranking" tabindex="-1">Search ranking</h3> <p>Google uses <a href="https://googlewebmastercentral.blogspot.com/2014/08/https-as-ranking-signal.html">HTTPS as a positive search quality indicator</a>. Google also publishes a guide to <a href="https://support.google.com/webmasters/topic/6029673">how to transferring, moving, or migrating your site</a> while maintaining its search rank. Bing also publishes <a href="http://www.bing.com/webmaster/help/webmaster-guidelines-30fba23a">guidelines for webmasters</a>.</p> <h3 id="performance" data-text="Performance" tabindex="-1">Performance</h3> <p>When the content and application layers are well-tuned (refer to <a href="https://stevesouders.com/">Steve Souders' books</a> for advice), the remaining TLS performance concerns are generally small relative to the overall cost of the application. You can also reduce and amortize those costs. For advice on TLS optimization, see <a href="https://hpbn.co/">High Performance Browser Networking</a> by Ilya Grigorik, as well as Ivan Ristic's <a href="https://www.feistyduck.com/books/openssl-cookbook/">OpenSSL Cookbook</a> and <a href="https://www.feistyduck.com/books/bulletproof-ssl-and-tls/">Bulletproof SSL And TLS</a>.</p> <p>In some cases, TLS can improve performance, mostly as a result of making HTTP/2 possible. For more information, refer to <a href="https://developers.google.com/web/shows/cds/2014/tls-all-the-things">Chris Palmer's' talk on HTTPS and HTTP/2 performance at Chrome Dev Summit 2014</a>.</p> <h3 id="referer-headers" data-text="Referer headers" tabindex="-1">Referer headers</h3> <p>When users follow links from your HTTPS site to other HTTP sites, user agents don't send the Referer header. If this is a problem, there are several ways to solve it:</p> <ul> <li>The other sites should migrate to HTTPS. If referee sites complete the <a href="#enable_https_on_your_servers">Enable HTTPS on your servers</a> section of this guide, you can change links in your site to theirs from <code translate="no" dir="ltr">http://</code> to <code translate="no" dir="ltr">https://</code> or use protocol-relative links.</li> <li>To work around a variety of problems with Referer headers, use the new <a href="http://www.w3.org/TR/referrer-policy/#referrer-policy-delivery-meta">Referrer Policy standard</a>.</li> </ul> <aside class="caution"><strong>Caution:</strong><span> According to the <a href="https://tools.ietf.org/html/rfc2616#section-15.1.3">HTTP RFC</a>, clients <strong>MUST NOT</strong> include a Referer header field in a (non-secure) HTTP request if the referring page is transferred using a secure protocol.</span></aside> <h3 id="ad-revenue" data-text="Ad revenue" tabindex="-1">Ad revenue</h3> <p>Site operators that monetize their site by showing ads want to make sure migrating to HTTPS doesn't reduce ad impressions. However, because of mixed content security concerns, an HTTP <code translate="no" dir="ltr"><iframe></code> doesn't work on an HTTPS page. Until advertisers publish over HTTPS, site operators can't migrate to HTTPS without losing ad revenue; but until site operators migrate to HTTPS, advertisers have little motivation to publish HTTPS.</p> <p>You can start the process of breaking this stalemate by using advertisers that offer ad services over HTTPS, and asking advertisers that don't serve HTTPS at all to at least make it an option. You might need to defer completing <a href="#relative-urls">Make IntraSite URLs relative</a> until enough advertisers interoperate properly.</p> </div> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2015-03-27 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2015-03-27 UTC."],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox wd-footer-promo"> <h3 class="devsite-footer-linkbox-heading no-link">web.dev</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <h3 class="devsite-footer-linkbox-heading no-link"> web.dev </h3> <div class="devsite-footer-linkbox-description">We want to help you build beautiful, accessible, fast, and secure websites that work cross-browser, and for all of your users. This site is our home for content to help you on that journey, written by members of the Chrome team, and external experts.</div> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Contribute</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://issuetracker.google.com/issues/new?component=1400680&template=1857359" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > File a bug </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://issuetracker.google.com/issues?q=status:open%20componentid:1400680&s=created_time:desc" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > See open issues </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Related Content</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://developer.chrome.com/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Chrome for Developers </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://blog.chromium.org/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Chromium updates </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/case-studies" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Case studies </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/shows" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Podcasts & shows </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Follow</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="https://twitter.com/ChromiumDev" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > @ChromiumDev on X </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.youtube.com/user/ChromeDevelopers" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > YouTube </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.linkedin.com/showcase/chrome-for-developers" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Chrome for Developers on LinkedIn </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/static/blog/feed.xml" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > RSS </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[]</script> <script type="application/json" tag-management>{"at": "True", "ga4": [], "ga4p": [], "gtm": [{"id": "GTM-MZWCJPP", "purpose": 0}], "parameters": {"internalUser": "False", "language": {"machineTranslated": "False", "requested": "en", "served": "en"}, "pageType": "article", "projectName": "Articles", "signedIn": "False", "tenant": "web", "recommendations": {"sourcePage": "", "sourceType": 0, "sourceRank": 0, "sourceIdenticalDescriptions": 0, "sourceTitleWords": 0, "sourceDescriptionWords": 0, "experiment": ""}, "experiment": {"ids": ""}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="Tr0rneH3vAReu0QE2weH5pgHJj68V7"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/js/app_loader.js', '[27,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web","https://web-dot-devsite-v2-prod-3p.appspot.com",null,null,["/_pwa/web/manifest.json","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/images/favicon.png","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/web/images/lockup.svg","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyCNm9YxQumEXwGJgTDjxoxXK6m1F-9720Q","AIzaSyCc76DZePGtoyUjqKrLdsMGk_ry7sljLbY","web.dev","AIzaSyB9bqgQ2t11WJsOX8qNsCQ6U-w91mmqF-I","AIzaSyAdYnStPdzjcJJtQ0mvIaeaMKj7_t6J_Fg",null,null,null,["Concierge__enable_pushui","CloudShell__cloud_code_overflow_menu","Search__enable_page_map","Cloud__enable_cloud_facet_chat","Profiles__enable_awarding_url","Cloud__enable_cloud_shell_fte_user_flow","Profiles__enable_profile_collections","MiscFeatureFlags__emergency_css","Cloud__enable_legacy_calculator_redirect","Search__enable_suggestions_from_borg","Profiles__enable_join_program_group_endpoint","Profiles__enable_release_notes_notifications","Profiles__enable_stripe_subscription_management","Cloud__enable_cloud_dlp_service","Profiles__require_profile_eligibility_for_signin","MiscFeatureFlags__developers_footer_image","Profiles__enable_developer_profiles_callout","MiscFeatureFlags__enable_view_transitions","Search__enable_ai_eligibility_checks","DevPro__enable_developer_subscriptions","EngEduTelemetry__enable_engedu_telemetry","MiscFeatureFlags__enable_project_variables","Profiles__enable_recognition_badges","Cloud__enable_cloudx_experiment_ids","Cloud__enable_free_trial_server_call","TpcFeatures__enable_mirror_tenant_redirects","Profiles__enable_public_developer_profiles","CloudShell__cloud_shell_button","OnSwitch__enable","TpcFeatures__enable_unmirrored_page_left_nav","MiscFeatureFlags__enable_explain_this_code","MiscFeatureFlags__enable_firebase_utm","MiscFeatureFlags__developers_footer_dark_image","Profiles__enable_completecodelab_endpoint","Profiles__enable_completequiz_endpoint","Experiments__reqs_query_experiments","Profiles__enable_page_saving","MiscFeatureFlags__enable_variable_operator","Search__enable_dynamic_content_confidential_banner","Cloud__enable_llm_concierge_chat","Analytics__enable_clearcut_logging","Cloud__enable_cloud_shell","BookNav__enable_tenant_cache_key","Profiles__enable_complete_playlist_endpoint","Cloud__enable_cloudx_ping","Profiles__enable_dashboard_curated_recommendations","DevPro__enable_cloud_innovators_plus"],null,null,"AIzaSyA58TaKli1DculwmAmbpzLVGuWc8eCQgQc","https://developerscontentserving-pa.googleapis.com","AIzaSyDWBU60w0P9hEkr29kkksYs8Z7gvZ8u_wc","https://developerscontentsearch-pa.googleapis.com",2,4,null,"https://developerprofiles-pa.googleapis.com",[27,"web","web.dev","web.dev",null,"web-dot-devsite-v2-prod-3p.appspot.com",null,null,[null,null,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],null,null,null,null,[1,null,1],[1,1,null,1,1]],null,[38,null,null,null,null,null,"/images/lockup.svg","/images/touchicon-180.png",null,null,null,1,1,null,null,null,null,null,null,null,null,2,null,null,null,"/images/lockup-dark-theme.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],[1,1]],[[null,null,null,null,null,["GTM-MZWCJPP"],null,null,null,null,null,[["GTM-MZWCJPP",1]],1]],null,4],null,null,1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>