<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HTTPS - 総合デジタルマーケティング企業 エスライン・テクノロジーズ</title>
	<atom:link href="https://slt-inc.jp/tag/https/feed/" rel="self" type="application/rss+xml" />
	<link>https://slt-inc.jp</link>
	<description>Go Beyond with SLT - インターネット集客で事業者と顧客を繋ぐ</description>
	<lastBuildDate>Mon, 12 Oct 2026 08:04:10 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://slt-inc.jp/wp-content/uploads/2025/03/cropped-エスライン_テクノロジーズ_-_新ロゴ2025-removebg-32x32.png</url>
	<title>HTTPS - 総合デジタルマーケティング企業 エスライン・テクノロジーズ</title>
	<link>https://slt-inc.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>セキュリティヘッダーの設定方法｜HSTS・CSPの設定例つき</title>
		<link>https://slt-inc.jp/article/security-headers-setup/</link>
		
		<dc:creator><![CDATA[slt]]></dc:creator>
		<pubDate>Wed, 30 Sep 2026 00:47:00 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[記事]]></category>
		<category><![CDATA[CSP]]></category>
		<category><![CDATA[HSTS]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Webサイトセキュリティ]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[セキュリティヘッダー]]></category>
		<category><![CDATA[セキュリティ対策]]></category>
		<guid isPermaLink="false">https://slt-inc.jp/?p=24853</guid>

					<description><![CDATA[<p><a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12392;&#12399;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12399;&#12289;Web&#12469;&#12540;&#12496;&#12540;&#12364;HTTP&#12398;&#24540;&#31572;&#12395;&#20184;&#12369;&#12390;&#12289;&#12502;&#12521;&#12454;&#12470;&#12395;&#20633;&#12431;&#12387;&#12383;&#38450;&#24481;&#27231;&#33021;&#12434;&#26377;&#21177;&#12395;&#12373;&#12379;&#12427;HTTP&#12504;&#12483;&#12480;&#12540;&#12398;&#32207;&#31216;&#12391;&#12377;&#12290;&#12469;&#12540;&#12496;&#12540;&#12398;&#35373;&#23450;&#12434;&#36275;&#12377;&#12384;&#12369;&#12391;&#12289;&#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#12398;&#12467;&#12540;&#12489;&#12434;&#22793;&#12360;&#12378;&#12395;&#12289;&#23432;&#12426;&#12434;1&#23652;&#22679;&#12420;&#12379;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;XSS&#12289;&#12463;&#12522;&#12483;&#12463;&#12472;&#12515;&#12483;&#12461;&#12531;&#12464;&#12289;&#36890;&#20449;&#12398;&#12480;&#12454;&#12531;&#12464;&#12524;&#12540;&#12489;&#12289;&#12501;&#12449;&#12452;&#12523;&#31278;&#21029;&#12398;&#35492;&#35469;&#12392;&#12356;&#12387;&#12383;&#25915;&#25731;&#12399;&#12289;&#12502;&#12521;&#12454;&#12470;&#20596;&#12398;&#27231;&#33021;&#12391;&#38450;&#12370;&#12427;&#12418;&#12398;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#12383;&#12384;&#12375;&#12289;&#27231;&#33021;&#12399;&#12289;&#12469;&#12540;&#12496;&#12540;&#12364;&#25351;&#31034;&#12434;&#20986;&#12375;&#12390;&#21021;&#12417;&#12390;&#20685;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12399;&#12289;&#33030;&#24369;&#24615;&#12381;&#12398;&#12418;&#12398;&#12434;&#30452;&#12377;&#12418;&#12398;&#12391;&#12399;&#12394;&#12367;&#12289;&#34987;&#23475;&#12434;&#25233;&#12360;&#12427;&#35036;&#21161;&#12391;&#12377;&#12290;&#35386;&#26029;&#12484;&#12540;&#12523;&#12364;&#26368;&#21021;&#12395;&#30906;&#35469;&#12377;&#12427;&#38917;&#30446;&#12391;&#12418;&#12354;&#12426;&#12289;&#26410;&#35373;&#23450;&#12398;&#25351;&#25688;&#12364;&#20986;&#12420;&#12377;&#12356;&#37096;&#20998;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12398;&#20181;&#32068;&#12415;&#38;lt;table&#38;gt;&#38;lt;thead&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;th&#38;gt;&#12504;&#12483;&#12480;&#12540;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#24441;&#21106;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#20516;&#12398;&#20363;&#38;lt;/th&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/thead&#38;gt;&#38;lt;tbody&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;Strict-Transport-Security&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;HTTPS&#12391;&#12398;&#25509;&#32154;&#12434;&#24375;&#21046;&#12377;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;max-age=31536000&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;Content-Security-Policy&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#35501;&#12415;&#36796;&#12415;&#20803;&#12434;&#21046;&#38480;&#12375;&#12289;XSS&#12398;&#34987;&#23475;&#12434;&#25233;&#12360;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;default-src &#38;#039;self&#38;#039;&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;X-Frame-Options&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;iframe&#12408;&#12398;&#22475;&#12417;&#36796;&#12415;&#12434;&#21046;&#38480;&#12377;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;SAMEORIGIN&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;X-Content-Type-Options&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12501;&#12449;&#12452;&#12523;&#31278;&#21029;&#12398;&#25512;&#28204;&#12434;&#27490;&#12417;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;nosniff&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;Referrer-Policy&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#21442;&#29031;&#20803;URL&#12398;&#36865;&#20449;&#31684;&#22258;&#12434;&#27770;&#12417;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;strict-origin-when-cross-origin&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;Permissions-Policy&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12502;&#12521;&#12454;&#12470;&#27231;&#33021;&#12398;&#21033;&#29992;&#12434;&#21046;&#38480;&#12377;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;camera=(), microphone=()&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;&#12377;&#12391;&#12395;&#24441;&#30446;&#12434;&#32066;&#12360;&#12383;&#12418;&#12398;&#12418;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;code&#38;gt;X-XSS-Protection&#38;lt;/code&#38;gt; &#12399;&#12289;OWASP&#12364;&#20184;&#12369;&#12394;&#12356;&#12424;&#12358;&#21223;&#12417;&#12390;&#12356;&#12414;&#12377;&#12290;&#38;lt;code&#38;gt;Expect-CT&#38;lt;/code&#38;gt; &#12392; &#38;lt;code&#38;gt;Public-Key-Pins&#38;lt;/code&#38;gt; &#12418;&#12289;&#20351;&#12356;&#12414;&#12379;&#12435;&#12290;&#36870;&#12395;&#12289;&#38;lt;code&#38;gt;Server&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;X-Powered-By&#38;lt;/code&#38;gt; &#12395;&#12496;&#12540;&#12472;&#12519;&#12531;&#30058;&#21495;&#12364;&#20986;&#12390;&#12356;&#12427;&#22580;&#21512;&#12399;&#12289;&#28040;&#12377;&#12363;&#12289;&#31777;&#32032;&#12395;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12398;&#30906;&#35469;&#26041;&#27861;&#38283;&#30330;&#32773;&#12484;&#12540;&#12523;&#12398;&#12300;&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#12301;&#12479;&#12502;&#12391;&#12289;HTML&#25991;&#26360;&#12398;&#12300;&#12524;&#12473;&#12509;&#12531;&#12473;&#12504;&#12483;&#12480;&#12540;&#12301;&#12434;&#38283;&#12365;&#12414;&#12377;&#12290;&#12467;&#12510;&#12531;&#12489;&#12391;&#12399;&#12289;&#24540;&#31572;&#12504;&#12483;&#12480;&#12540;&#12434;&#12377;&#12409;&#12390;&#34920;&#31034;&#12391;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;curl -s -D - -o /dev/null https://example.com/&#38;lt;/code&#38;gt; Windows&#12398;PowerShell&#12391;&#12399; &#38;lt;code&#38;gt;curl.exe -s -D - -o NUL https://example.com/&#38;lt;/code&#38;gt; &#12391;&#12377;&#12290;&#34920;&#12398;6&#12388;&#12398;&#12358;&#12385;&#12289;&#12393;&#12428;&#12364;&#36820;&#12387;&#12390;&#12356;&#12394;&#12356;&#12363;&#12434;&#35211;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12398;&#35373;&#23450;&#20363;CSP&#12399;&#12289;&#27573;&#38542;&#30340;&#12394;&#23566;&#20837;&#12364;&#24517;&#35201;&#12394;&#12383;&#12417;&#12289;&#12371;&#12371;&#12395;&#12399;&#21547;&#12417;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;CSP&#12398;&#35299;&#35500;&#12398;&#25163;&#38918;&#12391;&#12289;&#21029;&#12395;&#36914;&#12417;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;Apache(.htaccess)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;&#38;amp;lt;IfModule mod_headers.c&#38;amp;gt;    Header always set Strict-Transport-Security &#38;quot;max-age=31536000&#38;quot; env=HTTPS    Header always set X-Content-Type-Options &#38;quot;nosniff&#38;quot;    Header always set X-Frame-Options &#38;quot;SAMEORIGIN&#38;quot;    Header always set Referrer-Policy &#38;quot;strict-origin-when-cross-origin&#38;quot;    Header always set Permissions-Policy &#38;quot;camera=(), microphone=(), geolocation=()&#38;quot;&#38;amp;lt;/IfModule&#38;amp;gt;&#38;lt;/code&#38;gt; nginx&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_header Strict-Transport-Security &#38;quot;max-age=31536000&#38;quot; always;add_header X-Content-Type-Options &#38;quot;nosniff&#38;quot; always;add_header X-Frame-Options &#38;quot;SAMEORIGIN&#38;quot; always;add_header Referrer-Policy &#38;quot;strict-origin-when-cross-origin&#38;quot; always;add_header Permissions-Policy &#38;quot;camera=(), microphone=(), geolocation=()&#38;quot; always;&#38;lt;/code&#38;gt; WordPress(&#23376;&#12486;&#12540;&#12510;&#12398;functions.php)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_action(&#38;#039;send_headers&#38;#039;, function () {    header(&#38;#039;X-Content-Type-Options: nosniff&#38;#039;);    header(&#38;#039;X-Frame-Options: SAMEORIGIN&#38;#039;);    header(&#38;#039;Referrer-Policy: strict-origin-when-cross-origin&#38;#039;);    header(&#38;#039;Permissions-Policy: camera=(), microphone=(), geolocation=()&#38;#039;);    if (is_ssl()) {        header(&#38;#039;Strict-Transport-Security: max-age=31536000&#38;#039;);    }});&#38;lt;/code&#38;gt; &#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;nginx&#12391;&#12399;&#12289;&#38;lt;code&#38;gt;location&#38;lt;/code&#38;gt; &#12502;&#12525;&#12483;&#12463;&#12398;&#20013;&#12395;&#21029;&#12398; &#38;lt;code&#38;gt;add_header&#38;lt;/code&#38;gt; &#12364;1&#12388;&#12391;&#12418;&#12354;&#12427;&#12392;&#12289;&#19978;&#12398;&#38542;&#23652;&#12398; &#38;lt;code&#38;gt;add_header&#38;lt;/code&#38;gt; &#12399;&#24341;&#12365;&#32153;&#12364;&#12428;&#12414;&#12379;&#12435;&#12290;&#35373;&#23450;&#24460;&#12395;&#12289;&#20195;&#34920;&#30340;&#12394;URL&#12391;&#23455;&#38555;&#12398;&#24540;&#31572;&#12434;&#30906;&#12363;&#12417;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;code&#38;gt;always&#38;lt;/code&#38;gt; &#12434;&#20184;&#12369;&#12394;&#12356;&#12392;&#12289;404&#12420;500&#12394;&#12393;&#12398;&#12456;&#12521;&#12540;&#24540;&#31572;&#12395;&#12399;&#12289;&#12504;&#12483;&#12480;&#12540;&#12364;&#20184;&#12365;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;WordPress&#12398;&#12461;&#12515;&#12483;&#12471;&#12517;&#12503;&#12521;&#12464;&#12452;&#12531;&#12364;&#12289;&#38745;&#30340;&#12394;HTML&#12434;PHP&#12434;&#36890;&#12373;&#12378;&#12395;&#36820;&#12375;&#12390;&#12356;&#12427;&#22580;&#21512;&#12289;PHP&#12391;&#20184;&#12369;&#12383;&#12504;&#12483;&#12480;&#12540;&#12399;&#20986;&#12414;&#12379;&#12435;&#12290;&#12469;&#12540;&#12496;&#12540;&#35373;&#23450;&#12391;&#20184;&#12369;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12504;&#12483;&#12480;&#12540;&#12434;&#20184;&#12369;&#12390;&#12418;&#12289;&#33030;&#24369;&#24615;&#12399;&#28040;&#12360;&#12414;&#12379;&#12435;&#12290;&#26356;&#26032;&#12420;&#20837;&#21147;&#20516;&#12398;&#20966;&#29702;&#12398;&#20462;&#27491;&#12392;&#12289;&#32068;&#12415;&#21512;&#12431;&#12379;&#12390;&#34892;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12391;&#30906;&#35469;&#12377;&#12427;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12399;&#12289;&#19978;&#12398;6&#12388;&#12398;&#12504;&#12483;&#12480;&#12540;&#12398;&#26377;&#28961;&#12392;&#12289;&#20516;&#12398;&#24369;&#12373;&#12289;&#12496;&#12540;&#12472;&#12519;&#12531;&#30058;&#21495;&#12434;&#34920;&#12395;&#20986;&#12375;&#12390;&#12356;&#12427;&#12504;&#12483;&#12480;&#12540;&#12289;CORS&#12398;&#35373;&#23450;&#12398;&#32233;&#12373;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;URL&#12434;&#20837;&#12428;&#12427;&#12384;&#12369;&#12391;&#12289;&#12467;&#12510;&#12531;&#12489;&#12394;&#12375;&#12391;&#19968;&#35239;&#12391;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;HSTS&#38;lt;br/&#38;gt;CSP&#38;lt;br/&#38;gt;X-Frame-Options&#38;lt;br/&#38;gt;X-Content-Type-Options&#38;lt;br/&#38;gt;Referrer-Policy&#38;lt;br/&#38;gt;Permissions-Policy&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#12469;&#12452;&#12488;&#12398;&#35373;&#23450;&#12434;&#28961;&#26009;&#12391;&#30906;&#35469;&#12377;&#12427;&#12469;&#12452;&#12488;&#12398;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12384;&#12369;&#12391;&#12289;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540; &#12394;&#12393;&#12398;&#35373;&#23450;&#29366;&#27841;&#12434;&#35386;&#26029;&#12391;&#12365;&#12414;&#12377;&#12290;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12300;Security Checker X&#12301;&#12399;&#12289;&#30331;&#37682;&#12394;&#12375;&#12391;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#60;/div&#62;"  href="https://slt-inc.jp/glossary/security-headers/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;</a>&#12398;&#35373;&#23450;&#26041;&#27861;&#12434;&#12289;Apache&#12289;nginx&#12289;WordPress&#12289;Cloudflare&#12398;&#35373;&#23450;&#20363;&#12388;&#12365;&#12391;&#35299;&#35500;&#12375;&#12414;&#12377;&#12290;always&#12398;&#20184;&#12369;&#24536;&#12428;&#12420;&#32153;&#25215;&#12391;&#12504;&#12483;&#12480;&#12540;&#12364;&#28040;&#12360;&#12427;&#33853;&#12392;&#12375;&#31348;&#12289;<a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;HSTS&#12392;&#12399;HSTS(HTTP Strict Transport Security)&#12399;&#12289;&#12300;&#12371;&#12398;&#12469;&#12452;&#12488;&#12395;&#12399;&#12289;&#20170;&#24460;&#12399;&#24517;&#12378;HTTPS&#12391;&#25509;&#32154;&#12377;&#12427;&#12301;&#12392;&#12502;&#12521;&#12454;&#12470;&#12395;&#35226;&#12360;&#12373;&#12379;&#12427;&#20181;&#32068;&#12415;&#12391;&#12377;&#12290;&#12469;&#12540;&#12496;&#12540;&#12364;HTTPS&#12398;&#24540;&#31572;&#12395; &#38;lt;code&#38;gt;Strict-Transport-Security&#38;lt;/code&#38;gt; &#12504;&#12483;&#12480;&#12540;&#12434;&#20184;&#12369;&#12427;&#12392;&#26377;&#21177;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#20181;&#27096;&#12399;RFC 6797&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;HSTS&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;&#12469;&#12452;&#12488;&#12434;HTTPS&#21270;&#12375;&#12390;&#12418;&#12289;&#21033;&#29992;&#32773;&#12364; &#38;lt;code&#38;gt;http://&#38;lt;/code&#38;gt; &#12391;&#12450;&#12489;&#12524;&#12473;&#12434;&#20837;&#21147;&#12375;&#12383;&#12426;&#12289;&#21476;&#12356;&#12522;&#12531;&#12463;&#12363;&#12425;&#35370;&#12428;&#12383;&#12426;&#12377;&#12427;&#12392;&#12289;&#26368;&#21021;&#12398;1&#22238;&#12399;HTTP&#12391;&#25509;&#32154;&#12375;&#12414;&#12377;&#12290;&#12371;&#12398;&#36890;&#20449;&#12399;&#26263;&#21495;&#21270;&#12373;&#12428;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;&#20844;&#34886;Wi-Fi&#12394;&#12393;&#12391;&#12399;&#12289;&#36890;&#20449;&#12398;&#36884;&#20013;&#12395;&#12356;&#12427;&#31532;&#19977;&#32773;&#12364;HTTPS&#12408;&#12398;&#20999;&#12426;&#26367;&#12360;&#12434;&#22952;&#12370;&#12289;&#20605;&#12398;&#12506;&#12540;&#12472;&#12434;&#35211;&#12379;&#12427;&#12371;&#12392;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HSTS&#12434;&#26377;&#21177;&#12395;&#12377;&#12427;&#12392;&#12289;&#12502;&#12521;&#12454;&#12470;&#12399;&#35352;&#25014;&#12375;&#12390;&#12356;&#12427;&#26399;&#38291;&#12289;HTTP&#12391;&#12398;&#25509;&#32154;&#12434;&#33258;&#20998;&#12391;HTTPS&#12395;&#35501;&#12415;&#26367;&#12360;&#12414;&#12377;&#12290;&#35388;&#26126;&#26360;&#12395;&#12456;&#12521;&#12540;&#12364;&#12354;&#12427;&#22580;&#21512;&#12418;&#12289;&#21033;&#29992;&#32773;&#12364;&#35686;&#21578;&#12434;&#28961;&#35222;&#12375;&#12390;&#20808;&#12408;&#36914;&#12416;&#12371;&#12392;&#12399;&#12391;&#12365;&#12394;&#12367;&#12394;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HSTS&#12398;&#20181;&#32068;&#12415;&#38;lt;ol&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12364;HTTPS&#12391;&#12469;&#12452;&#12488;&#12395;&#25509;&#32154;&#12375;&#12289;&#24540;&#31572;&#12395;HSTS&#12504;&#12483;&#12480;&#12540;&#12364;&#21547;&#12414;&#12428;&#12427;&#12290;&#38;lt;br/&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12364;&#12289;&#12381;&#12398;&#12489;&#12513;&#12452;&#12531;&#12392;&#26377;&#21177;&#26399;&#38291;(max-age)&#12434;&#35352;&#25014;&#12377;&#12427;&#12290;&#38;lt;br/&#38;gt;&#26399;&#38291;&#20869;&#12399;&#12289;HTTP&#12398;&#12450;&#12489;&#12524;&#12473;&#12434;&#20869;&#37096;&#12391;HTTPS&#12395;&#32622;&#12365;&#25563;&#12360;&#12390;&#12363;&#12425;&#25509;&#32154;&#12377;&#12427;&#12290;&#38;lt;br/&#38;gt;&#38;lt;/ol&#38;gt;&#38;lt;table&#38;gt;&#38;lt;thead&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;th&#38;gt;&#25351;&#23450;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#24847;&#21619;&#38;lt;/th&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/thead&#38;gt;&#38;lt;tbody&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;max-age=31536000&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#35352;&#25014;&#12377;&#12427;&#31186;&#25968;&#12290;31536000&#31186;&#12399;1&#24180;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;includeSubDomains&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12469;&#12502;&#12489;&#12513;&#12452;&#12531;&#12395;&#12418;&#36969;&#29992;&#12377;&#12427;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;preload&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12395;&#32068;&#12415;&#36796;&#12414;&#12428;&#12427;HSTS&#12522;&#12473;&#12488;&#12408;&#12398;&#30331;&#37682;&#12434;&#24076;&#26395;&#12377;&#12427;(&#21029;&#36884;&#30003;&#35531;&#12364;&#24517;&#35201;)&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;HTTP&#12398;&#24540;&#31572;&#12395;&#20184;&#12356;&#12383;&#12504;&#12483;&#12480;&#12540;&#12399;&#28961;&#35222;&#12373;&#12428;&#12414;&#12377;&#12290;&#12414;&#12383;&#12289;&#35352;&#25014;&#12377;&#12427;&#21069;&#12398;&#21021;&#22238;&#35370;&#21839;&#12399;&#20445;&#35703;&#12373;&#12428;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;HSTS&#12398;&#30906;&#35469;&#26041;&#27861;&#12502;&#12521;&#12454;&#12470;&#12398;&#38283;&#30330;&#32773;&#12484;&#12540;&#12523;(F12)&#12391;&#12300;&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#12301;&#12479;&#12502;&#12434;&#38283;&#12365;&#12289;&#12506;&#12540;&#12472;&#12434;&#20877;&#35501;&#12415;&#36796;&#12415;&#12375;&#12390;&#12289;&#26368;&#19978;&#27573;&#12398;HTML&#25991;&#26360;&#12398;&#12524;&#12473;&#12509;&#12531;&#12473;&#12504;&#12483;&#12480;&#12540;&#12395; &#38;lt;code&#38;gt;strict-transport-security&#38;lt;/code&#38;gt; &#12364;&#12354;&#12427;&#12363;&#12434;&#35211;&#12414;&#12377;&#12290;&#12467;&#12510;&#12531;&#12489;&#12391;&#12399;&#27425;&#12398;&#12392;&#12362;&#12426;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;curl -s -D - -o /dev/null https://example.com/ &#124; grep -i &#38;#039;^strict-transport-security&#38;#039;&#38;lt;/code&#38;gt; &#20309;&#12418;&#34920;&#31034;&#12373;&#12428;&#12394;&#12369;&#12428;&#12400;&#26410;&#35373;&#23450;&#12391;&#12377;&#12290;Windows&#12398;PowerShell&#12391;&#12399; &#38;lt;code&#38;gt;curl.exe -s -D - -o NUL https://example.com/ &#124; Select-String strict-transport-security&#38;lt;/code&#38;gt; &#12434;&#20351;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HSTS&#12398;&#35373;&#23450;&#20363;HTTPS&#12391;&#36820;&#12377;&#24540;&#31572;&#12395;&#12384;&#12369;&#20184;&#12369;&#12414;&#12377;&#12290;&#21021;&#12417;&#12390;&#26377;&#21177;&#12395;&#12377;&#12427;&#12392;&#12365;&#12399;&#12289;&#25968;&#20516;&#12434;300(5&#20998;)&#12394;&#12393;&#12398;&#30701;&#12356;&#20516;&#12395;&#12375;&#12390;&#22987;&#12417;&#12289;&#21839;&#38988;&#12364;&#12394;&#12369;&#12428;&#12400;&#27573;&#38542;&#30340;&#12395;&#24310;&#12400;&#12375;&#12414;&#12377;&#12290;hstspreload.org&#12399;&#12289;5&#20998;&#12289;1&#36913;&#38291;&#12289;1&#12363;&#26376;&#12392;&#24310;&#12400;&#12375;&#12289;&#26368;&#32066;&#30340;&#12395;1&#24180;(31536000&#31186;)&#20197;&#19978;&#12395;&#12377;&#12427;&#25163;&#38918;&#12434;&#31034;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&#20197;&#19979;&#12399;&#26368;&#32066;&#30340;&#12394;&#20516;&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;Apache(.htaccess)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;&#38;amp;lt;IfModule mod_headers.c&#38;amp;gt;    Header always set Strict-Transport-Security &#38;quot;max-age=31536000&#38;quot; env=HTTPS&#38;amp;lt;/IfModule&#38;amp;gt;&#38;lt;/code&#38;gt; nginx(HTTPS&#12398;server&#12502;&#12525;&#12483;&#12463;)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_header Strict-Transport-Security &#38;quot;max-age=31536000&#38;quot; always;&#38;lt;/code&#38;gt; WordPress(&#23376;&#12486;&#12540;&#12510;&#12398;functions.php)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_action(&#38;#039;send_headers&#38;#039;, function () {    if (is_ssl()) {        header(&#38;#039;Strict-Transport-Security: max-age=31536000&#38;#039;);    }});&#38;lt;/code&#38;gt; &#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;&#26368;&#21021;&#12363;&#12425;&#38263;&#12356;&#26399;&#38291;&#12434;&#25351;&#23450;&#12377;&#12427;&#12392;&#12289;&#35388;&#26126;&#26360;&#12398;&#26399;&#38480;&#20999;&#12428;&#12420;&#35373;&#23450;&#12511;&#12473;&#12364;&#36215;&#12365;&#12383;&#12392;&#12365;&#12289;&#12381;&#12398;&#26399;&#38291;&#12356;&#12387;&#12401;&#12356;&#12469;&#12452;&#12488;&#12434;&#38283;&#12369;&#12394;&#12356;&#21033;&#29992;&#32773;&#12364;&#20986;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;code&#38;gt;includeSubDomains&#38;lt;/code&#38;gt; &#12399;&#12289;&#31038;&#20869;&#29992;&#12420;&#12486;&#12473;&#12488;&#29992;&#12434;&#21547;&#12416;&#12377;&#12409;&#12390;&#12398;&#12469;&#12502;&#12489;&#12513;&#12452;&#12531;&#12364;HTTPS&#12391;&#21205;&#12367;&#12392;&#30906;&#12363;&#12417;&#12390;&#12363;&#12425;&#20184;&#12369;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;code&#38;gt;preload&#38;lt;/code&#38;gt; &#12399;&#12289;&#21462;&#12426;&#28040;&#12375;&#12395;&#12502;&#12521;&#12454;&#12470;&#12398;&#26356;&#26032;&#12434;&#24453;&#12388;&#12383;&#12417;&#12289;&#25968;&#12363;&#26376;&#12363;&#12363;&#12427;&#12371;&#12392;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;hstspreload.org&#12398;&#35201;&#20214;(max-age&#12364;1&#24180;&#20197;&#19978;&#12289;includeSubDomains&#12289;preload)&#12434;&#28288;&#12383;&#12375;&#12289;HTTPS&#12434;&#38263;&#12367;&#32173;&#25345;&#12391;&#12365;&#12427;&#22580;&#21512;&#12384;&#12369;&#30003;&#35531;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HTTP&#12363;&#12425;HTTPS&#12408;&#12398;301&#36578;&#36865;&#12399;&#21029;&#12395;&#24517;&#35201;&#12391;&#12377;&#12290;HSTS&#12384;&#12369;&#12391;&#12399;&#12289;&#21021;&#22238;&#12398;HTTP&#25509;&#32154;&#12399;&#38450;&#12370;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;CDN&#12420;&#12522;&#12496;&#12540;&#12473;&#12503;&#12525;&#12461;&#12471;&#12398;&#32972;&#24460;&#12391;&#12399;&#12289;&#12504;&#12483;&#12480;&#12540;&#12364;&#21033;&#29992;&#32773;&#12414;&#12391;&#23626;&#12356;&#12390;&#12356;&#12427;&#12363;&#12434;&#12289;&#20844;&#38283;URL&#12391;&#23455;&#38555;&#12395;&#30906;&#35469;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12391;&#30906;&#35469;&#12377;&#12427;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12399;&#12289;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12392;&#12289;HSTS&#12504;&#12483;&#12480;&#12540;&#12398;&#26377;&#28961;&#12392;max-age&#12398;&#38263;&#12373;&#12289;HTTP&#12363;&#12425;HTTPS&#12408;&#12398;&#36578;&#36865;&#12398;&#29366;&#24907;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;&#32080;&#26524;&#12395;&#12399;&#12289;&#21028;&#26029;&#12398;&#26681;&#25312;&#12392;&#12394;&#12387;&#12383;&#24540;&#31572;&#12398;&#20869;&#23481;&#12364;&#31034;&#12373;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;SSL/TLS&#35388;&#26126;&#26360;&#38;lt;br/&#38;gt;TLS&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#38;lt;br/&#38;gt;&#28151;&#22312;&#12467;&#12531;&#12486;&#12531;&#12484;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#12469;&#12452;&#12488;&#12398;&#35373;&#23450;&#12434;&#28961;&#26009;&#12391;&#30906;&#35469;&#12377;&#12427;&#12469;&#12452;&#12488;&#12398;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12384;&#12369;&#12391;&#12289;HSTS &#12394;&#12393;&#12398;&#35373;&#23450;&#29366;&#27841;&#12434;&#35386;&#26029;&#12391;&#12365;&#12414;&#12377;&#12290;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12300;Security Checker X&#12301;&#12399;&#12289;&#30331;&#37682;&#12394;&#12375;&#12391;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#60;/div&#62;"  href="https://slt-inc.jp/glossary/hsts/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>HSTS</a>&#12392;<a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;CSP&#12392;&#12399;CSP(Content Security Policy&#12289;&#12467;&#12531;&#12486;&#12531;&#12484;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12509;&#12522;&#12471;&#12540;)&#12399;&#12289;&#12506;&#12540;&#12472;&#12364;&#35501;&#12415;&#36796;&#12435;&#12391;&#12424;&#12356;&#12473;&#12463;&#12522;&#12503;&#12488;&#12289;&#30011;&#20687;&#12289;&#12473;&#12479;&#12452;&#12523;&#12471;&#12540;&#12488;&#12394;&#12393;&#12398;&#21462;&#24471;&#20803;&#12434;&#12289;&#12469;&#12540;&#12496;&#12540;&#12364;&#12502;&#12521;&#12454;&#12470;&#12395;&#25351;&#31034;&#12377;&#12427;&#20181;&#32068;&#12415;&#12391;&#12377;&#12290;&#38;lt;code&#38;gt;Content-Security-Policy&#38;lt;/code&#38;gt; &#12504;&#12483;&#12480;&#12540;&#12391;&#25351;&#23450;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;CSP&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;&#20837;&#21147;&#20516;&#12398;&#20966;&#29702;&#12395;&#19981;&#20633;&#12364;&#12354;&#12426;&#12289;&#25915;&#25731;&#32773;&#12398;&#12473;&#12463;&#12522;&#12503;&#12488;&#12364;&#12506;&#12540;&#12472;&#12395;&#28151;&#20837;&#12377;&#12427;&#12392;&#12289;XSS&#12364;&#25104;&#31435;&#12375;&#12414;&#12377;&#12290;CSP&#12391;&#35377;&#21487;&#12375;&#12383;&#21462;&#24471;&#20803;&#20197;&#22806;&#12398;&#12473;&#12463;&#12522;&#12503;&#12488;&#12434;&#27490;&#12417;&#12390;&#12362;&#12369;&#12400;&#12289;&#28151;&#20837;&#12375;&#12390;&#12418;&#23455;&#34892;&#12373;&#12428;&#12378;&#12289;&#22806;&#37096;&#12408;&#12398;&#36865;&#20449;&#20808;&#12418;&#32094;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;CSP&#12399;&#12289;&#26681;&#26412;&#23550;&#31574;&#12398;&#20195;&#12431;&#12426;&#12395;&#12399;&#12394;&#12426;&#12414;&#12379;&#12435;&#12290;&#20986;&#21147;&#26178;&#12398;&#12456;&#12473;&#12465;&#12540;&#12503;&#12394;&#12393;&#12398;&#20462;&#27491;&#12434;&#34892;&#12387;&#12383;&#12358;&#12360;&#12391;&#12289;&#34987;&#23475;&#12434;&#23567;&#12373;&#12367;&#12377;&#12427;&#12383;&#12417;&#12398;&#20108;&#37325;&#12398;&#20633;&#12360;&#12392;&#12375;&#12390;&#20351;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;CSP&#12398;&#20181;&#32068;&#12415;&#12504;&#12483;&#12480;&#12540;&#12398;&#20516;&#12399;&#12289;&#12300;&#12487;&#12451;&#12524;&#12463;&#12486;&#12451;&#12502;(&#21046;&#24481;&#12377;&#12427;&#23550;&#35937;)&#12392;&#35377;&#21487;&#12377;&#12427;&#21462;&#24471;&#20803;&#12301;&#12434;&#12289;&#12475;&#12511;&#12467;&#12525;&#12531;&#12391;&#21306;&#20999;&#12387;&#12390;&#20006;&#12409;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;table&#38;gt;&#38;lt;thead&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;th&#38;gt;&#12487;&#12451;&#12524;&#12463;&#12486;&#12451;&#12502;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#21046;&#24481;&#12377;&#12427;&#23550;&#35937;&#38;lt;/th&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/thead&#38;gt;&#38;lt;tbody&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;default-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#20491;&#21029;&#12398;&#25351;&#23450;&#12364;&#12394;&#12356;&#35501;&#12415;&#36796;&#12415;&#20840;&#33324;&#12398;&#26082;&#23450;&#20516;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;script-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;JavaScript&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;style-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;CSS&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;img-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#30011;&#20687;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;connect-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;fetch&#12420;XMLHttpRequest&#12398;&#36890;&#20449;&#20808;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;object-src&#38;lt;/code&#38;gt;&#12289;&#38;lt;code&#38;gt;base-uri&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12503;&#12521;&#12464;&#12452;&#12531;&#12398;&#22475;&#12417;&#36796;&#12415;&#12289;base&#12479;&#12464;&#12395;&#12424;&#12427;&#22522;&#28310;URL&#12398;&#26360;&#12365;&#25563;&#12360;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;frame-ancestors&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12371;&#12398;&#12506;&#12540;&#12472;&#12434;iframe&#12391;&#22475;&#12417;&#36796;&#12417;&#12427;&#20803;(&#12463;&#12522;&#12483;&#12463;&#12472;&#12515;&#12483;&#12461;&#12531;&#12464;&#23550;&#31574;)&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;&#21462;&#24471;&#20803;&#12395;&#12399;&#12289;&#38;lt;code&#38;gt;&#38;#039;self&#38;#039;&#38;lt;/code&#38;gt;(&#33258;&#12469;&#12452;&#12488;)&#12289;&#38;lt;code&#38;gt;&#38;#039;none&#38;#039;&#38;lt;/code&#38;gt;(&#12377;&#12409;&#12390;&#31105;&#27490;)&#12289;&#38;lt;code&#38;gt;https://cdn.example.com&#38;lt;/code&#38;gt; &#12398;&#12424;&#12358;&#12394;&#12507;&#12473;&#12488;&#21517;&#12434;&#26360;&#12365;&#12414;&#12377;&#12290;&#12452;&#12531;&#12521;&#12452;&#12531;&#12398;&#12473;&#12463;&#12522;&#12503;&#12488;&#12434;&#20491;&#21029;&#12395;&#35377;&#21487;&#12377;&#12427; &#38;lt;code&#38;gt;&#38;#039;nonce-...&#38;#039;&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;&#38;#039;sha256-...&#38;#039;&#38;lt;/code&#38;gt; &#12418;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;code&#38;gt;frame-ancestors&#38;lt;/code&#38;gt;&#12289;&#38;lt;code&#38;gt;base-uri&#38;lt;/code&#38;gt;&#12289;&#38;lt;code&#38;gt;form-action&#38;lt;/code&#38;gt; &#12399; &#38;lt;code&#38;gt;default-src&#38;lt;/code&#38;gt; &#12391;&#12399;&#20195;&#29992;&#12373;&#12428;&#12394;&#12356;&#12383;&#12417;&#12289;&#20491;&#21029;&#12395;&#26360;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;CSP&#12398;&#30906;&#35469;&#26041;&#27861;&#38283;&#30330;&#32773;&#12484;&#12540;&#12523;&#12398;&#12300;&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#12301;&#12479;&#12502;&#12391;&#12524;&#12473;&#12509;&#12531;&#12473;&#12504;&#12483;&#12480;&#12540;&#12434;&#35211;&#12427;&#12363;&#12289;&#27425;&#12398;&#12467;&#12510;&#12531;&#12489;&#12434;&#23455;&#34892;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;curl -s -D - -o /dev/null https://example.com/ &#124; grep -i &#38;#039;^content-security-policy&#38;#039;&#38;lt;/code&#38;gt; &#12509;&#12522;&#12471;&#12540;&#12395;&#21453;&#12375;&#12383;&#35501;&#12415;&#36796;&#12415;&#12399;&#12289;&#38283;&#30330;&#32773;&#12484;&#12540;&#12523;&#12398;&#12300;&#12467;&#12531;&#12477;&#12540;&#12523;&#12301;&#12395;&#12300;Refused to load ...&#12301;&#12394;&#12393;&#12398;&#24418;&#12391;&#35352;&#37682;&#12373;&#12428;&#12414;&#12377;&#12290;&#38;lt;code&#38;gt;Content-Security-Policy-Report-Only&#38;lt;/code&#38;gt; &#12384;&#12369;&#12364;&#20986;&#12427;&#22580;&#21512;&#12399;&#12289;&#12414;&#12384;&#24375;&#21046;&#12373;&#12428;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;CSP&#12398;&#35373;&#23450;&#20363;&#12356;&#12365;&#12394;&#12426;&#24375;&#21046;&#12377;&#12427;&#12392;&#12289;&#12469;&#12452;&#12488;&#12398;&#34920;&#31034;&#12420;&#27231;&#33021;&#12364;&#22730;&#12428;&#12427;&#12371;&#12392;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#12414;&#12378; &#38;lt;code&#38;gt;Content-Security-Policy-Report-Only&#38;lt;/code&#38;gt; &#12391;&#36949;&#21453;&#12398;&#35352;&#37682;&#12384;&#12369;&#12434;&#34892;&#12356;&#12289;&#12467;&#12531;&#12477;&#12540;&#12523;&#12398;&#36949;&#21453;&#12364;&#12394;&#12367;&#12394;&#12387;&#12390;&#12363;&#12425;&#12289;&#24375;&#21046;&#12398; &#38;lt;code&#38;gt;Content-Security-Policy&#38;lt;/code&#38;gt; &#12395;&#20999;&#12426;&#26367;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;Apache(.htaccess)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;Header always set Content-Security-Policy-Report-Only &#38;quot;default-src &#38;#039;self&#38;#039;; img-src &#38;#039;self&#38;#039; data: https:; object-src &#38;#039;none&#38;#039;; base-uri &#38;#039;self&#38;#039;&#38;quot;&#38;lt;/code&#38;gt; nginx&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_header Content-Security-Policy-Report-Only &#38;quot;default-src &#38;#039;self&#38;#039;; img-src &#38;#039;self&#38;#039; data: https:; object-src &#38;#039;none&#38;#039;; base-uri &#38;#039;self&#38;#039;&#38;quot; always;&#38;lt;/code&#38;gt; WordPress(&#23376;&#12486;&#12540;&#12510;&#12398;functions.php)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_action(&#38;#039;send_headers&#38;#039;, function () {    header(&#38;quot;Content-Security-Policy-Report-Only: default-src &#38;#039;self&#38;#039;; img-src &#38;#039;self&#38;#039; data: https:; object-src &#38;#039;none&#38;#039;; base-uri &#38;#039;self&#38;#039;&#38;quot;);});&#38;lt;/code&#38;gt; &#23455;&#38555;&#12398;&#12469;&#12452;&#12488;&#12391;&#12399;&#12289;&#35299;&#26512;&#12479;&#12464;&#12420;&#22475;&#12417;&#36796;&#12415;&#22320;&#22259;&#12394;&#12393;&#12398;&#22806;&#37096;&#12469;&#12540;&#12499;&#12473;&#12364;&#36949;&#21453;&#12392;&#12375;&#12390;&#35352;&#37682;&#12373;&#12428;&#12414;&#12377;&#12290;&#24517;&#35201;&#12394;&#12418;&#12398;&#12384;&#12369;&#12434;&#21462;&#24471;&#20803;&#12395;&#21152;&#12360;&#12390;&#12356;&#12365;&#12414;&#12377;&#12290;&#36949;&#21453;&#12398;&#22577;&#21578;&#12434;&#38598;&#12417;&#12383;&#12356;&#22580;&#21512;&#12399;&#12289;&#38;lt;code&#38;gt;report-to&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;report-uri&#38;lt;/code&#38;gt; &#12391;&#36865;&#20449;&#20808;&#12434;&#25351;&#23450;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;&#38;lt;code&#38;gt;script-src&#38;lt;/code&#38;gt; &#12395; &#38;lt;code&#38;gt;&#38;#039;unsafe-inline&#38;#039;&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;*&#38;lt;/code&#38;gt;&#12289;&#38;lt;code&#38;gt;https:&#38;lt;/code&#38;gt; &#12434;&#20837;&#12428;&#12427;&#12392;&#12289;XSS&#12434;&#27490;&#12417;&#12427;&#21177;&#26524;&#12364;&#12411;&#12392;&#12435;&#12393;&#22833;&#12431;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#35377;&#21487;&#12377;&#12427;&#21462;&#24471;&#20803;&#12434;&#20006;&#12409;&#12427;&#26041;&#24335;&#12399;&#12289;&#35373;&#35336;&#12392;&#32173;&#25345;&#12364;&#38627;&#12375;&#12367;&#12394;&#12426;&#12364;&#12385;&#12391;&#12377;&#12290;MDN&#12399;&#12289;nonce&#12420;&#12495;&#12483;&#12471;&#12517;&#12434;&#20351;&#12358;&#26041;&#24335;&#12434;&#21223;&#12417;&#12390;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;code&#38;gt;&#38;amp;lt;meta http-equiv=&#38;quot;Content-Security-Policy&#38;quot;&#38;amp;gt;&#38;lt;/code&#38;gt; &#12391;&#12399;&#12289;&#38;lt;code&#38;gt;frame-ancestors&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;report-uri&#38;lt;/code&#38;gt; &#12364;&#21177;&#12363;&#12378;&#12289;Report-Only&#12418;&#20351;&#12360;&#12414;&#12379;&#12435;&#12290;HTTP&#12504;&#12483;&#12480;&#12540;&#12391;&#25351;&#23450;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;Report-Only&#12398;&#20013;&#12398; &#38;lt;code&#38;gt;frame-ancestors&#38;lt;/code&#38;gt; &#12399;&#28961;&#35222;&#12373;&#12428;&#12414;&#12377;&#12290;&#12463;&#12522;&#12483;&#12463;&#12472;&#12515;&#12483;&#12461;&#12531;&#12464;&#23550;&#31574;&#12384;&#12369;&#12434;&#20808;&#12395;&#34892;&#12358;&#12394;&#12425;&#12289;&#24375;&#21046;&#12398; &#38;lt;code&#38;gt;Content-Security-Policy: frame-ancestors &#38;#039;self&#38;#039;&#38;lt;/code&#38;gt; &#12398;1&#34892;&#12363;&#12425;&#22987;&#12417;&#12425;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;WordPress&#12398;&#31649;&#29702;&#30011;&#38754;&#12399;&#12452;&#12531;&#12521;&#12452;&#12531;&#12473;&#12463;&#12522;&#12503;&#12488;&#12434;&#22810;&#12367;&#20351;&#12356;&#12414;&#12377;&#12290;&#31649;&#29702;&#30011;&#38754;&#12395;&#12414;&#12391;&#24375;&#21046;&#12377;&#12427;&#21069;&#12395;&#12289;&#21205;&#20316;&#12434;&#30906;&#12363;&#12417;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12391;&#30906;&#35469;&#12377;&#12427;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12399;&#12289;Content-Security-Policy&#12398;&#26377;&#28961;&#12392;&#12289;&#38;lt;code&#38;gt;script-src&#38;lt;/code&#38;gt; &#12395; &#38;lt;code&#38;gt;&#38;#039;unsafe-inline&#38;#039;&#38;lt;/code&#38;gt; &#12394;&#12393;&#12398;&#24369;&#12356;&#25351;&#23450;&#12364;&#27531;&#12387;&#12390;&#12356;&#12394;&#12356;&#12363;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;Report-Only&#12384;&#12369;&#12391;&#24375;&#21046;&#12373;&#12428;&#12390;&#12356;&#12394;&#12356;&#29366;&#24907;&#12418;&#12289;&#21306;&#21029;&#12375;&#12390;&#31034;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;XSS(&#12463;&#12525;&#12473;&#12469;&#12452;&#12488;&#12473;&#12463;&#12522;&#12503;&#12486;&#12451;&#12531;&#12464;)&#38;lt;br/&#38;gt;&#12463;&#12522;&#12483;&#12463;&#12472;&#12515;&#12483;&#12461;&#12531;&#12464;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#38;lt;br/&#38;gt;SRI(&#12469;&#12502;&#12522;&#12477;&#12540;&#12473;&#23436;&#20840;&#24615;)&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#12469;&#12452;&#12488;&#12398;&#35373;&#23450;&#12434;&#28961;&#26009;&#12391;&#30906;&#35469;&#12377;&#12427;&#12469;&#12452;&#12488;&#12398;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12384;&#12369;&#12391;&#12289;CSP &#12394;&#12393;&#12398;&#35373;&#23450;&#29366;&#27841;&#12434;&#35386;&#26029;&#12391;&#12365;&#12414;&#12377;&#12290;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12300;Security Checker X&#12301;&#12399;&#12289;&#30331;&#37682;&#12394;&#12375;&#12391;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#60;/div&#62;"  href="https://slt-inc.jp/glossary/csp/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>CSP</a>&#12398;&#27573;&#38542;&#23566;&#20837;&#12289;&#37325;&#35079;&#26178;&#12398;&#25201;&#12356;&#12289;&#30906;&#35469;&#12392;&#25147;&#12375;&#26041;&#12414;&#12391;&#12414;&#12392;&#12417;&#12390;&#12356;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://slt-inc.jp/article/security-headers-setup/">セキュリティヘッダーの設定方法｜HSTS・CSPの設定例つき</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="slt-art">
<div class="slt-meta">最終確認日: 2026年10月12日 / 編集: エスライン・テクノロジーズ株式会社 Webサイトセキュリティ編集チーム</div>
<div class="slt-lead"><p class="slt-lead-label">この記事の結論</p><p>セキュリティヘッダーは、1つのヘッダーを1か所（原則はWebサーバー）だけで付けるのが基本です。X-Content-Type-Options、Referrer-Policy、X-Frame-Options、Permissions-Policyの4つは、確認後すぐに入れられます。HSTSはmax-age=300から段階的に延ばし、CSPはReport-Onlyで違反を集めてから強制に切り替えます。設定後は curl -I で、トップページ、存在しないURL、リダイレクトの応答に、各ヘッダーが1本ずつ付いているかを確かめてください。</p></div>

<h2>セキュリティヘッダーは影響の小さい順に4段階で入れる</h2>
<p>最初に入れるのは、表示が壊れにくいX-Content-Type-OptionsとReferrer-Policyです。次にX-Frame-OptionsとPermissions-Policy、3段階目にHSTS、最後にCSPを入れます。段階を分けておくと、表示や機能が壊れたときに原因のヘッダーを1つに絞り込めます。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>段階</th><th>ヘッダー</th><th>推奨値</th><th>入れる前に確かめること</th></tr></thead><tbody>
<tr><td>1</td><td>X-Content-Type-Options</td><td><code>nosniff</code></td><td>JavaScriptとCSSが正しいContent-Typeで返っているか</td></tr>
<tr><td>1</td><td>Referrer-Policy</td><td><code>strict-origin-when-cross-origin</code></td><td>外部サービスにURLのパスまで渡す連携がないか</td></tr>
<tr><td>2</td><td>X-Frame-Options</td><td><code>SAMEORIGIN</code></td><td>他サイトの枠（iframe）に自サイトを表示させていないか</td></tr>
<tr><td>2</td><td>Permissions-Policy</td><td><code>camera=(), microphone=(), geolocation=()</code></td><td>カメラ、マイク、位置情報を使う画面がないか</td></tr>
<tr><td>3</td><td>Strict-Transport-Security</td><td><code>max-age=300</code>から延ばし、最終は1年以上</td><td>全ページとサブドメインがHTTPSか、証明書の更新が自動か</td></tr>
<tr><td>4</td><td>Content-Security-Policy</td><td>Report-Onlyから始め、値はサイトごとに設計</td><td>外部のタグ、埋め込み、インラインスクリプトの一覧</td></tr>
</tbody></table></div>
<p><a href="https://slt-inc.jp/glossary/security-headers/">セキュリティヘッダー</a>の推奨値は、OWASPの<a href="https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html">HTTP Headers Cheat Sheet</a>を基準にし、X-Frame-Optionsだけは自サイト内の枠表示を残せる <code>SAMEORIGIN</code> にしています（OWASPは <code>DENY</code>）。段階1と同時に、ServerヘッダーとX-Powered-Byに出る版の表記も消します。</p>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>各段階の後で、問い合わせフォーム、決済、地図、動画、アクセス解析など、外部と連携する画面を動かしてから次へ進みます。</p></div>

<h2>ヘッダーはどこで付き、ブラウザはどう使うか</h2>
<p>セキュリティヘッダーは、アプリ（WordPressなど）、Webサーバー、CDNのどこでも付けられ、ブラウザは手元に届いた応答のヘッダーに従って動作を変えます。ブラウザからは、どこで付いたヘッダーかを区別できません。1つのヘッダーを付ける場所を1か所に決めることが、重複と付け漏れを防ぐ近道です。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 400"><title>ヘッダーが付く場所とブラウザでの使われ方</title><desc>左の列に、アプリ、Webサーバー、CDNの3つの箱が上から順に並び、応答はこの順に通ってヘッダーが足される。右のブラウザは、届いたヘッダーに従ってHTTPSへの固定、読み込みの制限、他サイトの枠の拒否、使わない機能の停止を行う。下の赤枠は、同じヘッダーを2か所で付けるとブラウザに2本届くことを示す。</desc><defs><marker id="f1-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker></defs><rect x="0" y="0" width="800" height="400" fill="#FFFFFF"/><rect x="20" y="20" width="330" height="80" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="185" y="54" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">アプリ（PHPなど）</text><text x="185" y="88" text-anchor="middle" font-size="22" fill="#10265A">ページごとに付ける</text><line x1="185" y1="100" x2="185" y2="126" stroke="#10265A" stroke-width="3" marker-end="url(#f1-arrow)"/><rect x="20" y="130" width="330" height="80" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="185" y="164" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">Webサーバー</text><text x="185" y="198" text-anchor="middle" font-size="22" fill="#10265A">Apache、nginxで付ける</text><line x1="185" y1="210" x2="185" y2="236" stroke="#10265A" stroke-width="3" marker-end="url(#f1-arrow)"/><rect x="20" y="240" width="330" height="80" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="185" y="274" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">CDN</text><text x="185" y="308" text-anchor="middle" font-size="22" fill="#10265A">Cloudflareなどで上書き</text><line x1="350" y1="280" x2="464" y2="280" stroke="#10265A" stroke-width="4" marker-end="url(#f1-arrow)"/><text x="406" y="266" text-anchor="middle" font-size="22" fill="#10265A">応答</text><rect x="470" y="40" width="310" height="280" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="625" y="82" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">ブラウザ</text><line x1="500" y1="100" x2="750" y2="100" stroke="#4A5C82" stroke-width="3"/><text x="500" y="144" font-size="22" fill="#10265A">HTTPSに固定する</text><text x="500" y="188" font-size="22" fill="#10265A">読み込みを制限する</text><text x="500" y="232" font-size="22" fill="#10265A">他サイトの枠を拒否</text><text x="500" y="276" font-size="22" fill="#10265A">使わない機能を止める</text><rect x="20" y="338" width="760" height="52" rx="10" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="400" y="372" text-anchor="middle" font-size="22" fill="#10265A">同じヘッダーを2か所で付けると、ブラウザに2本届く</text></svg><figcaption>図1 ヘッダーは、アプリ、Webサーバー、CDNの順に応答へ足されます。ブラウザは、HSTSならHTTPSへの固定、CSPなら読み込みの制限、X-Frame-Optionsなら枠の拒否、Permissions-Policyなら機能の停止を行います。同じヘッダーを2か所で付けると、2本届きます。</figcaption></figure>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>付ける場所</th><th>ヘッダーが付く応答</th><th>向いている場面</th><th>注意点</th></tr></thead><tbody>
<tr><td>Webサーバー（Apache、nginx）</td><td>静的ファイル、エラー、リダイレクトを含む全応答（alwaysを付けた場合）</td><td>基本の置き場所</td><td>アプリが同じヘッダーを出すと2本並ぶ</td></tr>
<tr><td>CDN（Cloudflareなど）</td><td>CDNを通る全応答</td><td>サーバーの設定を変えられないとき</td><td>「追加」の操作は既存の同名ヘッダーを残す</td></tr>
<tr><td>アプリ（WordPressなど）</td><td>アプリが生成したページだけ</td><td>応答ごとに値が変わるCSPのnonce</td><td>画像、CSS、サーバー側のリダイレクトには付かない</td></tr>
</tbody></table></div>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>原則はWebサーバーで付け、CSPのnonceのように応答ごとに値を作るものだけをアプリで付けます。CDNは、サーバーの設定を変えられないときの代わりです。どのヘッダーをどこで付けたかは、一覧にして残します。</p></div>

<h2>各ヘッダーの設定値と推奨値</h2>
<p>段階1と2の4つは推奨値がほぼ決まっており、自サイトの使い方と突き合わせれば決められます。HSTSとCSPは、後の節の手順で扱います。</p>

<h3>X-Content-Type-Options: nosniff</h3>
<p><a href="https://slt-inc.jp/glossary/x-content-type-options/">X-Content-Type-Options</a>の値は <code>nosniff</code> だけで、Content-TypeがJavaScriptの種類でないスクリプトと、text/cssでないスタイルシートを読み込ませなくします。Chrome 146の場合、text/plainで返したJavaScriptは、nosniffが無いと実行され、付けると止まります。</p>
<p>入れる前に <code>curl -sI https://example.com/main.js</code> で、主なJavaScriptのContent-Typeを調べます。<code>text/javascript</code> などなら合格で、<code>text/plain</code> などならサーバーのMIMEタイプの設定を先に直します。</p>

<h3>Referrer-Policy: strict-origin-when-cross-origin</h3>
<p><a href="https://slt-inc.jp/glossary/referrer-policy/">Referrer-Policy</a>は、リンク先や外部の読み込み先へ、元のページのURLをどこまで伝えるかを決めます。推奨値は、同じオリジンにはURL全体を、別のオリジンには <code>https://example.com/</code> のようなオリジンだけを伝え、HTTPSからHTTPへは何も送りません。指定が無いときの既定値でもありますが、OWASPは明示するよう勧めています。</p>
<p>URLに会員番号などを含むサイトでは、<code>no-referrer</code> や <code>same-origin</code> も選べます。ただし、Google Maps Platformの公式文書によると、この2つではRefererが送られず、Refererで制限したAPIキーが要求を拒否する場合があります。</p>

<h3>X-Frame-Options と frame-ancestors の関係</h3>
<p><a href="https://slt-inc.jp/glossary/x-frame-options/">X-Frame-Options</a>は、自サイトのページを他サイトの枠（iframe）の中に表示させない指示で、<a href="https://slt-inc.jp/glossary/clickjacking/">クリックジャッキング</a>を防ぎます。値は、すべての枠を拒否する <code>DENY</code> と、すべての親が同じオリジンのときだけ許す <code>SAMEORIGIN</code> の2つです。特定のサイトを許す <code>ALLOW-FROM</code> は廃止され、現在のブラウザはこの値を含むヘッダー全体を無視します。</p>
<p>特定のサイトにだけ埋め込みを許す方法は、CSPの <code>frame-ancestors 'self' https://partner.example.jp</code> のような指定です。CSPの仕様（<a href="https://www.w3.org/TR/CSP3/">W3C CSP Level 3</a>）は、強制モードのCSPに frame-ancestors があれば、X-Frame-Optionsを無視すると定めています。Chrome 146でも、<code>X-Frame-Options: DENY</code> より frame-ancestors の許可が優先されます。</p>
<p>新旧のブラウザに対応するため、2つは併記できます。WordPressは管理画面やカスタマイザーで自サイトを枠の中に表示し、本体も <code>SAMEORIGIN</code> を付けるため、サーバー側もSAMEORIGINにそろえます。</p>

<h3>Permissions-Policy</h3>
<p><a href="https://slt-inc.jp/glossary/permissions-policy/">Permissions-Policy</a>は、カメラ、マイク、位置情報などのブラウザ機能を、そのページと埋め込んだiframeで使えるかを決めます。値は機能ごとに、<code>()</code> で全面禁止、<code>(self)</code> で自サイトだけ、<code>(self "https://map.example.jp")</code> で指定のオリジンにも許可します。旧仕様のFeature-Policyの <code>camera 'none'</code> は、<code>camera=()</code> と書き換えます。</p>
<p>止めるのは、使っていない機能だけです。店舗検索で位置情報を使うなら <code>geolocation=(self)</code> にし、決済でPayment Request APIを使うなら <code>payment</code> は止めません。</p>

<h3>付けないヘッダーと、消すヘッダー</h3>
<p>X-XSS-Protectionは廃止されたヘッダーで、OWASPは付けないか、付けるなら <code>0</code> にするよう勧めています。古いブラウザのXSS検出機能が、安全なサイトにかえって<a href="https://slt-inc.jp/glossary/xss/">XSS</a>の弱点を生む場合があったためです。ChromiumがVersion 107で廃止したExpect-CTも、付ける必要はありません。</p>
<p>ServerとX-Powered-Byに出る版の表記は、Apacheならhttpd.confの <code>ServerTokens Prod</code>（.htaccessでは不可）で消します。nginxは <code>server_tokens off;</code>、PHPはphp.iniの <code>expose_php = Off</code> です。版を隠すだけでは安全にならないとApacheの公式文書も述べており、<a href="https://slt-inc.jp/article/wordpress-vulnerability-check/">WordPressの本体とプラグインの更新</a>のような更新作業を優先します。</p>

<h2>Apache、nginx、WordPress、Cloudflareの設定例</h2>
<p>段階1と2の4つのヘッダーに、HSTSの最初の値（max-age=300）を加えた設定例です。どの環境でも、404などのエラー応答とリダイレクトにもヘッダーが付く書き方を選ぶことが要点です。</p>

<h3>Apache（.htaccess、VirtualHost）</h3>
<pre class="slt-code"><code># .htaccess、またはHTTPSのVirtualHostに書く
&lt;IfModule mod_headers.c&gt;
  # アプリが同名のヘッダーを出しても1本になるよう、unsetとalways setを対にする
  Header unset X-Content-Type-Options
  Header always set X-Content-Type-Options "nosniff"
  Header unset Referrer-Policy
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header unset X-Frame-Options
  Header always set X-Frame-Options "SAMEORIGIN"
  Header unset Permissions-Policy
  Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
  Header unset Strict-Transport-Security
  Header always set Strict-Transport-Security "max-age=300"
  # PHPの版の表記を消す（PHPの動かし方で入る表が違うため2行とも書く）
  Header unset X-Powered-By
  Header always unset X-Powered-By
&lt;/IfModule&gt;</code></pre>
<p>Apacheの <code>Header</code> には、既定の「onsuccess」と「always」の2つの表があります。Apacheが自ら作る404やリダイレクト（RedirectやRewriteRuleの301）では、always の表しか使われず、always の無い指定は付きません（<a href="https://httpd.apache.org/docs/2.4/mod/mod_headers.html">mod_headersの公式文書</a>）。</p>
<p>PHPのヘッダーが入る表は動かし方で違い、mod_phpでは既定の表に、CGIやFastCGI（PHP-FPMなど）では always の表に入ります。<code>Header always set</code> だけではmod_phpでアプリの同名ヘッダーと2本並ぶため、例のように <code>Header unset</code> と対で書くと、どちらの方式でも1本になります。LiteSpeedなどApache互換のサーバーでは扱いが異なる場合があるため、設定後にcurlで本数を確かめます。</p>
<p>.htaccessの指定は、そのフォルダに届いた要求にだけ効き、VirtualHostやコントロールパネルで行うリダイレクトには付きません。HSTSは、変更できるならVirtualHostに書くのが確実です。mod_headersが無効な場合、<code>&lt;IfModule&gt;</code> で囲んだ指定は黙って無視され、囲まない指定は500エラーになります。</p>

<h3>nginx</h3>
<pre class="slt-code"><code># /etc/nginx/snippets/security-headers.conf（共通の指定を1か所にまとめる）
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Strict-Transport-Security "max-age=300" always;

# HTTPSのserverブロック（証明書などの設定は省略）
server {
    listen 443 ssl;
    server_name example.com;
    server_tokens off;
    include snippets/security-headers.conf;

    location /assets/ {
        add_header Cache-Control "public, max-age=2592000";
        # add_headerを書いた場所では上の指定が消えるため、読み込み直す
        include snippets/security-headers.conf;
    }
}</code></pre>
<p>nginxの <code>add_header</code> は、<code>always</code> が無いと200や301などの決まった応答にしか付かず、404や500には付きません（<a href="https://nginx.org/en/docs/http/ngx_http_headers_module.html">nginxの公式文書</a>）。また、下の階層に <code>add_header</code> が1つでもあると、上の階層の <code>add_header</code> はすべて引き継がれません。例の <code>/assets/</code> のように、キャッシュ用のヘッダーを足したlocationでセキュリティヘッダーが消えるのは、このためです。</p>
<p>対策は、共通のファイルを各locationで読み込み直すか、nginx 1.29.3以降（安定版は1.30.0以降）の <code>add_header_inherit merge;</code> をserverブロックに書く方法です。OSの標準パッケージは版が古いことがあるため、<code>nginx -v</code> で確かめてから選びます。アプリが出した同名のヘッダーは置き換わらずに残るので、PHP-FPMなら <code>fastcgi_hide_header X-Frame-Options;</code> のように隠します（リバースプロキシは <code>proxy_hide_header</code>）。</p>

<h3>WordPress</h3>
<p>サーバーの設定を変えられない場合は、WordPressの <code>wp_headers</code> フィルターで足せます。コードを <code>wp-content/mu-plugins/</code> の直下に置くと自動で読み込まれ、テーマの変更でも消えず、管理画面から無効にもできません。</p>
<pre class="slt-code"><code>&lt;?php
// wp-content/mu-plugins/security-headers.php として保存する
add_filter( 'wp_headers', function ( $headers ) {
    $headers['X-Content-Type-Options'] = 'nosniff';
    $headers['Referrer-Policy']        = 'strict-origin-when-cross-origin';
    $headers['X-Frame-Options']        = 'SAMEORIGIN';
    $headers['Permissions-Policy']     = 'camera=(), microphone=(), geolocation=()';
    return $headers;
} );</code></pre>
<p>このフィルターは、<a href="https://developer.wordpress.org/reference/hooks/wp_headers/">公式リファレンス</a>にあるとおりWP::send_headers()の中で適用され、効くのは公開ページの応答だけです。管理画面、ログイン画面、REST API、画像やCSSには付かないため、HSTSはサーバーかCDNで付けます。</p>
<p>WordPress 6.9以降は、管理画面とログイン画面に、本体が <code>X-Frame-Options: SAMEORIGIN</code> と <code>frame-ancestors 'self'</code> のCSPを付けます。サーバー側でCSPを付けるときは、この2つの画面でも値が食い違わないかの確認が必要です。</p>

<h3>Cloudflare</h3>
<p>Cloudflareでは、Rules Overviewの「Create rule」から「Response Header Transform Rule」を作ります。操作は、同名のヘッダーを上書きする「Set static」を選びます。「Add」は既存のヘッダーを残したまま足すため、オリジンの値と2本並びます。</p>
<p>HSTSは、Edge Certificatesの画面にある専用の設定で付けられます。マネージド変換の「Add security headers」は、OWASPが勧めない <code>X-XSS-Protection: 1; mode=block</code> や廃止済みのExpect-CTも付けるため、個別のルールで付ける方が推奨値にそろえやすくなります。</p>

<h2>HSTSの設定方法と、max-ageを延ばす手順</h2>
<p>HSTSは、HTTPSがサイト全体で安定してから、max-ageを5分、1週間、1か月と延ばし、最後に1年以上にします。HSTSを覚えたブラウザでは、証明書の期限切れなどのエラーのとき、利用者が警告を越えて進めなくなります。そのため、証明書の更新の自動化を先に済ませます。</p>
<p><a href="https://slt-inc.jp/glossary/hsts/">HSTS</a>を受け取ったブラウザは、受け取った時点からmax-ageの秒数だけそのホストを覚え、HTTPのURLもHTTPSに切り替えて接続します（<a href="https://www.rfc-editor.org/rfc/rfc6797">RFC 6797</a>）。HTTPの応答に付けたHSTSは無視されるため、HTTPSの応答に付けます。</p>
<ol class="slt-steps">
<li><strong>前提をそろえる</strong>全ページがHTTPSで表示され、<a href="https://slt-inc.jp/glossary/mixed-content/">混在コンテンツ</a>が無く、HTTPからHTTPSへ301で転送していることを確かめます。証明書の自動更新と期限の監視も整えます。期限の確かめ方は、<a href="https://slt-inc.jp/article/ssl-tls-certificate-check/">SSL/TLS証明書のチェック方法</a>で説明しています。</li>
<li><strong>サブドメインを含めるか決める</strong>includeSubDomainsは、社内向けを含むすべてのサブドメインがHTTPSで動く場合だけ付けます。付けるなら、登録窓口のhstspreload.orgが勧める手順のとおり、最初の5分の段階から付けて試します。</li>
<li><strong>max-age=300で配信する</strong>全ページと各サブドメインを開き、問い合わせ、決済、ログインまで動かします。</li>
<li><strong>1週間、1か月と延ばす</strong>604800、2592000の順に延ばします。各段階では、その値の期間が過ぎるまで待ってから次へ進みます。</li>
<li><strong>1年以上にする</strong>最終値は31536000（1年）以上にします。OWASPとhstspreload.orgの例は63072000（2年）です。</li>
</ol>
<pre class="slt-code"><code># 段階ごとの値（includeSubDomainsは、付けると決めた場合だけ）
Strict-Transport-Security: max-age=300; includeSubDomains
Strict-Transport-Security: max-age=604800; includeSubDomains
Strict-Transport-Security: max-age=2592000; includeSubDomains
Strict-Transport-Security: max-age=31536000; includeSubDomains</code></pre>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>preloadは付けません。hstspreload.org自身が『HSTSは推奨するが、HSTS preloadは推奨しない』と明記しています。ChromeやSafariはHSTSが無くてもHTTPの移動をHTTPSへ切り替えるため、preloadの上乗せの効果は小さいという説明です。</p><p>preloadを付けたヘッダーは、一覧への登録を求めているとみなされます。登録後の削除は、Chromeの更新で利用者に届くまで数か月かかり、他のブラウザでの反映は保証されません。</p></div>

<h2>CSPの設定例と、Report-Onlyからの段階導入</h2>
<p><a href="https://slt-inc.jp/glossary/csp/">CSP</a>は、まずContent-Security-Policy-Report-Onlyという名前で配信して違反を集め、正当な取得元を許可リストに足します。違反が出なくなったら、ヘッダー名をContent-Security-Policyに変えて強制します。Report-Onlyは読み込みを何も止めないので、本番のサイトで影響だけを測れるのが利点です。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 360"><title>CSPを段階的に強制へ移す流れ</title><desc>4つの段階が左から右へ並ぶ。1は観察で、Report-Onlyで止めずに違反を記録する。2は修正で、違反を見て許可を足す。3は強制で、ヘッダー名をCSPに変えて止める。4は強化で、nonceやハッシュで絞る。3から1へ戻る赤い破線は、壊れたらヘッダー名を戻すことを示す。下段は、1と2ではReport-Onlyだけを送り、3と4では強制のCSPに加えて次の案をReport-Onlyで送ることを示す。</desc><defs><marker id="f2-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker><marker id="f2-back" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#D00A0A"/></marker></defs><rect x="0" y="0" width="800" height="360" fill="#FFFFFF"/><path d="M492 95 V58 H102 V89" fill="none" stroke="#D00A0A" stroke-width="3" stroke-dasharray="10 7" marker-end="url(#f2-back)"/><text x="297" y="44" text-anchor="middle" font-size="22" fill="#10265A">壊れたらヘッダー名を戻す</text><rect x="20" y="95" width="165" height="165" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="102" y="136" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">①観察</text><text x="102" y="180" text-anchor="middle" font-size="22" fill="#10265A">Report-Only</text><text x="102" y="220" text-anchor="middle" font-size="22" fill="#10265A">止めずに記録</text><line x1="185" y1="178" x2="209" y2="178" stroke="#10265A" stroke-width="4" marker-end="url(#f2-arrow)"/><rect x="215" y="95" width="165" height="165" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="297" y="136" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">②修正</text><text x="297" y="180" text-anchor="middle" font-size="22" fill="#10265A">違反を見て</text><text x="297" y="220" text-anchor="middle" font-size="22" fill="#10265A">許可を足す</text><line x1="380" y1="178" x2="404" y2="178" stroke="#10265A" stroke-width="4" marker-end="url(#f2-arrow)"/><rect x="410" y="95" width="165" height="165" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="492" y="136" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">③強制</text><text x="492" y="180" text-anchor="middle" font-size="22" fill="#10265A">名前をCSPに</text><text x="492" y="220" text-anchor="middle" font-size="22" fill="#10265A">変えて止める</text><line x1="575" y1="178" x2="599" y2="178" stroke="#10265A" stroke-width="4" marker-end="url(#f2-arrow)"/><rect x="605" y="95" width="165" height="165" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="687" y="136" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">④強化</text><text x="687" y="180" text-anchor="middle" font-size="22" fill="#10265A">nonceや</text><text x="687" y="220" text-anchor="middle" font-size="22" fill="#10265A">ハッシュで絞る</text><rect x="20" y="286" width="360" height="56" rx="10" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="200" y="322" text-anchor="middle" font-size="22" fill="#10265A">送るのはReport-Only</text><rect x="410" y="286" width="360" height="56" rx="10" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="590" y="322" text-anchor="middle" font-size="22" fill="#10265A">強制＋次の案はReport-Only</text></svg><figcaption>図2 CSPは、Report-Onlyでの観察、許可リストの修正、強制への切り替え、nonceやハッシュによる強化の順に進めます。下段は、各段階で送るヘッダーです。強制の後に問題が出たら、ヘッダー名をReport-Onlyに戻します。</figcaption></figure>
<ol class="slt-steps">
<li><strong>Report-Onlyで配信する</strong>最初は、自サイト以外の取得元を違反として記録するだけの方針にします（下の設定例）。</li>
<li><strong>全ページを巡回して違反を集める</strong>トップ、記事、フォーム、決済、管理画面まで開き、Consoleの違反を記録します。</li>
<li><strong>許可リストを直す</strong>アクセス解析、フォント、地図、動画などの取得元を、必要なディレクティブにだけ足します。</li>
<li><strong>ヘッダー名を変えて強制する</strong>違反が出なくなったら、Content-Security-Policyに切り替えます。さらに厳しくする案は、Report-Onlyで同時に送って試せます。</li>
<li><strong>nonceかハッシュで厳しくする</strong>インラインスクリプトを許す <code>'unsafe-inline'</code> を外し、web.devが勧める厳格なCSPへ近づけます。</li>
</ol>
<pre class="slt-code"><code># Apache（行末の\は次の行へ続く印。\の後ろに空白を入れない）
Header always set Content-Security-Policy-Report-Only "default-src 'self'; \
    img-src 'self' data: https:; object-src 'none'; base-uri 'self'; \
    form-action 'self'; frame-ancestors 'self'"

# nginx（serverブロックに書く。長い値は変数に分けて組み立てる）
set $csp "default-src 'self'; img-src 'self' data: https:; ";
set $csp "${csp}object-src 'none'; base-uri 'self'; ";
set $csp "${csp}form-action 'self'; frame-ancestors 'self'";
add_header Content-Security-Policy-Report-Only $csp always;</code></pre>
<p>default-srcが代わりを務めるのは、script-srcやimg-srcなどの取得系の指定だけです。base-uri、form-action、frame-ancestorsは個別に書きます。<code>object-src 'none'</code> はプラグインによる埋め込みを止める指定で、web.devの推奨にも含まれる値です。</p>
<p>Chrome 146では、違反はConsoleに情報（Info）として表示され、末尾に『The policy is report-only』で始まる一文が付きます。強制に切り替えると同じ違反がエラーになり、末尾は『The action has been blocked.』に変わります。インラインスクリプトの違反に示される『sha256-…』の値をscript-srcに足すと、そのスクリプトだけを許可できます。</p>
<p>違反をサーバーに集めるには、受け口を <code>Reporting-Endpoints</code> ヘッダーで示し、ポリシーに <code>report-to</code> を足します。設定例は<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy-Report-Only">MDNのContent-Security-Policy-Report-Only</a>にあり、古いブラウザ向けに <code>report-uri</code> も併記しています。受け口には、ブラウザが送るJSONを保存する仕組みが別に要ります。</p>
<p>強制に切り替えた後は、web.devが勧める<a href="https://web.dev/articles/strict-csp">厳格なCSP</a>へ近づけます。web.devは、ドメインを並べる許可リスト方式は多くの構成で回避されうるとし、nonce（応答ごとの乱数）かハッシュで許可する方式を勧めています。nonceは暗号学的に安全な乱数（128ビット以上が望ましい）で、応答のたびに作り直します。</p>
<pre class="slt-code"><code># web.devが勧める厳格なCSP（{RANDOM}は応答ごとに作る乱数）
Content-Security-Policy: script-src 'nonce-{RANDOM}' 'strict-dynamic';
    object-src 'none'; base-uri 'none';

# HTML側は、許可するscriptタグに同じ値を付ける
&lt;script nonce="{RANDOM}" src="/js/app.js"&gt;&lt;/script&gt;</code></pre>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>script-srcに <code>'unsafe-inline'</code> を残すと、差し込まれたインラインスクリプトも実行できるため、XSSへの効果は大きく下がります。WordPressのように本体やプラグインがインラインスクリプトを出すサイトでは、最初は残すしかない場合もあります。その場合でも、frame-ancestors、form-action、base-uri、object-srcの制限は働きます。</p></div>

<h2>同じヘッダーが2本届いたときに起きること</h2>
<p>同名のヘッダーが2本届いたときの扱いはヘッダーごとに違い、HSTSは最初の1本だけ、CSPは両方が効いて厳しい側が勝ちます。X-Frame-Optionsは値が食い違うと、同じサイトの枠の中でも表示を拒否します。重複はエラーにならず黙って起きるため、確認の段階で本数を数えます。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>ヘッダー</th><th>2本届いたときの扱い</th><th>根拠</th></tr></thead><tbody>
<tr><td>Strict-Transport-Security</td><td>最初の1本だけを処理する</td><td>RFC 6797</td></tr>
<tr><td>Content-Security-Policy</td><td>両方を適用し、より厳しい制限が効く</td><td>MDN、Chrome 146の動作</td></tr>
<tr><td>X-Frame-Options</td><td>同じ値なら1本と同じ。DENYとSAMEORIGINが並ぶと、すべての枠で拒否</td><td>Chrome 146の動作</td></tr>
<tr><td>Referrer-Policy</td><td>カンマで並んだ値のうち、最後の有効な値を使う</td><td>MDN、Chrome 146の動作</td></tr>
<tr><td>Permissions-Policy</td><td>同じ機能の指定は、後に届いた方が有効</td><td>Chrome 146の動作</td></tr>
</tbody></table></div>
<p>根拠をChrome 146の動作とした行は、他のブラウザで扱いが異なる場合があります。重複を残さないことが、どのブラウザでも確実な対策です。</p>
<p>X-Frame-Optionsの値が食い違うと、Chrome 146はConsoleに次の例のように表示し、DENYとして扱います。</p>
<pre class="slt-code"><code>Refused to display 'https://example.com/' in a frame because it set multiple
'X-Frame-Options' headers with conflicting values ('DENY, SAMEORIGIN').
Falling back to 'deny'.</code></pre>
<p>主な原因は、アプリとサーバーによる二重の付与と、Apacheの <code>Header add</code> やCloudflareの「Add」のような追加の操作です。付ける場所を1つに絞り、操作はsetにそろえます。</p>

<h2>設定できたかをcurlと開発者ツールで確かめる</h2>
<p>確認は設定ファイルではなく、外から取った実際の応答で行います。トップページ、存在しないURL、HTTPSのリダイレクト、画像やCSS、ログイン画面の5種類で、各ヘッダーが1本ずつ付いていれば合格です。</p>
<pre class="slt-code"><code># ヘッダーだけを取得する（-IはHEADリクエスト）
curl -sI https://www.example.com/
# GETで取得し、応答ヘッダーだけを表示する
curl -s -D - -o /dev/null https://www.example.com/
# 404の応答にも付いているか
curl -sI https://www.example.com/no-such-page/
# wwwへ転送するリダイレクトに、HSTSが付いているか
curl -sI https://example.com/ | grep -i -E '^(HTTP|location|strict-transport)'
# 重複していないか（1なら合格）
curl -sI https://www.example.com/ | grep -ci '^x-frame-options:'
# Windows PowerShell 5.1は curl.exe と書き、findstrで絞る
curl.exe -sI https://www.example.com/ | findstr /i "x-frame-options"</code></pre>
<p>Windows PowerShell 5.1では <code>curl</code> がInvoke-WebRequestの別名のため、<code>.exe</code> まで書きます。HEADとGETで違う応答を返すサーバーもあるので、GETの結果も見ておくと確実です。</p>
<ul class="slt-check">
<li>トップページ（200）に、入れたヘッダーがそれぞれ1本ずつ付いている</li>
<li>存在しないURL（404）にも、同じヘッダーが付いている</li>
<li>wwwの有無をそろえる転送など、HTTPSのリダイレクトにHSTSが付いている</li>
<li>画像、CSS、JavaScriptにも付き、Content-Typeが種類どおりになっている</li>
<li>ログイン画面や管理画面で、X-Frame-OptionsやCSPの値が食い違っていない</li>
</ul>
<p>ブラウザでは、F12キーで開発者ツールを開き、Network（ネットワーク）タブで再読み込みします。先頭の文書を選んでHeaders（ヘッダー）のResponse Headers（レスポンス ヘッダー）を見て、CSPの違反はConsole（コンソール）タブで確かめます。</p>
<p>主なヘッダーをまとめて確かめるには、無料の<a href="https://slt-inc.jp/service/security-checker/">Webサイトのセキュリティチェック</a>も使えます。URLを入れると、HSTSの有無と有効期間、サブドメインへの適用、CSP、X-Frame-Optionsなど6種類のヘッダーを確認し、AからFの判定と直し方を表示します。ヘッダー以外の確認項目は、<a href="https://slt-inc.jp/article/website-security-check-items/">Webサイトのセキュリティチェック項目の一覧</a>にまとめています。</p>

<h2>表示や機能が壊れたときの戻し方</h2>
<p>CSP、X-Frame-Options、Permissions-Policyは、設定を戻せば次の読み込みから元に戻ります。HSTSだけは、ブラウザが覚えた期間が残るため、すぐには戻せません。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>ヘッダー</th><th>主な症状</th><th>戻し方</th></tr></thead><tbody>
<tr><td>Content-Security-Policy</td><td>アクセス解析、地図、フォームが動かない</td><td>ヘッダー名をReport-Onlyに戻し、許可リストを直す</td></tr>
<tr><td>X-Frame-Options、frame-ancestors</td><td>提携先の枠の中やプレビューが表示されない</td><td>許す親のオリジンだけをframe-ancestorsに足す</td></tr>
<tr><td>Permissions-Policy</td><td>位置情報やカメラが動かない（Consoleに『Permissions policy violation』）</td><td>その機能を <code>(self)</code> などの許可に変える</td></tr>
<tr><td>X-Content-Type-Options</td><td>JavaScriptやCSSが読み込まれない（Consoleに『strict MIME type checking is enabled』）</td><td>nosniffは外さず、Content-Typeを直す</td></tr>
<tr><td>Strict-Transport-Security</td><td>証明書のエラーで、利用者がページに進めない</td><td>証明書を直す（下の注意を参照）</td></tr>
</tbody></table></div>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>HSTSを外すだけでは、ブラウザの記憶は期限まで残ります。HTTPSの応答で <code>max-age=0</code> を返すと、そのブラウザが次にHTTPSで接続したときに記憶が消えますが、HTTPでは消せず、再訪しない利用者には届きません。CloudflareのHSTSも同じで、HSTSを無効にして元のmax-ageの期間が過ぎる前にHTTPSをやめると、サイトに接続できなくなると公式文書が警告しています。</p></div>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>試験で自分のChromeに残った記憶は、<code>chrome://net-internals/#hsts</code> の「Delete domain security policies」にドメインを入れて消せます。消せるのはそのブラウザの記憶だけで、プリロード済みの登録は消せません。CDNやページキャッシュが応答を保存している場合は、キャッシュを消すまで古いヘッダーが届きます。</p></div>
<p>ヘッダーの設定を1つのファイルにまとめて変更の履歴を残すと、1行の変更で戻せます。影響範囲を見極めにくい場合や、原因のヘッダーを切り分けられない場合は、<a href="https://slt-inc.jp/inquiry/">診断や設定についての相談窓口</a>からお問い合わせください。</p>

<h2>よくある質問</h2>
<div class="slt-faq"><h3>セキュリティヘッダーは検索順位に影響しますか？</h3><p>順位への影響を示すGoogleの公式な説明は見当たりません。Googleの検索セントラルは、ページエクスペリエンスの確認項目にHTTPSを挙げていますが、個々のセキュリティヘッダーには触れていません（2026年10月時点）。一方、CSPの誤設定で問い合わせフォームや計測タグが止まると、成果に直接響きます。</p></div>
<div class="slt-faq"><h3>.htaccessに書いたのに反映されません。どこを確かめればよいですか？</h3><p>サーバーの種類、上書きの許可、モジュール、キャッシュの順に確かめます。nginxは.htaccessを読まず、ApacheでもHeaderの指定には、<code>AllowOverride FileInfo</code> の許可とmod_headersの有効化が必要です。設定が正しいのに付かないときは、CDNやページキャッシュを消してから curl で確かめます。</p></div>
<div class="slt-faq"><h3>metaタグでセキュリティヘッダーを設定できますか？</h3><p>一部だけできます。CSPは <code>&lt;meta http-equiv="Content-Security-Policy"&gt;</code> で設定できますが、frame-ancestors、report-uri、sandboxは効かず、metaより前にある内容にも適用されません。Referrer-Policyは <code>&lt;meta name="referrer"&gt;</code> で指定でき、HSTS、X-Frame-Options、Content-Security-Policy-Report-Onlyはmetaに書いても無視されます。</p></div>
<div class="slt-faq"><h3>WordPressでCSPのnonceは使えますか？</h3><p>条件付きで使えます。WordPress 5.7以降は、<code>wp_script_attributes</code> と <code>wp_inline_script_attributes</code> のフィルターで、本体の関数が出力するscriptタグにnonce属性を足せます。ただし、HTMLを丸ごと保存するページキャッシュとは両立せず、プラグインが直接書き出すscriptタグにも付かないため、Report-Onlyで漏れを確かめます。</p></div>
<div class="slt-faq"><h3>ステージング環境や社内システムのサブドメインにHSTSは影響しますか？</h3><p>影響するかどうかは、includeSubDomainsをどのホストが返すかで決まります。RFC 6797では、includeSubDomainsは、ヘッダーを返したホストとその下のドメインに効きます。</p><p>www.example.jpだけが返すなら、dev.example.jpには効きません。example.jpが返すと、HTTPSに対応していない社内向けのサブドメインも、ブラウザで開けなくなります。</p></div>
<div class="slt-faq"><h3>OWASPが挙げるCOOP、COEP、CORPも入れるべきですか？</h3><p>この記事の6種類を整えてから検討します。OWASPが挙げるCross-Origin-Embedder-Policyの <code>require-corp</code> は、他のオリジンが読み込みを許していない画像や埋め込みを、読み込めなくする指定です。外部サービスを多く使うサイトほど影響が大きいため、1つずつ表示を確かめながら入れます。</p></div>
<div class="slt-faq"><h3>Permissions-Policyは、SafariやFirefoxでも効きますか？</h3><p>2026年10月時点では効きません。MDNの互換性データでは、このヘッダーに対応しているのはChromeやEdgeなどのChromium系で、FirefoxとSafariは未対応です。未対応のブラウザでは指定が無視されるだけなので、対応ブラウザでの補助の対策として入れます。</p></div>

<h2>関連記事</h2>
<div class="slt-related">
<a class="slt-related-item" href="https://slt-inc.jp/article/website-security-check-items/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24854-security-checklist-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24854-security-checklist-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24854-security-checklist-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">Webサイトのセキュリティチェック項目30選｜確認方法つき一覧表</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/ssl-tls-certificate-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24877-ssl-tls-check-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24877-ssl-tls-check-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24877-ssl-tls-check-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">SSL/TLS証明書のチェック方法｜有効期限・チェーン・通信方式の確認手順</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/wordpress-vulnerability-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">WordPressの脆弱性を確認する方法｜本体・プラグインの更新と対処の手順</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">簡易チェックと脆弱性診断の違い｜無料ツールでできることと、専門業者が必要な場面</span></a>
</div>
<div class="slt-cta"><p class="slt-cta-title">設定したヘッダーを無料で確かめる</p><p>URLを入力すると、HSTS、CSP、X-Frame-Optionsなど6種類のヘッダーの有無に加え、証明書やCookieの属性もまとめて確認できます。メールアドレスの登録は要りません。</p><a class="slt-cta-btn" href="https://slt-inc.jp/service/security-checker/">無料でWebサイトをチェックする</a></div>
</div>
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "セキュリティヘッダーは検索順位に影響しますか？", "acceptedAnswer": {"@type": "Answer", "text": "順位への影響を示すGoogleの公式な説明は見当たりません。Googleの検索セントラルは、ページエクスペリエンスの確認項目にHTTPSを挙げていますが、個々のセキュリティヘッダーには触れていません（2026年10月時点）。一方、CSPの誤設定で問い合わせフォームや計測タグが止まると、成果に直接響きます。"}}, {"@type": "Question", "name": ".htaccessに書いたのに反映されません。どこを確かめればよいですか？", "acceptedAnswer": {"@type": "Answer", "text": "サーバーの種類、上書きの許可、モジュール、キャッシュの順に確かめます。nginxは.htaccessを読まず、ApacheでもHeaderの指定には、AllowOverride FileInfo の許可とmod_headersの有効化が必要です。設定が正しいのに付かないときは、CDNやページキャッシュを消してから curl で確かめます。"}}, {"@type": "Question", "name": "metaタグでセキュリティヘッダーを設定できますか？", "acceptedAnswer": {"@type": "Answer", "text": "一部だけできます。CSPは <meta http-equiv=\"Content-Security-Policy\"> で設定できますが、frame-ancestors、report-uri、sandboxは効かず、metaより前にある内容にも適用されません。Referrer-Policyは <meta name=\"referrer\"> で指定でき、HSTS、X-Frame-Options、Content-Security-Policy-Report-Onlyはmetaに書いても無視されます。"}}, {"@type": "Question", "name": "WordPressでCSPのnonceは使えますか？", "acceptedAnswer": {"@type": "Answer", "text": "条件付きで使えます。WordPress 5.7以降は、wp_script_attributes と wp_inline_script_attributes のフィルターで、本体の関数が出力するscriptタグにnonce属性を足せます。ただし、HTMLを丸ごと保存するページキャッシュとは両立せず、プラグインが直接書き出すscriptタグにも付かないため、Report-Onlyで漏れを確かめます。"}}, {"@type": "Question", "name": "ステージング環境や社内システムのサブドメインにHSTSは影響しますか？", "acceptedAnswer": {"@type": "Answer", "text": "影響するかどうかは、includeSubDomainsをどのホストが返すかで決まります。RFC 6797では、includeSubDomainsは、ヘッダーを返したホストとその下のドメインに効きます。"}}, {"@type": "Question", "name": "OWASPが挙げるCOOP、COEP、CORPも入れるべきですか？", "acceptedAnswer": {"@type": "Answer", "text": "この記事の6種類を整えてから検討します。OWASPが挙げるCross-Origin-Embedder-Policyの require-corp は、他のオリジンが読み込みを許していない画像や埋め込みを、読み込めなくする指定です。外部サービスを多く使うサイトほど影響が大きいため、1つずつ表示を確かめながら入れます。"}}, {"@type": "Question", "name": "Permissions-Policyは、SafariやFirefoxでも効きますか？", "acceptedAnswer": {"@type": "Answer", "text": "2026年10月時点では効きません。MDNの互換性データでは、このヘッダーに対応しているのはChromeやEdgeなどのChromium系で、FirefoxとSafariは未対応です。未対応のブラウザでは指定が無視されるだけなので、対応ブラウザでの補助の対策として入れます。"}}]}</script><p>The post <a href="https://slt-inc.jp/article/security-headers-setup/">セキュリティヘッダーの設定方法｜HSTS・CSPの設定例つき</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SSL/TLS証明書のチェック方法&#124;有効期限・チェーン・通信方式の確認手順</title>
		<link>https://slt-inc.jp/article/ssl-tls-certificate-check/</link>
		
		<dc:creator><![CDATA[slt]]></dc:creator>
		<pubDate>Thu, 24 Sep 2026 05:08:00 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[記事]]></category>
		<category><![CDATA[CSP]]></category>
		<category><![CDATA[HSTS]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[SSL/TLS]]></category>
		<category><![CDATA[Webサイトセキュリティ]]></category>
		<category><![CDATA[セキュリティチェック]]></category>
		<category><![CDATA[セキュリティ対策]]></category>
		<guid isPermaLink="false">https://slt-inc.jp/security/ssl-tls-certificate-check/</guid>

					<description><![CDATA[<p><a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;SSL/TLS&#35388;&#26126;&#26360;&#12392;&#12399;SSL/TLS&#35388;&#26126;&#26360;&#12399;&#12289;&#12469;&#12452;&#12488;&#12364;&#12289;&#12381;&#12398;&#12489;&#12513;&#12452;&#12531;&#12398;&#27491;&#24403;&#12394;&#25345;&#12385;&#20027;&#12398;&#12418;&#12398;&#12391;&#12354;&#12427;&#12371;&#12392;&#12434;&#12502;&#12521;&#12454;&#12470;&#12395;&#35388;&#26126;&#12375;&#12289;&#36890;&#20449;&#12398;&#26263;&#21495;&#21270;&#12395;&#20351;&#12358;&#37749;&#12434;&#28193;&#12377;&#12383;&#12417;&#12398;&#12487;&#12472;&#12479;&#12523;&#35388;&#26126;&#26360;&#12391;&#12377;&#12290;&#35469;&#35388;&#23616;(CA)&#12364;&#30330;&#34892;&#12375;&#12414;&#12377;&#12290;&#12300;SSL&#35388;&#26126;&#26360;&#12301;&#12399;&#36890;&#31216;&#12391;&#12289;&#29694;&#22312;&#20351;&#12431;&#12428;&#12390;&#12356;&#12427;&#26263;&#21495;&#21270;&#12398;&#20181;&#32068;&#12415;&#12399;TLS&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;SSL/TLS&#35388;&#26126;&#26360;&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;&#35388;&#26126;&#26360;&#12364;&#12394;&#12356;&#12289;&#12414;&#12383;&#12399;&#26399;&#38480;&#12364;&#20999;&#12428;&#12390;&#12356;&#12427;&#12392;&#12289;&#12502;&#12521;&#12454;&#12470;&#12399;&#12300;&#25509;&#32154;&#12364;&#12503;&#12521;&#12452;&#12505;&#12540;&#12488;&#12391;&#12399;&#12354;&#12426;&#12414;&#12379;&#12435;&#12301;&#12392;&#12356;&#12387;&#12383;&#20840;&#30011;&#38754;&#12398;&#35686;&#21578;&#12434;&#20986;&#12375;&#12289;&#22810;&#12367;&#12398;&#35370;&#21839;&#32773;&#12399;&#12381;&#12371;&#12391;&#38626;&#12428;&#12414;&#12377;&#12290;&#12501;&#12457;&#12540;&#12512;&#12420;&#12525;&#12464;&#12452;&#12531;&#12398;&#20837;&#21147;&#20869;&#23481;&#12418;&#12289;&#26263;&#21495;&#21270;&#12373;&#12428;&#12378;&#12395;&#36865;&#12425;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#35388;&#26126;&#26360;&#12398;&#12488;&#12521;&#12502;&#12523;&#12391;&#12418;&#12387;&#12392;&#12418;&#22810;&#12356;&#12398;&#12399;&#12289;&#26356;&#26032;&#12398;&#22833;&#24565;&#12395;&#12424;&#12427;&#26399;&#38480;&#20999;&#12428;&#12391;&#12377;&#12290;&#26399;&#38480;&#20999;&#12428;&#12391;&#12399;&#12289;&#12469;&#12452;&#12488;&#12384;&#12369;&#12391;&#12394;&#12367;&#12289;&#21516;&#12376;&#35388;&#26126;&#26360;&#12434;&#20351;&#12358;API&#12420;&#12513;&#12540;&#12523;&#37197;&#20449;&#12394;&#12393;&#12398;&#36890;&#20449;&#12364;&#27490;&#12414;&#12427;&#12371;&#12392;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;SSL/TLS&#35388;&#26126;&#26360;&#12398;&#20181;&#32068;&#12415;&#35388;&#26126;&#26360;&#12395;&#12399;&#12289;&#23550;&#35937;&#12398;&#12489;&#12513;&#12452;&#12531;&#21517;(SAN)&#12289;&#30330;&#34892;&#32773;&#12289;&#26377;&#21177;&#26399;&#38291;&#12289;&#20844;&#38283;&#37749;&#12289;CA&#12398;&#32626;&#21517;&#12364;&#20837;&#12387;&#12390;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12399;&#12289;&#12469;&#12540;&#12496;&#12540;&#35388;&#26126;&#26360;&#12289;&#20013;&#38291;&#35388;&#26126;&#26360;&#12289;&#12502;&#12521;&#12454;&#12470;&#12395;&#20869;&#34101;&#12373;&#12428;&#12383;&#12523;&#12540;&#12488;&#35388;&#26126;&#26360;&#12398;&#38918;&#12395;&#12289;&#32626;&#21517;&#12398;&#12388;&#12394;&#12364;&#12426;&#12434;&#26908;&#35388;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#26908;&#35388;&#12398;&#31278;&#39006;&#12399;&#12289;&#12489;&#12513;&#12452;&#12531;&#12398;&#31649;&#29702;&#27177;&#38480;&#12384;&#12369;&#12434;&#30906;&#35469;&#12377;&#12427;DV&#12289;&#32068;&#32340;&#12398;&#23455;&#22312;&#12418;&#30906;&#35469;&#12377;&#12427;OV&#12289;EV&#12398;3&#12388;&#12391;&#12377;&#12290;&#26263;&#21495;&#21270;&#12398;&#24375;&#24230;&#12399;&#12289;&#12393;&#12428;&#12418;&#22793;&#12431;&#12426;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#20844;&#30340;&#12395;&#20449;&#38972;&#12373;&#12428;&#12427;&#35388;&#26126;&#26360;&#12398;&#26368;&#38263;&#26377;&#21177;&#26399;&#38291;&#12399;&#12289;CA/Browser Forum&#12398;&#27770;&#23450;&#12395;&#12424;&#12426;&#12289;2026&#24180;3&#26376;&#12363;&#12425;2029&#24180;3&#26376;&#12395;&#12363;&#12369;&#12390;&#12289;398&#26085;&#12363;&#12425;47&#26085;&#12408;&#27573;&#38542;&#30340;&#12395;&#30701;&#12367;&#12394;&#12426;&#12414;&#12377;&#12290;&#25163;&#20316;&#26989;&#12398;&#26356;&#26032;&#12391;&#12399;&#36939;&#29992;&#12364;&#22238;&#12425;&#12394;&#12367;&#12394;&#12427;&#12383;&#12417;&#12289;&#33258;&#21205;&#26356;&#26032;&#12364;&#21069;&#25552;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;SSL/TLS&#35388;&#26126;&#26360;&#12398;&#30906;&#35469;&#26041;&#27861;&#12502;&#12521;&#12454;&#12470;&#12398;&#12450;&#12489;&#12524;&#12473;&#12496;&#12540;&#12398;&#37749;&#12398;&#12450;&#12452;&#12467;&#12531;&#12363;&#12425;&#12289;&#35388;&#26126;&#26360;&#12398;&#30330;&#34892;&#32773;&#12392;&#26377;&#21177;&#26399;&#38480;&#12434;&#30906;&#35469;&#12391;&#12365;&#12414;&#12377;&#12290;&#12467;&#12510;&#12531;&#12489;&#12391;&#12399;&#27425;&#12398;&#12392;&#12362;&#12426;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;echo &#124; openssl s_client -connect example.com:443 -servername example.com 2&#38;gt;/dev/null &#124; openssl x509 -noout -subject -issuer -dates -ext subjectAltName&#38;lt;/code&#38;gt; 30&#26085;&#20197;&#20869;&#12395;&#20999;&#12428;&#12427;&#12363;&#12393;&#12358;&#12363;&#12399;&#12289;&#27425;&#12398;&#12467;&#12510;&#12531;&#12489;&#12391;&#21028;&#23450;&#12391;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;echo &#124; openssl s_client -connect example.com:443 -servername example.com 2&#38;gt;/dev/null &#124; openssl x509 -noout -checkend 2592000&#38;lt;/code&#38;gt; &#12300;Certificate will not expire&#12301;&#12392;&#20986;&#12428;&#12400;&#12289;30&#26085;&#20197;&#19978;&#12398;&#20313;&#35029;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;SSL/TLS&#35388;&#26126;&#26360;&#12398;&#35373;&#23450;&#20363;&#28961;&#26009;&#12391;&#33258;&#21205;&#26356;&#26032;&#12391;&#12365;&#12427;Let&#38;#039;s Encrypt&#12434;&#12289;certbot&#12391;&#23566;&#20837;&#12377;&#12427;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;sudo certbot --nginx -d example.com -d www.example.comsudo certbot renew --dry-run&#38;lt;/code&#38;gt; Apache&#12398;&#22580;&#21512;&#12399;&#12289;&#38;lt;code&#38;gt;--nginx&#38;lt;/code&#38;gt; &#12434; &#38;lt;code&#38;gt;--apache&#38;lt;/code&#38;gt; &#12395;&#26367;&#12360;&#12414;&#12377;&#12290;2&#34892;&#30446;&#12399;&#12289;&#33258;&#21205;&#26356;&#26032;&#12364;&#21205;&#12367;&#12363;&#12398;&#35430;&#39443;&#12391;&#12377;&#12290;&#35388;&#26126;&#26360;&#12501;&#12449;&#12452;&#12523;&#12434;&#33258;&#20998;&#12391;&#25351;&#23450;&#12377;&#12427;&#22580;&#21512;&#12399;&#12289;&#20013;&#38291;&#35388;&#26126;&#26360;&#12434;&#21547;&#12416; &#38;lt;code&#38;gt;fullchain.pem&#38;lt;/code&#38;gt; &#12434;&#20351;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;nginx&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;&#38;lt;/code&#38;gt; Apache&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;SSLCertificateFile    /etc/letsencrypt/live/example.com/fullchain.pemSSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem&#38;lt;/code&#38;gt; WordPress&#12391;&#12399;&#12289;&#35388;&#26126;&#26360;&#33258;&#20307;&#12399;&#12469;&#12540;&#12496;&#12540;&#20596;&#12391;&#35373;&#23450;&#12375;&#12414;&#12377;&#12290;&#31649;&#29702;&#30011;&#38754;&#12398;&#12300;&#35373;&#23450;&#12301;&#12300;&#19968;&#33324;&#12301;&#12391;&#12289;&#12469;&#12452;&#12488;&#12450;&#12489;&#12524;&#12473;&#12434; &#38;lt;code&#38;gt;https://&#38;lt;/code&#38;gt; &#12395;&#22793;&#26356;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;&#38;lt;code&#38;gt;www&#38;lt;/code&#38;gt; &#12354;&#12426;&#12392;&#28961;&#12375;&#12398;&#29255;&#26041;&#12384;&#12369;&#12364;&#23550;&#35937;&#12395;&#12394;&#12387;&#12390;&#12356;&#12427;&#12392;&#12289;&#12418;&#12358;&#19968;&#26041;&#12391;&#12456;&#12521;&#12540;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#12527;&#12452;&#12523;&#12489;&#12459;&#12540;&#12489;&#35388;&#26126;&#26360;(&#38;lt;code&#38;gt;*.example.com&#38;lt;/code&#38;gt;)&#12399;&#12289;&#38;lt;code&#38;gt;example.com&#38;lt;/code&#38;gt; &#33258;&#20307;&#12420;&#12289;&#38;lt;code&#38;gt;a.b.example.com&#38;lt;/code&#38;gt; &#12398;&#12424;&#12358;&#12394;2&#38542;&#23652;&#30446;&#12395;&#12399;&#20351;&#12360;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;&#20013;&#38291;&#35388;&#26126;&#26360;&#12434;&#20837;&#12428;&#24536;&#12428;&#12427;&#12392;&#12289;&#19968;&#37096;&#12398;&#31471;&#26411;&#12420;&#12450;&#12503;&#12522;&#12384;&#12369;&#12391;&#12456;&#12521;&#12540;&#12395;&#12394;&#12426;&#12289;&#25163;&#20803;&#12398;&#12502;&#12521;&#12454;&#12470;&#12391;&#12399;&#27671;&#12389;&#12369;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;&#33258;&#21205;&#26356;&#26032;&#12434;&#35373;&#23450;&#12375;&#12390;&#12418;&#12289;&#26356;&#26032;&#12398;&#22833;&#25943;&#12395;&#12399;&#27671;&#12389;&#12369;&#12414;&#12379;&#12435;&#12290;&#26377;&#21177;&#26399;&#38480;&#12398;&#30435;&#35222;&#12434;&#21029;&#12395;&#29992;&#24847;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#26356;&#26032;&#12398;&#36890;&#30693;&#12513;&#12540;&#12523;&#12398;&#23451;&#20808;&#12364;&#12289;&#36864;&#32887;&#12375;&#12383;&#25285;&#24403;&#32773;&#12398;&#12414;&#12414;&#12395;&#12394;&#12387;&#12390;&#12356;&#12394;&#12356;&#12363;&#12434;&#30906;&#35469;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#31192;&#23494;&#37749;&#12434;&#28431;&#12425;&#12375;&#12383;&#21487;&#33021;&#24615;&#12364;&#12354;&#12427;&#22580;&#21512;&#12399;&#12289;&#35388;&#26126;&#26360;&#12398;&#22833;&#21177;&#12392;&#20877;&#30330;&#34892;&#12364;&#24517;&#35201;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12391;&#30906;&#35469;&#12377;&#12427;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12399;&#12289;&#35388;&#26126;&#26360;&#12398;&#26377;&#21177;&#26399;&#38480;&#12289;&#12489;&#12513;&#12452;&#12531;&#21517;&#12392;&#12398;&#19968;&#33268;&#12289;&#33258;&#24049;&#32626;&#21517;&#12420;&#20013;&#38291;&#35388;&#26126;&#26360;&#12398;&#19981;&#36275;&#12289;&#37749;&#12398;&#24375;&#24230;&#12394;&#12393;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;&#26399;&#38480;&#12364;&#36817;&#12356;&#22580;&#21512;&#12399;&#12289;&#27531;&#12426;&#26085;&#25968;&#12418;&#31034;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;TLS&#38;lt;br/&#38;gt;HSTS&#38;lt;br/&#38;gt;&#28151;&#22312;&#12467;&#12531;&#12486;&#12531;&#12484;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#12469;&#12452;&#12488;&#12398;&#35373;&#23450;&#12434;&#28961;&#26009;&#12391;&#30906;&#35469;&#12377;&#12427;&#12469;&#12452;&#12488;&#12398;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12384;&#12369;&#12391;&#12289;SSL/TLS&#35388;&#26126;&#26360; &#12394;&#12393;&#12398;&#35373;&#23450;&#29366;&#27841;&#12434;&#35386;&#26029;&#12391;&#12365;&#12414;&#12377;&#12290;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12300;Security Checker X&#12301;&#12399;&#12289;&#30331;&#37682;&#12394;&#12375;&#12391;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#60;/div&#62;"  href="https://slt-inc.jp/glossary/ssl-tls-certificate/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>SSL/TLS&#35388;&#26126;&#26360;</a>&#12398;&#26377;&#21177;&#26399;&#38480;&#12289;&#12507;&#12473;&#12488;&#21517;(SAN)&#12289;&#20013;&#38291;&#35388;&#26126;&#26360;&#12398;&#12481;&#12455;&#12540;&#12531;&#12289;<a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;TLS&#12392;&#12399;TLS(Transport Layer Security)&#12399;&#12289;&#12452;&#12531;&#12479;&#12540;&#12493;&#12483;&#12488;&#12398;&#36890;&#20449;&#12434;&#26263;&#21495;&#21270;&#12375;&#12289;&#30423;&#32884;&#12289;&#25913;&#12374;&#12435;&#12289;&#12394;&#12426;&#12377;&#12414;&#12375;&#12363;&#12425;&#23432;&#12427;&#36890;&#20449;&#12503;&#12525;&#12488;&#12467;&#12523;&#12391;&#12377;&#12290;SSL&#12398;&#24460;&#32153;&#12395;&#12354;&#12383;&#12426;&#12414;&#12377;&#12290;URL&#12364; &#38;lt;code&#38;gt;https://&#38;lt;/code&#38;gt; &#12391;&#22987;&#12414;&#12427;&#12398;&#12399;&#12289;HTTP&#12398;&#36890;&#20449;&#12434;TLS&#12398;&#19978;&#12391;&#34892;&#12387;&#12390;&#12356;&#12427;&#12392;&#12356;&#12358;&#24847;&#21619;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;TLS&#12398;&#35373;&#23450;&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;TLS&#12395;&#12399;&#29256;&#12364;&#12354;&#12426;&#12289;&#21476;&#12356;&#29256;&#12399;&#25915;&#25731;&#25163;&#27861;&#12364;&#30693;&#12425;&#12428;&#12390;&#12356;&#12414;&#12377;&#12290;&#12469;&#12540;&#12496;&#12540;&#12364;&#21476;&#12356;&#29256;&#12434;&#21463;&#12369;&#20184;&#12369;&#12383;&#12414;&#12414;&#12384;&#12392;&#12289;&#36890;&#20449;&#30456;&#25163;&#12395;&#12424;&#12387;&#12390;&#12399;&#12289;&#24369;&#12356;&#26041;&#24335;&#12391;&#26263;&#21495;&#21270;&#12373;&#12428;&#12414;&#12377;&#12290;SSL 3.0&#12395;&#12399;&#12289;&#36890;&#20449;&#20869;&#23481;&#12398;&#19968;&#37096;&#12364;&#21462;&#12426;&#20986;&#12373;&#12428;&#12427;&#12300;POODLE&#12301;&#12392;&#21628;&#12400;&#12428;&#12427;&#25915;&#25731;&#12364;2014&#24180;&#12395;&#20844;&#34920;&#12373;&#12428;&#12414;&#12375;&#12383;&#12290;&#38;lt;br/&#38;gt;&#12463;&#12524;&#12472;&#12483;&#12488;&#12459;&#12540;&#12489;&#24773;&#22577;&#12434;&#25201;&#12358;&#12469;&#12452;&#12488;&#12391;&#12399;&#12289;&#26989;&#30028;&#22522;&#28310;&#12398;PCI DSS&#12418;&#12289;&#21476;&#12356;&#29256;&#12398;&#28961;&#21177;&#21270;&#12434;&#27714;&#12417;&#12390;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;TLS&#12398;&#20181;&#32068;&#12415;&#38;lt;ol&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12364;&#12289;&#23550;&#24540;&#12377;&#12427;TLS&#12398;&#29256;&#12392;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12398;&#19968;&#35239;&#12434;&#12469;&#12540;&#12496;&#12540;&#12395;&#36865;&#12427;&#12290;&#38;lt;br/&#38;gt;&#12469;&#12540;&#12496;&#12540;&#12364;&#12289;&#20351;&#12358;&#29256;&#12392;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12434;&#36984;&#12403;&#12289;&#35388;&#26126;&#26360;&#12434;&#36865;&#12427;&#12290;&#38;lt;br/&#38;gt;&#21452;&#26041;&#12364;&#37749;&#20132;&#25563;&#12391;&#12289;&#12381;&#12398;&#36890;&#20449;&#12384;&#12369;&#12398;&#20849;&#36890;&#37749;&#12434;&#20316;&#12427;&#12290;&#38;lt;br/&#38;gt;&#20197;&#38477;&#12398;&#36890;&#20449;&#12399;&#12289;&#20849;&#36890;&#37749;&#12391;&#26263;&#21495;&#21270;&#12373;&#12428;&#12427;&#12290;&#38;lt;br/&#38;gt;&#38;lt;/ol&#38;gt;&#38;lt;table&#38;gt;&#38;lt;thead&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;th&#38;gt;&#29256;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#29366;&#27841;&#38;lt;/th&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/thead&#38;gt;&#38;lt;tbody&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;SSL 2.0&#12289;SSL 3.0&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#33030;&#24369;&#24615;&#12364;&#30693;&#12425;&#12428;&#12390;&#12362;&#12426;&#12289;&#20351;&#29992;&#31105;&#27490;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;TLS 1.0&#12289;1.1&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;2021&#24180;&#12395;RFC 8996&#12391;&#38750;&#25512;&#22888;&#12290;&#20027;&#35201;&#12502;&#12521;&#12454;&#12470;&#12418;&#23550;&#24540;&#12434;&#32066;&#20102;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;TLS 1.2&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#29694;&#22312;&#12418;&#24195;&#12367;&#20351;&#12431;&#12428;&#12427;&#12290;&#35373;&#23450;&#27425;&#31532;&#12391;&#23433;&#20840;&#12395;&#20351;&#12360;&#12427;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;TLS 1.3&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#26368;&#26032;&#12398;&#29256;(RFC 8446)&#12290;&#24369;&#12356;&#26041;&#24335;&#12364;&#20181;&#27096;&#12363;&#12425;&#21462;&#12426;&#38500;&#12363;&#12428;&#12289;&#25509;&#32154;&#12418;&#36895;&#12356;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;TLS&#12398;&#30906;&#35469;&#26041;&#27861;&#12469;&#12540;&#12496;&#12540;&#12364;&#29305;&#23450;&#12398;&#29256;&#12434;&#21463;&#12369;&#20184;&#12369;&#12427;&#12363;&#12399;&#12289;&#29256;&#12434;&#25351;&#23450;&#12375;&#12390;&#25509;&#32154;&#12375;&#12390;&#35519;&#12409;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;openssl s_client -connect example.com:443 -servername example.com -tls1_2 &#38;amp;lt;/dev/null 2&#38;amp;gt;/dev/null &#124; grep -E &#38;#039;Protocol&#124;Cipher&#38;#039;openssl s_client -connect example.com:443 -servername example.com -tls1_3 &#38;amp;lt;/dev/null 2&#38;amp;gt;/dev/null &#124; grep -E &#38;#039;Protocol&#124;Cipher&#38;#039;&#38;lt;/code&#38;gt; &#12300;Cipher is (NONE)&#12301;&#12392;&#20986;&#12428;&#12400;&#12289;&#12381;&#12398;&#29256;&#12399;&#21463;&#12369;&#20184;&#12369;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;&#29256;&#12392;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12434;&#19968;&#35239;&#12377;&#12427;&#12395;&#12399;&#12289;&#38;lt;code&#38;gt;nmap --script ssl-enum-ciphers -p 443 example.com&#38;lt;/code&#38;gt; &#12418;&#20351;&#12360;&#12414;&#12377;&#12290;&#33258;&#20998;&#12398;&#12469;&#12452;&#12488;&#12395;&#12384;&#12369;&#23455;&#34892;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12362;&#20351;&#12356;&#12398;OpenSSL&#12364;&#21476;&#12356;&#29256;&#12391;&#12398;&#25509;&#32154;&#33258;&#20307;&#12434;&#28961;&#21177;&#12395;&#12375;&#12390;&#12356;&#12427;&#22580;&#21512;&#12399;&#12289;&#32080;&#26524;&#12364;&#12300;&#25298;&#21542;&#12301;&#12392;&#21306;&#21029;&#12391;&#12365;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;TLS&#12398;&#35373;&#23450;&#20363;TLS 1.2&#12392;1.3&#12384;&#12369;&#12434;&#35377;&#21487;&#12377;&#12427;&#20363;&#12391;&#12377;&#12290;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12398;&#20006;&#12403;&#12399;&#12289;&#25163;&#12391;&#26360;&#12363;&#12378;&#12289;Mozilla&#12398;SSL Configuration Generator&#12398;&#20986;&#21147;&#12434;&#20351;&#12358;&#12398;&#12364;&#30906;&#23455;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;nginx&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;ssl_protocols TLSv1.2 TLSv1.3;&#38;lt;/code&#38;gt; Apache&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;SSLProtocol -all +TLSv1.2 +TLSv1.3&#38;lt;/code&#38;gt; WordPress&#20596;&#12395;&#12399;&#12289;TLS&#12398;&#35373;&#23450;&#12399;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;&#12524;&#12531;&#12479;&#12523;&#12469;&#12540;&#12496;&#12540;&#12391;&#12399;&#12289;&#12469;&#12540;&#12496;&#12540;&#12398;&#31649;&#29702;&#30011;&#38754;&#12391;TLS&#12398;&#26368;&#20302;&#12496;&#12540;&#12472;&#12519;&#12531;&#12434;&#36984;&#12406;&#12398;&#12364;&#19968;&#33324;&#30340;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;&#12300;&#21476;&#12356;&#31471;&#26411;&#12398;&#12383;&#12417;&#12395;&#12301;&#12392;TLS 1.0&#12420;1.1&#12434;&#27531;&#12377;&#21069;&#12395;&#12289;&#23455;&#38555;&#12398;&#21033;&#29992;&#32773;&#12398;&#21106;&#21512;&#12434;&#12525;&#12464;&#12391;&#30906;&#12363;&#12417;&#12414;&#12377;&#12290;nginx&#12391;&#12399;&#22793;&#25968; &#38;lt;code&#38;gt;$ssl_protocol&#38;lt;/code&#38;gt;&#12289;Apache&#12391;&#12399; &#38;lt;code&#38;gt;%{SSL_PROTOCOL}x&#38;lt;/code&#38;gt; &#12391;&#12525;&#12464;&#12395;&#27531;&#12379;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#35388;&#26126;&#26360;&#12398;&#26399;&#38480;&#20999;&#12428;&#12420;&#21517;&#21069;&#12398;&#19981;&#19968;&#33268;&#12399;&#12289;TLS&#12398;&#29256;&#12391;&#12399;&#12394;&#12367;&#35388;&#26126;&#26360;&#12398;&#21839;&#38988;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;CDN&#12420;&#12525;&#12540;&#12489;&#12496;&#12521;&#12531;&#12469;&#12540;&#12434;&#20351;&#12387;&#12390;&#12356;&#12427;&#22580;&#21512;&#12289;TLS&#12434;&#32066;&#31471;&#12377;&#12427;&#20596;&#12398;&#35373;&#23450;&#12364;&#12289;&#21033;&#29992;&#32773;&#12363;&#12425;&#35211;&#12360;&#12427;&#35373;&#23450;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HTTP&#12398;&#12414;&#12414;&#12398;&#20837;&#21475;&#12364;&#27531;&#12387;&#12390;&#12356;&#12427;&#12392;&#12289;TLS&#12434;&#35373;&#23450;&#12375;&#12390;&#12418;&#24847;&#21619;&#12364;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;HTTP&#12363;&#12425;HTTPS&#12408;&#12398;&#36578;&#36865;&#12418;&#30906;&#35469;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12391;&#30906;&#35469;&#12377;&#12427;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12399;&#12289;&#21463;&#12369;&#20184;&#12369;&#12390;&#12356;&#12427;TLS&#12398;&#29256;&#12289;&#24369;&#12356;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12289;HTTP&#12363;&#12425;HTTPS&#12408;&#12398;&#36578;&#36865;&#12398;&#26377;&#28961;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;TLS 1.3&#12395;&#26410;&#23550;&#24540;&#12398;&#22580;&#21512;&#12418;&#12289;&#21442;&#32771;&#24773;&#22577;&#12392;&#12375;&#12390;&#31034;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;SSL/TLS&#35388;&#26126;&#26360;&#38;lt;br/&#38;gt;HSTS&#38;lt;br/&#38;gt;&#28151;&#22312;&#12467;&#12531;&#12486;&#12531;&#12484;&#38;lt;br/&#38;gt;&#33030;&#24369;&#24615;&#35386;&#26029;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#12469;&#12452;&#12488;&#12398;&#35373;&#23450;&#12434;&#28961;&#26009;&#12391;&#30906;&#35469;&#12377;&#12427;&#12469;&#12452;&#12488;&#12398;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12384;&#12369;&#12391;&#12289;TLS &#12394;&#12393;&#12398;&#35373;&#23450;&#29366;&#27841;&#12434;&#35386;&#26029;&#12391;&#12365;&#12414;&#12377;&#12290;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12300;Security Checker X&#12301;&#12399;&#12289;&#30331;&#37682;&#12394;&#12375;&#12391;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#60;/div&#62;"  href="https://slt-inc.jp/glossary/tls/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>TLS</a>&#12398;&#29256;&#12434;&#12289;&#12502;&#12521;&#12454;&#12470;&#12289;openssl&#12289;curl&#12391;&#30906;&#12363;&#12417;&#12427;&#25163;&#38918;&#12290;&#20986;&#21147;&#12398;&#35501;&#12415;&#26041;&#12289;&#26399;&#38480;&#20999;&#12428;&#12398;&#23550;&#20966;&#12289;&#33258;&#21205;&#26356;&#26032;&#12392;&#30435;&#35222;&#12289;2029&#24180;&#12395;47&#26085;&#12392;&#12394;&#12427;&#26377;&#21177;&#26399;&#38291;&#12398;&#30701;&#32302;&#12414;&#12391;&#25972;&#29702;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://slt-inc.jp/article/ssl-tls-certificate-check/">SSL/TLS証明書のチェック方法|有効期限・チェーン・通信方式の確認手順</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="slt-art">
<div class="slt-meta">最終確認日: 2026年10月12日 / 編集: エスライン・テクノロジーズ株式会社 Webサイトセキュリティ編集チーム</div>
<div class="slt-lead"><p class="slt-lead-label">この記事の結論</p><p><a href="https://slt-inc.jp/glossary/ssl-tls-certificate/">SSL/TLS証明書</a>の確認は、有効期限、ホスト名(SAN)の一致、中間証明書を含むチェーンの3点が基本です。PCのブラウザは足りない中間証明書を補うことがあるため、チェーンはopensslの『Verify return code: 0 (ok)』で判定します。TLS 1.2と1.3だけが有効か、HTTPが301でHTTPSへ転送されるかも確認の対象です。公的な証明書の最長有効期間は、2026年3月15日以降の発行分で200日、2029年3月15日以降は47日になるため、更新は自動化して外から監視します。</p></div>

<h2>SSL/TLS証明書で確認する6項目と合格の基準</h2>
<p>確認する項目は、有効期限、ホスト名(SAN)、チェーン、<a href="https://slt-inc.jp/glossary/tls/">TLS</a>の版、暗号スイート、HTTPSへの転送の6つです。項目ごとに合格の基準を先に決めておくと、ブラウザやコマンドの結果をそのまま判定に使えます。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>合格の基準</th><th>確認の手段</th><th>不合格のときの症状</th></tr></thead><tbody>
<tr><td>有効期限</td><td>残りが有効期間の3分の1を超えている</td><td>ブラウザ、openssl x509</td><td>画面全体の警告、API連携の停止</td></tr>
<tr><td>ホスト名(SAN)</td><td>使うすべてのホスト名がSANに入っている</td><td>ブラウザ、openssl x509</td><td>名前が一致しないという警告</td></tr>
<tr><td>チェーン</td><td>中間証明書まで送られ、検証結果が0 (ok)</td><td>openssl s_client</td><td>curlや外部システムからの接続が失敗</td></tr>
<tr><td>TLSの版</td><td>1.2と1.3は接続でき、1.0と1.1は拒否される</td><td>openssl s_client</td><td>診断で古い方式を指摘される</td></tr>
<tr><td>暗号スイート</td><td>ECDHEとAEAD(AES-GCM、ChaCha20-Poly1305)に限る</td><td>openssl s_client、デベロッパーツール</td><td>診断で弱い暗号を指摘される</td></tr>
<tr><td>HTTPS転送とHSTS</td><td>HTTPは301でHTTPSへ移り、HSTSのヘッダーがある</td><td>curl</td><td>『保護されていない通信』の表示、HTTPを開く前の警告</td></tr>
</tbody></table></div>
<p>期限の基準を『残り3分の1』としたのは、Let&#8217;s EncryptとCertbot(4.0以降)の更新時期に合わせたためです。200日の証明書なら残り約66日、90日なら残り30日が目安です。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 420" xmlns="http://www.w3.org/2000/svg"><title>証明書の確認の流れと合格の基準</title><desc>ブラウザで開く、有効期限を読む、SANを確かめる、チェーンを確かめる、TLSの版を試す、HTTPとHSTSを見る、の6段階を上から順に並べ、各段階の右に合格の基準を示した図。</desc><defs><marker id="slt-f1-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#4A5C82"/></marker></defs><text x="70" y="30" font-size="22" font-weight="bold" fill="#10265A">確認すること</text><text x="496" y="30" font-size="22" font-weight="bold" fill="#10265A">合格の基準</text><line x1="34" y1="50" x2="34" y2="400" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="55" y="48" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="80" font-size="22" fill="#10265A">1 ブラウザで開く</text><line x1="428" y1="72" x2="472" y2="72" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="48" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="80" font-size="22" fill="#10265A">警告が出ない</text><rect x="55" y="109" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="141" font-size="22" fill="#10265A">2 有効期限を読む</text><line x1="428" y1="133" x2="472" y2="133" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="109" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="141" font-size="22" fill="#10265A">残りが期間の3分の1超</text><rect x="55" y="170" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="202" font-size="22" fill="#10265A">3 SANを確かめる</text><line x1="428" y1="194" x2="472" y2="194" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="170" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="202" font-size="22" fill="#10265A">全ホスト名を含む</text><rect x="55" y="231" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="263" font-size="22" fill="#10265A">4 チェーンを確かめる</text><line x1="428" y1="255" x2="472" y2="255" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="231" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="263" font-size="22" fill="#10265A">return code: 0 (ok)</text><rect x="55" y="292" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="324" font-size="22" fill="#10265A">5 TLSの版を試す</text><line x1="428" y1="316" x2="472" y2="316" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="292" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="324" font-size="22" fill="#10265A">1.0と1.1は接続不可</text><rect x="55" y="353" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="385" font-size="22" fill="#10265A">6 HTTPとHSTSを見る</text><line x1="428" y1="377" x2="472" y2="377" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="353" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="385" font-size="22" fill="#10265A">301転送とHSTSあり</text></svg><figcaption>図1 証明書の確認の流れ。上から順に確かめ、右の基準をすべて満たせば合格です。</figcaption></figure>
<p>6項目をまとめて外から確かめるなら、当社の無料ツール『<a href="https://slt-inc.jp/service/security-checker/">Webサイトのセキュリティチェック</a>』も使えます。URLを入れるだけで、証明書の期限、ホスト名、中間証明書の不足、古いTLSや弱い暗号、HTTPSへの転送などを確認できます(登録不要)。</p>
<p>外から見える設定を受動的に調べる検査のため、<a href="https://slt-inc.jp/glossary/vulnerability-assessment/">脆弱性診断</a>の代わりにはなりません。役割の違いは『<a href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/">簡易チェックと脆弱性診断の違い</a>』に、証明書以外の点検項目は『<a href="https://slt-inc.jp/article/website-security-check-items/">Webサイトのセキュリティチェック項目30選</a>』にまとめています。</p>

<h2>証明書のチェーンの仕組み(ルート、中間、サーバー証明書)</h2>
<p>ブラウザは、サーバー証明書から中間証明書をたどり、端末に入っているルート証明書に行き着けたときだけ証明書を信頼します。サーバーが送るのはサーバー証明書と中間証明書で、ルート証明書は送らなくてかまいません(TLS 1.3の仕様、RFC 8446)。</p>
<p>ルート証明書は認証局の大本で、OSやブラウザの信頼ストアに最初から入っています。中間証明書はルート証明書の署名を受けた認証局の証明書で、サーバー証明書に署名する役割です。サーバー証明書はドメインごとに発行され、SAN(サブジェクトの代替名)に対象のホスト名が並びます。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 400" xmlns="http://www.w3.org/2000/svg"><title>証明書のチェーンの構造と、サーバーが送る範囲</title><desc>ルート証明書が中間証明書に署名し、中間証明書がサーバー証明書に署名する3段の構造。中間証明書とサーバー証明書を赤い破線で囲み、サーバーが送る範囲であることを示す。ルート証明書は端末の信頼ストアにあり、サーバーは送らなくてよい。</desc><defs><marker id="slt-f2-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker></defs><rect x="60" y="24" width="300" height="72" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="210" y="68" font-size="24" font-weight="bold" fill="#10265A" text-anchor="middle">ルート証明書</text><line x1="210" y1="98" x2="210" y2="158" stroke="#10265A" stroke-width="3" marker-end="url(#slt-f2-arrow)"/><text x="226" y="136" font-size="22" fill="#10265A">署名</text><rect x="40" y="146" width="340" height="244" rx="14" fill="none" stroke="#D00A0A" stroke-width="3" stroke-dasharray="10 8"/><rect x="60" y="164" width="300" height="72" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="210" y="208" font-size="24" font-weight="bold" fill="#10265A" text-anchor="middle">中間証明書</text><line x1="210" y1="238" x2="210" y2="298" stroke="#10265A" stroke-width="3" marker-end="url(#slt-f2-arrow)"/><text x="226" y="276" font-size="22" fill="#10265A">署名</text><rect x="60" y="304" width="300" height="72" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="210" y="348" font-size="24" font-weight="bold" fill="#10265A" text-anchor="middle">サーバー証明書</text><text x="400" y="54" font-size="22" fill="#10265A">端末の信頼ストアにある</text><text x="400" y="86" font-size="22" fill="#10265A">サーバーは送らなくてよい</text><line x1="382" y1="225" x2="396" y2="225" stroke="#D00A0A" stroke-width="3"/><text x="400" y="232" font-size="22" font-weight="bold" fill="#10265A">サーバーが送る範囲</text><text x="400" y="264" font-size="22" fill="#10265A">(fullchain.pemの中身)</text><text x="400" y="328" font-size="22" fill="#10265A">中間証明書が欠けると</text><text x="400" y="360" font-size="22" fill="#10265A">curlやアプリで失敗する</text></svg><figcaption>図2 チェーンの構造。ルート証明書が中間証明書に、中間証明書がサーバー証明書に署名します。サーバーが送るのは赤い破線の範囲で、ブラウザはサーバー証明書から上へたどり、端末にあるルート証明書で検証を終えます。</figcaption></figure>
<p>Certbotで取得した場合は、サーバー証明書と中間証明書をこの順につないだ <code>fullchain.pem</code> をWebサーバーに設定します。</p>
<h3>PCのブラウザで開けても、チェーンの欠落は隠れる</h3>
<p>中間証明書を送っていないサーバーでも、PCのブラウザでは警告が出ないことがあります。Chromeは足りない中間証明書を証明書内の情報(AIA)から取りに行き、Firefoxは信頼された中間証明書をあらかじめ取り込んでいるためです。</p>
<p>一方、curlやOpenSSLで通信するプログラムは、足りない中間証明書を自動では補いません。同じ設定でも、外部システムからのAPI接続や監視ツールだけが『unable to get local issuer certificate』で失敗します。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>『自分のPCのブラウザで開けた』は、チェーンが正しい証拠になりません。証明書を差し替えたら、opensslかcurlで外から判定します。</p></div>

<h2>ブラウザでSSL証明書を確認する手順(Chrome、Edge、Firefox、Safari)</h2>
<p>ブラウザでは、アドレスバー左端のアイコンから証明書の画面を開き、発行先、発行元、有効期間を確かめます。ChromeとEdgeは同じ形式の画面で、Firefoxはチェーンの証明書をタブで切り替えて表示します。</p>
<h3>Chromeで証明書を開く手順</h3>
<ol class="slt-steps">
<li><strong>アイコンを開く</strong>アドレスバー左端の『サイト情報を表示』アイコンをクリックします。</li>
<li><strong>接続の情報を開く</strong>『この接続は保護されています』をクリックします。</li>
<li><strong>証明書の画面を開く</strong>『証明書は有効です』をクリックすると、証明書の画面が開きます。</li>
<li><strong>期限と発行元を読む</strong>『全般』タブで、発行先、発行元、有効期間(発行日と有効期限)を確かめます。</li>
<li><strong>チェーンとSANを読む</strong>『詳細』タブの『証明書の階層』でチェーンを、『証明書のフィールド』の『証明書のサブジェクトの代替名』でSANを確かめます。</li>
</ol>
<h3>Edge、Firefox、Safariでの開き方</h3>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>ブラウザ</th><th>証明書を開く手順</th><th>確かめられること</th></tr></thead><tbody>
<tr><td>Edge</td><td>鍵のアイコン → 『接続がセキュリティで保護されています』 → 証明書のアイコン(『証明書を表示』)</td><td>Chromeと同じく、『全般』で期限、『詳細』の『証明書の階層』でチェーン</td></tr>
<tr><td>Firefox</td><td>鍵のアイコン → 『安全な接続』 → 『詳細を表示』 → 『セキュリティ』の『証明書を表示&#8230;』</td><td>証明書ごとのタブ、『有効期間』の『終了日時』、『主体者代替名』の『DNS 名』</td></tr>
<tr><td>Safari(Mac)</td><td>メニューバーの『Safari』 → 『接続セキュリティの詳細』</td><td>暗号化の有無。証明書の警告が出たときは『証明書を表示』で内容を確認</td></tr>
</tbody></table></div>
<h3>デベロッパーツールでTLSの版と暗号を見る</h3>
<p>TLSの版と暗号は、Chromeのデベロッパーツールの『セキュリティ』パネルで確かめられます。デベロッパーツールを開いてCtrl+Shift+P(MacはCommand+Shift+P)を押し、『セキュリティを表示』と入力すると移動できます。</p>
<p>『接続』の欄には、TLSの版(例: TLS 1.3)、鍵交換(例: X25519MLKEM768)、暗号(例: AES_128_GCM)が並びます。古い版や弱い方式を使っていると『廃止された接続設定』と表示されるので、見直しの目安になります。</p>

<h2>opensslでSSL証明書の有効期限、発行者、SANを確認する</h2>
<p><code>openssl s_client</code> でサーバーから証明書を受け取り、<code>openssl x509</code> で期限、発行者、SANを表示します。Linuxのサーバー上のほか、WindowsではGit for Windowsに付属するGit Bashでも同じコマンドが使えます。</p>
<pre class="slt-code"><code>openssl s_client -connect example.com:443 -servername example.com \
  &lt;/dev/null 2&gt;/dev/null \
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName</code></pre>
<p>出力の例です(値は説明用です)。</p>
<pre class="slt-code"><code>subject=CN=example.com
issuer=C=JP, O=Example Trust, CN=Example Intermediate CA R1
notBefore=Sep 20 00:00:00 2026 GMT
notAfter=Dec 18 23:59:59 2026 GMT
X509v3 Subject Alternative Name:
    DNS:example.com, DNS:www.example.com</code></pre>
<h3>openssl x509の出力の読み方</h3>
<ul>
<li><code>subject</code>: 証明書の主体者です。CN=の値は参考で、名前の照合にはSANが使われます(RFC 9525)。</li>
<li><code>issuer</code>: この証明書に署名した中間認証局です。</li>
<li><code>notBefore</code>、<code>notAfter</code>: 有効期間の始まりと終わりです。GMT表記なので、日本時間は9時間足します(例の期限は日本時間の2026年12月19日8時59分59秒)。</li>
<li><code>X509v3 Subject Alternative Name</code>: 証明書が有効なホスト名の一覧です。wwwの有無やサブドメインを含め、使う名前がすべて入っているかを見ます。</li>
</ul>
<p>特定の名前が含まれるかは、OpenSSL 3系なら <code>-checkhost</code> で判定できます。サーバー上の証明書ファイルは、<code>-checkend</code> に秒数を渡すと、期限までの残りがそれより短いかを終了コードで返します。</p>
<pre class="slt-code"><code>openssl s_client -connect example.com:443 -servername example.com \
  &lt;/dev/null 2&gt;/dev/null | openssl x509 -noout -checkhost www.example.com
# 例: Hostname www.example.com does match certificate

# 残り30日(2,592,000秒)を切っていれば終了コード1(Certificate will expire)
sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem \
  -noout -checkend 2592000</code></pre>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p><code>-ext</code> は OpenSSL 1.1.1 で加わったオプションです。それより古い版では、<code>-text</code> の出力から『DNS:』で始まる行を探します。</p></div>

<h2>opensslでチェーンの欠落と名前の不一致を判定する</h2>
<p>チェーンは、<code>s_client</code> が表示する証明書の一覧と、最後の『Verify return code』で判定します。0 (ok) なら合格で、中間証明書が欠けていると21になります。</p>
<pre class="slt-code"><code>openssl s_client -connect example.com:443 -servername example.com \
  -verify_hostname example.com &lt;/dev/null 2&gt;/dev/null \
  | grep -E '^ [0-9] s:|^   i:|^Verify return code'</code></pre>
<p>出力の例です。正常なときは、0番のサーバー証明書の発行者(i:)と、1番の中間証明書の主体者(s:)が同じ名前でつながります。中間証明書が欠けていると、1番の行が無く、21が返ります。</p>
<pre class="slt-code"><code># 正常な例
 0 s:CN=example.com
   i:C=JP, O=Example Trust, CN=Example Intermediate CA R1
 1 s:C=JP, O=Example Trust, CN=Example Intermediate CA R1
   i:C=JP, O=Example Trust, CN=Example Root CA
Verify return code: 0 (ok)

# 中間証明書が欠けている例
 0 s:CN=example.com
   i:C=JP, O=Example Trust, CN=Example Intermediate CA R1
Verify return code: 21 (unable to verify the first certificate)</code></pre>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>表示</th><th>意味</th><th>主な対処</th></tr></thead><tbody>
<tr><td>0 (ok)</td><td>検証に成功</td><td>対処は不要</td></tr>
<tr><td>10 (certificate has expired)</td><td>期限切れ</td><td>更新し、Webサーバーを再読み込みする</td></tr>
<tr><td>18 (self-signed certificate)</td><td>自己署名の証明書</td><td>公的な認証局の証明書に替える</td></tr>
<tr><td>20 (unable to get local issuer certificate)</td><td>発行元をたどれない</td><td>中間証明書を送る。手元の信頼ストアが古い場合もある</td></tr>
<tr><td>21 (unable to verify the first certificate)</td><td>サーバー証明書しか届いていない</td><td>中間証明書を含むfullchainを設定する</td></tr>
<tr><td>62 (hostname mismatch)</td><td>名前の不一致(-verify_hostname 指定時)</td><td>SANに名前を加えて再発行する</td></tr>
</tbody></table></div>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p><code>s_client</code> は検証に失敗しても接続を続け、終了コード0で終わります。判定は『Verify return code』の行で行い、スクリプトでは <code>-verify_return_error</code> を付けて失敗を終了コードに反映させます。</p><p>また、<code>-servername</code> は接続先の名前を伝える指定(SNI)で、名前の照合はしません。名前の不一致を判定するには <code>-verify_hostname</code> を付けます。</p></div>
<h3>複数台のサーバーを1台ずつ確かめる</h3>
<p>ロードバランサーの配下に複数台があると、1台だけ古い証明書が残ることがあります。<code>-connect</code> に各サーバーのIPアドレス、<code>-servername</code> に本来のホスト名を指定すると、台ごとに確かめられます。</p>
<pre class="slt-code"><code># 203.0.113.10 は説明用のアドレス。台ごとに書き換えて実行する
openssl s_client -connect 203.0.113.10:443 -servername www.example.com \
  &lt;/dev/null 2&gt;/dev/null | openssl x509 -noout -enddate</code></pre>
<p>CDNを使っている場合は、利用者に届くCDNの証明書と、CDNが接続する元サーバー(オリジン)の証明書が別物です。両方を監視の対象に入れます。</p>

<h2>curl -vで証明書とTLSの状態を確認する</h2>
<p><code>curl -v</code> は、使われたTLSの版と暗号、証明書の期限、SANの照合、検証の結果を1回で表示します。サーバー上での動作確認や、ブラウザと結果を比べたいときに向いています。</p>
<pre class="slt-code"><code>curl -sv -o /dev/null https://example.com/ 2&gt;&amp;1 \
  | grep -E 'SSL connection|subject|(start|expire) date|issuer|verified|verify ok'</code></pre>
<p>出力の例です(値は説明用です)。</p>
<pre class="slt-code"><code>* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / …
*   subject: CN=example.com
*   start date: Sep 20 00:00:00 2026 GMT
*   expire date: Dec 18 23:59:59 2026 GMT
*   issuer: C=JP; O=Example Trust; CN=Example Intermediate CA R1
*   subjectAltName: "example.com" matches cert's "example.com"
* SSL certificate verified via OpenSSL.</code></pre>
<p>『SSL connection using』の行がTLSの版と暗号、『expire date』が期限(GMT)、『subjectAltName』がSANの照合結果です。行末の鍵交換などの表示は、curlとTLSライブラリの組み合わせで変わります。curl 8.5など少し前の版では、最後の行が『SSL certificate verify ok.』と表示されます。</p>
<p>検証に失敗するとcurlは終了コード60で止まり、原因を英語で表示します(主な文言は後の表を参照)。</p>
<h3>Windows標準のcurlで確かめるとき</h3>
<p>Windowsに標準で入っている <code>curl.exe</code> は、Windowsの暗号機能(Schannel)で通信するため、<code>-v</code> を付けても証明書の期限や発行者が出ません。PowerShellで次のように <code>-w "%{certs}"</code> を使うと、証明書の主体者と期限を書き出せます。</p>
<pre class="slt-code"><code>curl.exe -s -o NUL -w "%{certs}" https://example.com/ |
  Select-String '^(Subject|Expire Date):'</code></pre>
<p>最初の2行がサーバー証明書の主体者と期限です(例: Expire Date:2026-12-18 23:59:59 GMT)。チェーンの欠落や名前の照合は、Git for Windowsに付属するopensslで、前の節のコマンドを使って確かめます。</p>

<h2>TLSの版と暗号スイートを確かめ、TLS 1.0と1.1を止める</h2>
<p>TLS 1.0と1.1はRFC 8996で廃止されており、TLS 1.2と1.3だけを有効にするのが現在の基準です。版を指定して接続を試し、1.2と1.3は接続でき、1.0と1.1は拒否されれば合格です。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>版</th><th>現在の扱い</th><th>根拠</th></tr></thead><tbody>
<tr><td>SSL 3.0</td><td>使用禁止</td><td>RFC 7568(2015年6月)</td></tr>
<tr><td>TLS 1.0</td><td>廃止</td><td><a href="https://www.rfc-editor.org/rfc/rfc8996">RFC 8996</a>(2021年3月)</td></tr>
<tr><td>TLS 1.1</td><td>廃止</td><td>RFC 8996(2021年3月)</td></tr>
<tr><td>TLS 1.2</td><td>対応が必須。2026年7月に機能を凍結</td><td>RFC 9325、<a href="https://www.rfc-editor.org/rfc/rfc9851">RFC 9851</a></td></tr>
<tr><td>TLS 1.3</td><td>対応を推奨し、優先して使う</td><td>RFC 9325、RFC 8446</td></tr>
</tbody></table></div>
<pre class="slt-code"><code># 1.2と1.3は、接続できれば合格(Protocol version の行を見る)
openssl s_client -connect example.com:443 -servername example.com \
  -tls1_2 -brief &lt;/dev/null
openssl s_client -connect example.com:443 -servername example.com \
  -tls1_3 -brief &lt;/dev/null
# 1.1は、拒否されれば合格(OpenSSL 3系は SECLEVEL=0 の指定が必要)
openssl s_client -connect example.com:443 -servername example.com \
  -tls1_1 -cipher 'DEFAULT:@SECLEVEL=0' &lt;/dev/null</code></pre>
<p>1.2と1.3で『Protocol version: TLSv1.2』のように表示されれば、その版で接続できています。1.1の試験で『alert protocol version』を含むエラーが出れば、サーバーが古い版を拒否しています。1.0の確認は、<code>-tls1</code> を指定する同じ手順です。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>OpenSSL 3系は、既定の安全水準(SECLEVEL)でTLS 1.0と1.1を手元側で無効にしています。指定なしで <code>-tls1_1</code> を試すと『no protocols available』と出ますが、これは手元のOpenSSLが送信を止めただけで、サーバーの設定の結果ではありません。</p><p>接続できた場合に出る『New, TLSv1.0, Cipher is …』の行は、暗号スイートが最初に定義された版を表します。実際に使われた版は『Protocol』の行で読みます。</p></div>
<h3>暗号スイートの考え方</h3>
<p>TLS 1.2の暗号スイートは、鍵交換、認証、暗号、ハッシュの組を1つの名前で表します。<code>ECDHE-RSA-AES128-GCM-SHA256</code> なら、鍵交換がECDHE、認証がRSA、暗号がAES-128-GCM、ハッシュがSHA-256です。</p>
<p>TLS 1.3の暗号スイートは、<code>TLS_AES_128_GCM_SHA256</code> のように暗号とハッシュだけを表します。鍵交換は『グループ』(X25519など)として別に決まり、どの暗号スイートも認証付き暗号(AEAD)です(RFC 8446)。</p>
<p>TLS 1.2で避けるものは、IETFの推奨文書RFC 9325が示しています。</p>
<ul>
<li>RC4: 使用禁止</li>
<li>3DES: 実効の強さが128ビットに届かない</li>
<li><code>TLS_RSA_WITH_</code>で始まる静的なRSA鍵交換: 前方秘匿性がない</li>
<li>CBCモード: encrypt_then_mac拡張を使えない場合は避ける</li>
<li><code>TLS_DHE_</code>で始まるDHE: TLS 1.2では避ける</li>
</ul>
<h3>Mozilla推奨(Intermediate)に合わせた設定例</h3>
<p>サーバー設定の推奨値には、Mozillaの『<a href="https://wiki.mozilla.org/Security/Server_Side_TLS">Server Side TLS</a>』が広く使われてきました。このガイドはMozilla外のコミュニティ作業部会TLSRefへ移り、Mozillaのページは移管先を案内しています。</p>
<p>2026年4月の6.0版で、古い端末向けの『Old』は廃止されました。一般の公開サイト向けの『Intermediate』の推奨値は次のとおりです。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>Intermediate(6.0版)の推奨値</th></tr></thead><tbody>
<tr><td>TLSの版</td><td>TLS 1.2、TLS 1.3</td></tr>
<tr><td>TLS 1.3の暗号</td><td>AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305の3種(OpenSSLの既定と同じ)</td></tr>
<tr><td>TLS 1.2の暗号</td><td>鍵交換ECDHE、認証ECDSAまたはRSA、暗号AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305の組み合わせ6種</td></tr>
<tr><td>鍵交換のグループ</td><td>X25519MLKEM768、X25519、prime256v1、secp384r1</td></tr>
<tr><td>証明書</td><td>ECDSA(P-256)またはRSA(2048ビット)。有効期間は90日を推奨</td></tr>
<tr><td>暗号の優先順位</td><td>クライアント側の順序に従う</td></tr>
<tr><td>HSTS</td><td>max-age=63072000(2年)</td></tr>
</tbody></table></div>
<pre class="slt-code"><code># nginx: 次の3行は http ブロックに置く
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE+AESGCM:ECDHE+CHACHA20:!PSK;
ssl_prefer_server_ciphers off;

# HTTPSの server ブロックに置く
add_header Strict-Transport-Security "max-age=63072000" always;</code></pre>
<pre class="slt-code"><code># Apache(mod_ssl)
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE+AESGCM:ECDHE+CHACHA20:!PSK
SSLHonorCipherOrder off
Header always set Strict-Transport-Security "max-age=63072000"</code></pre>
<p><code>ECDHE+AESGCM:ECDHE+CHACHA20:!PSK</code> は、表のTLS 1.2の6種だけに絞り込む短い書き方です(並び順は異なります)。使う前に、次のコマンドで6種に展開されるかを確かめます。</p>
<pre class="slt-code"><code># TLSv1.2の6行と、TLSv1.3の3行が表示されれば想定どおり
openssl ciphers -v -tls1_2 'ECDHE+AESGCM:ECDHE+CHACHA20:!PSK'</code></pre>
<p>nginxの <code>ssl_protocols</code> は、serverブロックだけに書くと既定のサーバーの値が使われる場合があるため、httpブロックに置きます。鍵交換のグループは、OpenSSL 3.5以降なら既定でX25519MLKEM768を優先するので、多くの場合は指定不要です。CDNを使っている場合は、CDN側の最小のTLSバージョンの設定が利用者との通信を決めます。</p>

<h2>HTTPからHTTPSへの転送、HSTS、混在コンテンツを確かめる</h2>
<p>HTTPのURLは301でHTTPSの同じURLへ転送し、HTTPSの応答には<a href="https://slt-inc.jp/glossary/hsts/">HSTS</a>(Strict-Transport-Security)のヘッダーを付けます。2026年9月公開のChrome 154では、HTTPの接続を開く前に確認を求める警告が既定で有効になりました(<a href="https://chromestatus.com/release-notes/154">Chrome 154のリリースノート</a>)。</p>
<p>Googleの発表では、警告の対象は最近訪れていない公開サイトで、社内などのプライベートなアドレスは対象外です。HTTPSに対応していないホスト名は、サブドメインも含めて警告の対象になります。</p>
<pre class="slt-code"><code># スキームを省くと、curlはHTTP(80番ポート)で接続する
curl -sI example.com | grep -i -E '^HTTP|^location'
curl -sI www.example.com | grep -i -E '^HTTP|^location'
# HTTPSの応答にHSTSが付いているか
curl -sI https://example.com/ | grep -i strict-transport-security</code></pre>
<p>出力の例です。</p>
<pre class="slt-code"><code>HTTP/1.1 301 Moved Permanently
Location: https://example.com/
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/
strict-transport-security: max-age=63072000</code></pre>
<p>合格の基準は、HTTPの各ホスト名が301(恒久的な転送)でHTTPSへ移ることと、HTTPSの応答にHSTSがあることです。HSTSは<a href="https://slt-inc.jp/glossary/security-headers/">セキュリティヘッダー</a>の1つで、設定の手順は『<a href="https://slt-inc.jp/article/security-headers-setup/">セキュリティヘッダーの設定方法</a>』で詳しく扱っています。</p>
<h3>HSTSを入れると、証明書のエラーは回避できなくなる</h3>
<p>HSTSを記憶したブラウザは、max-ageの期間中に証明書のエラーが起きると、警告を回避して進む選択肢を出さずに接続を止めます(<a href="https://www.rfc-editor.org/rfc/rfc6797">RFC 6797</a>の8.4節、12.1節)。期限切れがそのまま全面的な停止になるため、HSTSは自動更新と監視が動いてから設定します。</p>
<p>HSTSのヘッダーは、HTTPSの応答でエラーなく受け取ったときだけ有効になり、HTTPの応答に付けてはいけません。<code>max-age=0</code> を送ると、ブラウザに記憶された設定を消せます。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p><code>includeSubDomains</code> は、すべてのサブドメインがHTTPSで正しく応答することを確かめてから付けます。有効な証明書の無いサブドメインが1つでもあると、そこには接続できなくなります。TLSRefの設定生成ツールの出力には <code>includeSubDomains</code> が入っているので、貼り付ける前の確認が欠かせません。</p></div>
<h3>混在コンテンツを見つけて直す</h3>
<p><a href="https://slt-inc.jp/glossary/mixed-content/">混在コンテンツ</a>は、HTTPSのページの中で画像やスクリプトをHTTPで読み込んでいる状態です。現在のブラウザは、画像、音声、動画をHTTPSへ自動で切り替え、スクリプト、CSS、iframeなどはブロックします(<a href="https://developer.mozilla.org/ja/docs/Web/Security/Mixed_content">MDNの解説</a>)。</p>
<p>見つけるには、デベロッパーツールのコンソールで『Mixed Content』で始まる警告を探し、読み込み元のURLをHTTPSに書き換えます。直しきるまでの応急処置として、<a href="https://slt-inc.jp/glossary/csp/">CSP</a>の <code>upgrade-insecure-requests</code> でまとめてHTTPSへ切り替える方法もあります。</p>

<h2>期限切れのときの影響と、すぐやる対処</h2>
<p>期限が切れると、ブラウザは画面全体の警告を出し、API連携やアプリの通信も検証エラーで止まります。まず外から配信中の証明書を確かめ、更新、再読み込み、全台での再確認の順に進めます。</p>
<p>Chromeは『この接続ではプライバシーが保護されません』、Firefoxは『警告: 潜在的なセキュリティリスクあり』という画面に、原因を示すコードを出します。主なコードとcurlの文言は次のとおりです。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>原因</th><th>Chromeの表示</th><th>Firefoxの表示</th><th>curlの表示(OpenSSL系)</th></tr></thead><tbody>
<tr><td>期限切れ(端末の時計のずれでも出る)</td><td>NET::ERR_CERT_DATE_INVALID</td><td>SEC_ERROR_EXPIRED_CERTIFICATE</td><td>certificate has expired</td></tr>
<tr><td>名前の不一致</td><td>NET::ERR_CERT_COMMON_NAME_INVALID</td><td>SSL_ERROR_BAD_CERT_DOMAIN</td><td>no alternative certificate subject name matches target hostname</td></tr>
<tr><td>発行元をたどれない(中間証明書の欠落など)</td><td>NET::ERR_CERT_AUTHORITY_INVALID</td><td>SEC_ERROR_UNKNOWN_ISSUER</td><td>unable to get local issuer certificate</td></tr>
</tbody></table></div>
<p>ChromeとFirefoxは、中間証明書を補えた場合は3行目の警告を出しません。対処は次の順で進めます。</p>
<ol class="slt-steps">
<li><strong>配信中の証明書を確かめる</strong><code>s_client</code> で <code>notAfter</code> を読み、どのホスト名の、どのサーバーで切れているかを特定します。</li>
<li><strong>サーバー上のファイルと比べる</strong>ファイルの期限が新しいのに配信が古いなら、更新は済んでいて再読み込みが漏れています。</li>
<li><strong>証明書を更新する</strong>ACMEなら <code>certbot renew</code> などで更新し、有料の証明書は再発行して差し替えます。</li>
<li><strong>設定を確かめて再読み込みする</strong><code>nginx -t</code> で構文を確かめてから、<code>systemctl reload nginx</code> で反映します。</li>
<li><strong>全ホスト名、全台、CDNで確かめる</strong>wwwの有無、サブドメイン、各サーバー、CDNの証明書を外から確かめます。</li>
<li><strong>止まった原因を直す</strong><code>certbot renew --dry-run</code> で失敗を再現し、80番ポートの遮断、DNSの変更、権限の不足などを直します。</li>
</ol>
<pre class="slt-code"><code># 配信中の証明書の期限
openssl s_client -connect example.com:443 -servername example.com \
  &lt;/dev/null 2&gt;/dev/null | openssl x509 -noout -enddate
# サーバー上のファイルの期限(Certbotの例)
sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem \
  -noout -enddate
# 更新し、構文を確かめてから再読み込み(nginxの例)
sudo certbot renew
sudo nginx -t &amp;&amp; sudo systemctl reload nginx</code></pre>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>Let&#8217;s EncryptのHTTP-01による確認は、80番ポートでしか行えません。HTTPSへの転送は問題ありませんが、80番ポートを閉じると更新が失敗します。</p></div>
<p>更新したのに古い証明書が出るときの原因は、再読み込みの漏れ、別の台に残った古い証明書、別に管理しているCDNの証明書、設定が別のファイルを指している、のいずれかです。直したあとは、無料の『<a href="https://slt-inc.jp/service/security-checker/">Webサイトのセキュリティチェック</a>』でも外から結果を確かめられます。原因を切り分けられないときや、更新の自動化を設計し直したいときは、<a href="https://slt-inc.jp/inquiry/">お問い合わせフォーム</a>から相談を受け付けています。</p>

<h2>自動更新(ACME)と期限の監視を仕組みにする</h2>
<p>更新は、ACME(RFC 8555)に対応した認証局とクライアントで自動にし、Webサーバーの再読み込みまでを含めます。そのうえで、自動更新が止まったことに気づけるよう、外から期限を調べる監視を別に置きます。</p>
<p>Certbotは4.0以降、残りが有効期間の3分の1を切った証明書を更新します。<code>--deploy-hook "systemctl reload nginx"</code> を付けると、更新できたときだけ再読み込みが走ります。事前の動作確認に使うのは <code>certbot renew --dry-run</code> です。</p>
<p>更新の時期を認証局から受け取るARI(RFC 9773、2025年6月発行)という仕組みもあり、Let&#8217;s Encryptはクライアントでの利用を勧めています。同社は2025年6月4日に期限切れの通知メールを終了したため、通知は自分で用意します。</p>
<pre class="slt-code"><code>#!/bin/sh
# 残り日数がしきい値を切った証明書と、検証に失敗したホストを表示する
DAYS=14
for host in example.com www.example.com; do
  cert=$(openssl s_client -connect "$host:443" -servername "$host" \
    -verify_hostname "$host" -verify_return_error &lt;/dev/null 2&gt;/dev/null \
    | openssl x509 2&gt;/dev/null)
  if [ -z "$cert" ]; then
    echo "NG $host: 接続、チェーン、名前、期限のいずれかで失敗"
  elif ! echo "$cert" | openssl x509 -noout -checkend $((DAYS * 86400)) &gt;/dev/null; then
    echo "NG $host: 残り${DAYS}日未満"
  else
    echo "OK $host"
  fi
done</code></pre>
<p>しきい値は、自動更新が動く時点より小さく、手で直す時間が残る値にします。90日の証明書は残り30日で自動更新が動くため、14日を切っていれば、自動更新が2週間以上止まっている合図です。cronで毎日動かし、NGの行が出たらチームに通知します。</p>
<ul class="slt-check">
<li>管理しているホスト名(www、サブドメイン、API、メール)と、その証明書の一覧がある</li>
<li>更新が自動で、更新後の再読み込みまで含まれている</li>
<li><code>certbot renew --dry-run</code> などの更新の試験が成功する</li>
<li>外からの期限の監視が毎日動き、通知が複数人に届く</li>
<li>2027年3月15日からの100日の上限に合わせ、手作業の更新が残っていない</li>
<li>サーバーの移転、CDNの導入、DNSの変更のあとに外から確かめる手順がある</li>
<li>HSTSを入れる前に、上の項目がすべて満たされている</li>
</ul>

<h2>有効期間の短縮の動向(2026年10月時点)</h2>
<p><a href="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/">CA/Browser Forumの決議SC-081v3</a>により、公的に信頼されるTLS証明書の最長有効期間は、2026年3月15日以降の発行分で200日になりました。2027年3月15日に100日、2029年3月15日に47日へ短くなります。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>証明書の発行日</th><th>最長の有効期間</th><th>ドメイン確認の再利用期間</th></tr></thead><tbody>
<tr><td>2026年3月15日より前</td><td>398日</td><td>398日</td></tr>
<tr><td>2026年3月15日から</td><td>200日</td><td>200日</td></tr>
<tr><td>2027年3月15日から</td><td>100日</td><td>100日</td></tr>
<tr><td>2029年3月15日から</td><td>47日</td><td>10日</td></tr>
</tbody></table></div>
<p>決議は2025年4月11日に可決され(提案はApple)、2026年10月4日付のBaseline Requirements 2.3.1版にもこの日程が入っています。日数はnotBeforeからnotAfterまでを含めて数え、1日は86,400秒です。</p>
<p>ドメイン確認の再利用期間は、認証局がドメインの管理権を確かめた結果を使い回せる日数です。2029年には10日になるため、更新のたびにDNSやHTTPでの確認を自動で通せる仕組みが前提になります。</p>
<p><a href="https://letsencrypt.org/2025/12/02/from-90-to-45">Let&#8217;s Encryptの発表</a>によると、既定の90日は2027年2月10日に64日、2028年2月16日に45日へ短くなります。希望者向けの45日の証明書(tlsserverプロファイル)は、2026年5月13日から選べるようになりました。同社は、更新を有効期間の約3分の2の時点で行い、60日ごとのような固定の間隔に頼らないよう求めています。</p>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>手作業の更新は、上限が100日になる2027年3月15日以降は年4回以上、47日になる2029年3月15日以降は年8回以上の作業になります。人の記憶やカレンダーに頼る運用は、2027年3月より前に自動化へ切り替えます。</p></div>

<h2>よくある質問</h2>
<div class="slt-faq"><h3>SSL証明書とTLS証明書は、違うものですか？</h3><p>同じものです。暗号化の仕組みがSSLからTLSへ置き換わったあとも『SSL証明書』という呼び名が残っており、SSL 3.0はRFC 7568で使用が禁止されています。</p></div>
<div class="slt-faq"><h3>無料の証明書と有料の証明書で、暗号の強さは変わりますか？</h3><p>変わりません。暗号の強さはTLSの版、暗号スイート、鍵の種類で決まり、証明書の価格とは関係しません。違いは、認証局が確認する範囲(ドメインの管理権だけか、組織の実在までか)や、サポートの内容です。</p></div>
<div class="slt-faq"><h3>ワイルドカード証明書は、どの名前に使えますか？</h3><p>左端の1階層だけに使えます(RFC 9525)。*.example.com は www.example.com や shop.example.com に有効です。example.com 自体や a.b.example.com には使えないため、必要ならSANに別に含めます。</p></div>
<div class="slt-faq"><h3>社内システムの証明書も、200日以内にする必要がありますか？</h3><p>CA/Browser Forumの規定の対象は、OSやブラウザに最初から入っているルートにつながる、公的に信頼される証明書です。社内の認証局(プライベートCA)が発行する証明書はこの規定の対象外ですが、社内の方針や、使う機器とソフトウェアの制限は個別に確かめます。</p></div>
<div class="slt-faq"><h3>TLS 1.2は、近いうちに使えなくなりますか？</h3><p>廃止されてはおらず、IETFのRFC 9325はTLS 1.2への対応を必須としています。ただし2026年7月のRFC 9851で機能が凍結され、耐量子計算機暗号などの新機能はTLS 1.3にだけ加わります。TLS 1.3を優先して使える状態にしておくのが、現実的な備えです。</p></div>
<div class="slt-faq"><h3>OCSPステープリングの設定は、今も必要ですか？</h3><p>使っている認証局によります。Let&#8217;s Encryptは2025年8月6日にOCSPの提供を終え、失効の情報をCRLだけで公開しているため、同社の証明書ではOCSPステープリングは働きません。ほかの認証局の証明書では、<code>openssl x509 -noout -ocsp_uri</code> でOCSPの接続先が表示されるかを確かめてから判断します。</p></div>
<div class="slt-faq"><h3>出力にX25519MLKEM768と表示されるのは問題ですか？</h3><p>問題ありません。従来のX25519に、耐量子計算機暗号のML-KEMを組み合わせた鍵交換で、OpenSSL 3.5以降は既定でこれを優先します。MozillaのServer Side TLS(6.0版)でも推奨グループの先頭に置かれており、使われるのはTLS 1.3の接続です。</p></div>

<h2>関連記事</h2>
<div class="slt-related">
<a class="slt-related-item" href="https://slt-inc.jp/article/security-headers-setup/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24853-security-headers-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24853-security-headers-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24853-security-headers-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">セキュリティヘッダーの設定方法｜HSTS、CSPの設定例つき</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/website-security-check-items/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24854-security-checklist-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24854-security-checklist-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24854-security-checklist-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">Webサイトのセキュリティチェック項目30選｜確認方法つき一覧表</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">簡易チェックと脆弱性診断の違い｜無料ツールでできることと、専門業者が必要な場面</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/wordpress-vulnerability-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">WordPressの脆弱性を確認する方法｜本体、プラグインの更新と対処の手順</span></a>
</div>

<div class="slt-cta"><p class="slt-cta-title">証明書と通信の設定を、外からまとめて確かめる</p><p>URLを入れるだけで、証明書の期限、ホスト名、中間証明書の不足、古いTLSと弱い暗号、HTTPSへの転送、HSTS、混在コンテンツを確認できます。登録は不要で、無料です。診断できるのは、管理権限のあるサイトに限ります。</p><a class="slt-cta-btn" href="https://slt-inc.jp/service/security-checker/">無料でWebサイトをチェックする</a></div>
</div>
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "SSL証明書とTLS証明書は、違うものですか？", "acceptedAnswer": {"@type": "Answer", "text": "同じものです。暗号化の仕組みがSSLからTLSへ置き換わったあとも『SSL証明書』という呼び名が残っており、SSL 3.0はRFC 7568で使用が禁止されています。"}}, {"@type": "Question", "name": "無料の証明書と有料の証明書で、暗号の強さは変わりますか？", "acceptedAnswer": {"@type": "Answer", "text": "変わりません。暗号の強さはTLSの版、暗号スイート、鍵の種類で決まり、証明書の価格とは関係しません。違いは、認証局が確認する範囲(ドメインの管理権だけか、組織の実在までか)や、サポートの内容です。"}}, {"@type": "Question", "name": "ワイルドカード証明書は、どの名前に使えますか？", "acceptedAnswer": {"@type": "Answer", "text": "左端の1階層だけに使えます(RFC 9525)。*.example.com は www.example.com や shop.example.com に有効です。example.com 自体や a.b.example.com には使えないため、必要ならSANに別に含めます。"}}, {"@type": "Question", "name": "社内システムの証明書も、200日以内にする必要がありますか？", "acceptedAnswer": {"@type": "Answer", "text": "CA/Browser Forumの規定の対象は、OSやブラウザに最初から入っているルートにつながる、公的に信頼される証明書です。社内の認証局(プライベートCA)が発行する証明書はこの規定の対象外ですが、社内の方針や、使う機器とソフトウェアの制限は個別に確かめます。"}}, {"@type": "Question", "name": "TLS 1.2は、近いうちに使えなくなりますか？", "acceptedAnswer": {"@type": "Answer", "text": "廃止されてはおらず、IETFのRFC 9325はTLS 1.2への対応を必須としています。ただし2026年7月のRFC 9851で機能が凍結され、耐量子計算機暗号などの新機能はTLS 1.3にだけ加わります。TLS 1.3を優先して使える状態にしておくのが、現実的な備えです。"}}, {"@type": "Question", "name": "OCSPステープリングの設定は、今も必要ですか？", "acceptedAnswer": {"@type": "Answer", "text": "使っている認証局によります。Let's Encryptは2025年8月6日にOCSPの提供を終え、失効の情報をCRLだけで公開しているため、同社の証明書ではOCSPステープリングは働きません。ほかの認証局の証明書では、openssl x509 -noout -ocsp_uri でOCSPの接続先が表示されるかを確かめてから判断します。"}}, {"@type": "Question", "name": "出力にX25519MLKEM768と表示されるのは問題ですか？", "acceptedAnswer": {"@type": "Answer", "text": "問題ありません。従来のX25519に、耐量子計算機暗号のML-KEMを組み合わせた鍵交換で、OpenSSL 3.5以降は既定でこれを優先します。MozillaのServer Side TLS(6.0版)でも推奨グループの先頭に置かれており、使われるのはTLS 1.3の接続です。"}}]}</script><p>The post <a href="https://slt-inc.jp/article/ssl-tls-certificate-check/">SSL/TLS証明書のチェック方法|有効期限・チェーン・通信方式の確認手順</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
