<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[てくにかるむ]]></title><description><![CDATA[「エラーをなくすことは非常に有益で時には新しい真実や事実を作り上げるよりも勝る」
ー チャールズ・ダーウィン]]></description><link>http://multix.jp/</link><generator>Ghost 0.6</generator><lastBuildDate>Tue, 12 May 2026 21:36:55 GMT</lastBuildDate><atom:link href="http://multix.jp/tag/ssl-tls/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[本番用のサーバ証明書を取得する]]></title><description><![CDATA[<p>ここまで述べた手順でのSSL/TLSサーバ証明書は、自己認証なのでプライベートLAN内でしか事実上運用できない。グローバルIPを持ったサーバにインストールしてインターネットを跨いで運用するには、正規の認証局によって認証・署名された正当なSSL/TLSサーバ証明書が必要になる。</p>

<ul class="index"></ul>

<hr>

<h4 id="ssltls">本番用のSSL/TLSサーバ証明書を請求するには</h4>

<p>SSL/TLSサーバ証明書を得るまでには概ね以下の手順を踏む。</p>

<ol>
<li>サーバを運用するための独自ドメインを取得し自身の管理下に置く。そもそもこれがなければ始まらない。  </li>
<li>認証局を選択して会員登録を行い、会員の実在性承認を受ける。個人の場合は少なくとも住所氏名電話番号、会員登録したメールアドレスなどが実在するかの確認がなされる。  </li>
<li>認証局の証明書発行要件を確認し、必要なら独自ドメインの管理者情報をWHOISに登録し公開する。<sup id="fnref:1"><a href="http://multix.jp/getting-ssl-certificate/#fn:1" rel="footnote">1</a></sup>  </li>
<li>証明書申請者は証明書に埋め込まれる管理者メールアドレスを受信できるように準備する。これは一般に<code>webmaster</code>、<code>postmaster</code>、<code>hostmaster</code>といった認証局が指定する定型メールアドレスである。無論その独自ドメイン名は合致していなければならず、他のドメインのメールアドレスにすることは出来ない。  </li>
<li>独自ドメインの承認を受ける。すなわちWHOIS情報などと照らしあわせてその独自ドメインが正しく請求者に所有権があるか、管理者メールアドレスにセキュリティトークンを送信して請求者が正しくその運用権限を有しているかの確認がなされる。<sup id="fnref:2"><a href="http://multix.jp/getting-ssl-certificate/#fn:2" rel="footnote">2</a></sup>  </li>
<li>証明書申請者はSSL/TLSサーバ証明書を運用するサブドメインをDNSに登録・公開し、そのサブドメインをコモンネーム(CN)と管理者メールアドレスその他を記入した証明書請求（CSR）ファイルを作成し、認証局に送付する。  </li>
<li>認証局はCSR記載の内容と会員情報とを照らし合わせて監査し、不備なく承認となれば自身の持つCA証明書と秘密鍵でCSRに署名を行い、証明書（CRT）ファイルとして証明書申請者の会員登録あるいは管理者メールアドレスに返送する。</li>
</ol>

<p>証明書請求(CSR)ファイルの作成では、先の自己証明書と同様に必要な項目を記入しなければならない。</p>]]></description><link>http://multix.jp/getting-ssl-certificate/</link><guid isPermaLink="false">cf6e198d-b0e1-4890-8c73-d8aee1192e53</guid><category><![CDATA[Linux]]></category><category><![CDATA[めもらんだむ]]></category><category><![CDATA[SSL/TLS]]></category><dc:creator><![CDATA[朝日薫]]></dc:creator><pubDate>Thu, 19 Feb 2015 09:47:00 GMT</pubDate><content:encoded><![CDATA[<p>ここまで述べた手順でのSSL/TLSサーバ証明書は、自己認証なのでプライベートLAN内でしか事実上運用できない。グローバルIPを持ったサーバにインストールしてインターネットを跨いで運用するには、正規の認証局によって認証・署名された正当なSSL/TLSサーバ証明書が必要になる。</p>

<ul class="index"></ul>

<hr>

<h4 id="ssltls">本番用のSSL/TLSサーバ証明書を請求するには</h4>

<p>SSL/TLSサーバ証明書を得るまでには概ね以下の手順を踏む。</p>

<ol>
<li>サーバを運用するための独自ドメインを取得し自身の管理下に置く。そもそもこれがなければ始まらない。  </li>
<li>認証局を選択して会員登録を行い、会員の実在性承認を受ける。個人の場合は少なくとも住所氏名電話番号、会員登録したメールアドレスなどが実在するかの確認がなされる。  </li>
<li>認証局の証明書発行要件を確認し、必要なら独自ドメインの管理者情報をWHOISに登録し公開する。<sup id="fnref:1"><a href="http://multix.jp/getting-ssl-certificate/#fn:1" rel="footnote">1</a></sup>  </li>
<li>証明書申請者は証明書に埋め込まれる管理者メールアドレスを受信できるように準備する。これは一般に<code>webmaster</code>、<code>postmaster</code>、<code>hostmaster</code>といった認証局が指定する定型メールアドレスである。無論その独自ドメイン名は合致していなければならず、他のドメインのメールアドレスにすることは出来ない。  </li>
<li>独自ドメインの承認を受ける。すなわちWHOIS情報などと照らしあわせてその独自ドメインが正しく請求者に所有権があるか、管理者メールアドレスにセキュリティトークンを送信して請求者が正しくその運用権限を有しているかの確認がなされる。<sup id="fnref:2"><a href="http://multix.jp/getting-ssl-certificate/#fn:2" rel="footnote">2</a></sup>  </li>
<li>証明書申請者はSSL/TLSサーバ証明書を運用するサブドメインをDNSに登録・公開し、そのサブドメインをコモンネーム(CN)と管理者メールアドレスその他を記入した証明書請求（CSR）ファイルを作成し、認証局に送付する。  </li>
<li>認証局はCSR記載の内容と会員情報とを照らし合わせて監査し、不備なく承認となれば自身の持つCA証明書と秘密鍵でCSRに署名を行い、証明書（CRT）ファイルとして証明書申請者の会員登録あるいは管理者メールアドレスに返送する。</li>
</ol>

<p>証明書請求(CSR)ファイルの作成では、先の自己証明書と同様に必要な項目を記入しなければならない。これらはサーバ証明書のSubjectフィールドに埋め込まれるが、コモンネーム(CN)は必須である。</p>

<ul>
<li><strong>Country Name</strong> : 組織所在地の2文字の国コードを記名する。一般に省略不可。日本ならJP。</li>
<li><strong>State or Province Name</strong> : 組織所在地の都道府県名。一般に省略不可。東京都なら Tokyo。  </li>
<li><strong>Locality Name</strong> : 組織所在地の市町村名。一般に省略不可。千代田区なら Chiyoda。</li>
<li><strong>Organization Name (O)</strong>: 組織名。中間CA証明書や法人格EV認証を取る場合は原則必須で、正式な英語名称を記入する必要がある。このフィールドが必須の場合は証明書運用管理上重要なため、当然ながら無関係な他組織名を偽証することは許されない。非EV認証や個人登録申請では省略できるが時に認証局側で適宜削除・修正を受けることもある。この場合は他組織と区別のつくオリジナルな組織名を名乗ってさえいれば問題なく、個人登録では屋号や同人サークル名を記名してもよい。</li>
<li><strong>Organizational Unit Name (OU)</strong>: 部署名。省略可能。同一のONで複数のサーバ証明書が必要になる場合、その区別のために入力する。申請者側で自由に記名できるコメント欄とも言える。</li>
<li><strong>Common Name (CN)</strong>: サーバホスト名。サーバ証明書においては必須。ブラウザのアドレスバー表示とこれが一致しない場合は認証エラー<sup id="fnref:3"><a href="http://multix.jp/getting-ssl-certificate/#fn:3" rel="footnote">3</a></sup>となる。故に独自ドメイン管理と一体でなければならない。原則として一つのサーバホスト名にはただ一つの証明書が一対一で対応するべきなので、有効期間切れ以前に新しい証明書の再発行を行う際は、同時に古い証明書を破棄申請（Revoke）して公開CRTリストに記載しなければならない。<sup id="fnref:4"><a href="http://multix.jp/getting-ssl-certificate/#fn:4" rel="footnote">4</a></sup></li>
<li><strong>Email Address</strong> : 管理者連絡用メールアドレス。多くの場合必須。WebサイトやメールベースでCSR申請・CRT発行を行う場合はここに記載したメールアドレスに署名された証明書が返送されたりする。なかには自動で正しい記載に差し替えてくれる認証局もあり、その場合は省略しても誤入力しても関係がない。むしろ気にすべきは、このフィールドは無条件に世界中に公開される<sup id="fnref:5"><a href="http://multix.jp/getting-ssl-certificate/#fn:5" rel="footnote">5</a></sup>ということである。ゆえに普段使いのメールアドレスを記載すると大変な目に合うこともあるので、専用の管理者用メールアドレスや、エイリアスにしておくとよい。<sup id="fnref:6"><a href="http://multix.jp/getting-ssl-certificate/#fn:6" rel="footnote">6</a></sup></li>
</ul>

<hr>

<h3 id="csr">証明書申請(CSR)ファイルの作成</h3>

<p>証明書申請(CSR)ファイルの作成手順は、自己証明書ファイルの時とほぼ同じである。すなわち<code>/etc/pki/tls/certs/</code>に移動して<code>make server.csr</code>を実行するだけだ。CSRファイルと同時に同名の秘密鍵も作成される。</p>

<pre><code class="language-brush:plain">[root@secure ~]# cd /etc/pki/tls/certs/
[root@secure certs]# make server.csr
umask 77 ; \  
    /usr/bin/openssl genrsa -aes128 2048 &gt; server.key
Generating RSA private key, 2048 bit long modulus  
............................+++
.............+++
e is 65537 (0x10001)  
Enter pass phrase:  
Verifying - Enter pass phrase:  
umask 77 ; \  
    /usr/bin/openssl req  -new -key server.key -out server.csr
Enter pass phrase for server.key:  
You are about to be asked to enter information that will be incorporated  
into your certificate request.  
What you are about to enter is what is called a Distinguished Name or a DN.  
There are quite a few fields but you can leave some blank  
For some fields there will be a default value,  
If you enter '.', the field will be left blank.  
-----
Country Name (2 letter code) [XX]:JP↩  
State or Province Name (full name) []:Tokyo↩  
Locality Name (eg, city) [Default City]:Chiyoda↩  
Organization Name (eg, company) [Default Company Ltd]:MULTIX↩  Organizational Unit Name (eg, section) []:↩  
Common Name (eg, your name or your server's hostname) []:secure.multix.jp↩  
Email Address []:hostmaster&amp;#64;multix&amp;#46;jp↩

Please enter the following 'extra' attributes  
to be sent with your certificate request  
A challenge password []:↩  
An optional company name []:↩  
[root@secure certs]# ls -l server.*
-rw------- 1 root root 1037 Jan 29 12:58 server.csr
-rw------- 1 root root 1766 Jan 29 12:49 server.key
[root@secure certs]# 
</code></pre>

<p>作成したserver.crtファイルを認証局に送付して署名を依頼する。また新しい秘密鍵からもパスフレーズを削除した版を生成してパーミッションを落としておく。</p>

<pre><code class="language-brush:plain">[root@secure certs]# umask 77; openssl rsa -in server.key -out ../private/server.key
Enter pass phrase for server.key:********↩  
writing RSA key  
[root@secure certs]# ls -l ../private/server.key 
-rw------- 1 root root 1679 Jan 29 12:59 ../private/server.key
[root@secure certs]#
</code></pre>

<p>発行されるSSL/TLSサーバ証明書が深さ2以上となる場合は、認証局のサイトから対応する中間CA証明書もダウンロードしておこう。これは<code>/etc/pki/tls/certs/</code>に<code>server-chain.crt</code>のファイル名で保存しておく。</p>

<pre><code class="language-brush:plain">[root@secure certs]# ls -l server-chain.crt 
-rw-------. 1 root root 2212 Jan 29 14:07 server-chain.crt
[root@secure certs]# 
</code></pre>

<hr>

<h4 id="ssltlsweb">本番用SSL/TLSサーバ証明書でWebサーバを起動する</h4>

<p>無事に認証局から署名されたSSL/TLSサーバ証明書ファイルが返送されてきたら、これを<code>server.crt</code>のファイル名でcertsディレクトリに保存する。これでサーバ運用に必要な秘密鍵と証明書の用意が終わったので、ふたたびhttpsサーバ設定<code>/etc/httpd/conf.d/ssl.conf</code>の該当項目2箇所を書き換える。また中間CA証明書<code>server-chain.crt</code>の設定<sup id="fnref:7"><a href="http://multix.jp/getting-ssl-certificate/#fn:7" rel="footnote">7</a></sup>も行頭コメントを削除して有効にする。そしてこのファイル中の<code>ServerName</code>を正式なサーバホスト名（証明書のコモンネーム）に変更する。</p>

<pre><code class="language-brush:plain">#ServerName www.example.com:443
ServerName secure.multix.jp

#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
#SSLCertificateFile /etc/pki/tls/certs/develop.crt
SSLCertificateFile /etc/pki/tls/certs/server.crt

#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
#SSLCertificateKeyFile /etc/pki/tls/private/develop.key
SSLCertificateKeyFile /etc/pki/tls/private/server.key

SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt  
</code></pre>

<p>また必要ならブラウザを開くPCの<code>/etc/hosts</code>ファイルにサーバホスト名を追加しよう。これはNATやDMZの内側にサーバがありまだテスト段階で外部公開していない場合の代替手段となる。</p>

<pre><code class="language-brush:plain">192.168.0.252 secure secure.multix.jp  
</code></pre>

<p>あとはconfigtestで書き換えエラーがないのを確認してサービスを再起動すればよい。またサーバ再起動時にWebサーバも起動するようにchkconfigも設定しておこう。</p>

<pre><code class="language-brush:plain">[root@secure ~]# service httpd configtest
Syntax OK  
[root@secure ~]# service httpd restart
httpd を停止中:                                            [  OK  ]  
httpd を起動中:                                            [  OK  ]  
[root@secure ~]# chkconfig httpd on
[root@secure ~]# chkconfig httpd --list
httpd              0:off   1:off   2:on    3:on    4:on    5:on    6:off  
[root@secure ~]# 
</code></pre>

<p>以上ですべての準備が整ったので、ブラウザでサーバホスト名を参照<sup id="fnref:8"><a href="http://multix.jp/getting-ssl-certificate/#fn:8" rel="footnote">8</a></sup>してみよう。今度は【頼できない接続】の警告なしでサイトが閲覧できるはずだ。証明書を確認して署名を依頼した認証局名が表示されれば正常である。<sup id="fnref:9"><a href="http://multix.jp/getting-ssl-certificate/#fn:9" rel="footnote">9</a></sup></p>

<p><img src="http://multix.jp/content/images/2015/02/2015-02-22-19-24-11.png" alt=""></p>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>独自ドメイン管理業者が証明書認証業務を行っており、それを利用して証明書認証を受ける場合はおおむね身分証明プロセスの多くが簡略化されるので必要ないこともある。WHOIS情報の開示が要求されるのは両者が別組織であったり管理業者の国が異なるような場合だろう。 <a href="http://multix.jp/getting-ssl-certificate/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p>WHOIS以外に一意の指定トークンを含むCNAMEやTXTフィールドをDNS登録する承認方法もある。こうすることで証明書申請者が正当な管理者権限を有しているかを見定めている。 <a href="http://multix.jp/getting-ssl-certificate/#fnref:2" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:3"><p>ワイルドカード証明書はこれに限らない。また証明書によってはサブドメインと主ドメインの両方でエラー無く扱えるようになっていることもある。 <a href="http://multix.jp/getting-ssl-certificate/#fnref:3" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:4"><p>サーバ証明書の有効期間は一般に1〜2年なので、サーバ証明書用のCRTが厳密に運用されている様子はあまり見る機会がない。それでも時々DNS乗っ取りなどで不正発行された証明書が出回る騒ぎになると、これを取り消すためにCRTが更新されることになる。有効期間の長い証明書ほど事態は重く、騒ぎも大きくなるため、一見煩雑な証明書の毎年更新にも（認証局側は特に）利がある。 <a href="http://multix.jp/getting-ssl-certificate/#fnref:4" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:5"><p>opensslコマンドの-subjectオプションで表示できるし、どんなブラウザでもOU、CNと並んでこのフィールドは必ず簡単に参照できる。ほぼ間違いなくSPAMの標的になるので事前に防御策は講じておいたほうが良い。 <a href="http://multix.jp/getting-ssl-certificate/#fnref:5" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:6"><p>また多数の独自ドメインを並行運用する場合個別にメールサーバを運用管理するのは不経済なのでドメイン管理業者の提供するメール転送サービスを利用したりする。 <a href="http://multix.jp/getting-ssl-certificate/#fnref:6" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:7"><p>サーバでの中間CA証明書の設定を怠ると正しい証明書を使用していても【信頼できない接続】警告の対象となる。 <a href="http://multix.jp/getting-ssl-certificate/#fnref:7" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:8"><p>このアドレス参照をlocalhostやIPアドレスにすると証明書のコモンネームと異なるのでブラウザは警告を出す。ブラウザを開くPCの/etc/hostsにIPアドレスとサーバホスト名を追加することでこの警告が出なくなることを確認できる。テストが終わって正規の運用状態に移行しおえたらこの記述は除去するのが望ましい。 <a href="http://multix.jp/getting-ssl-certificate/#fnref:8" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:9"><p>「運営者: 検証され信頼できる運営者情報はありません」の表示はEV認証証明書を使っていない限り必ず表示されるものなので、通常は気に病む必要はない。ここに運営者情報が表示される場合は同じものがアドレスバーに緑色のラベルとして表示される。これを取得するには法人資格を持ち信頼性監査に合格する必要がある。無論かかる経費も一般に高額となる。 <a href="http://multix.jp/getting-ssl-certificate/#fnref:9" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item><item><title><![CDATA[自己サーバ証明書を自作する]]></title><description><![CDATA[<p>前項<a href="http://multix.jp/starting-apache-ssl/">Apache/SSLサーバ導入手順</a>に続き、自己サーバ証明書を導入して起動するまでの手順を示す。通常はCentOSデフォルトで用意されているlocalhost証明書で充分用が足りるはずなのでこの項は必ずしも必要ではない。</p>

<ul class="index"></ul>

<hr>

<h4 id="ssltls">SSL/TLSサーバ証明書の配置場所と作成コマンド</h4>

<p>https通信を必要とするWebサイト/アプリの開発では以上の作業を行えば充分用が足りる。次は自己サーバ証明書を自作しそれを用いてWebサーバを設定する手続きを練習してみよう。</p>

<p>SSL/TLS証明書を得るには openssl コマンドで秘密鍵と証明書のセットを作成する必要があるが、この作業を簡略化する Makefile が openssl パッケージとともにインストールされているので、ここではこれを使用する。これは <code>/etc/pki/tls/certs</code> に配置されている。</p>

<pre><code class="language-brush:plain">[root@localhost ~]# cd /etc/pki/tls/certs/
[root@localhost certs]# ls -la
合計 1780
drwxr-xr-x. 2 root root    4096  2月 20 12:41</code></pre>]]></description><link>http://multix.jp/making-ssl-self-certificate/</link><guid isPermaLink="false">cfc7197a-3433-4ad1-9628-431fc260b24e</guid><category><![CDATA[Linux]]></category><category><![CDATA[めもらんだむ]]></category><category><![CDATA[SSL/TLS]]></category><dc:creator><![CDATA[朝日薫]]></dc:creator><pubDate>Thu, 19 Feb 2015 09:46:00 GMT</pubDate><content:encoded><![CDATA[<p>前項<a href="http://multix.jp/starting-apache-ssl/">Apache/SSLサーバ導入手順</a>に続き、自己サーバ証明書を導入して起動するまでの手順を示す。通常はCentOSデフォルトで用意されているlocalhost証明書で充分用が足りるはずなのでこの項は必ずしも必要ではない。</p>

<ul class="index"></ul>

<hr>

<h4 id="ssltls">SSL/TLSサーバ証明書の配置場所と作成コマンド</h4>

<p>https通信を必要とするWebサイト/アプリの開発では以上の作業を行えば充分用が足りる。次は自己サーバ証明書を自作しそれを用いてWebサーバを設定する手続きを練習してみよう。</p>

<p>SSL/TLS証明書を得るには openssl コマンドで秘密鍵と証明書のセットを作成する必要があるが、この作業を簡略化する Makefile が openssl パッケージとともにインストールされているので、ここではこれを使用する。これは <code>/etc/pki/tls/certs</code> に配置されている。</p>

<pre><code class="language-brush:plain">[root@localhost ~]# cd /etc/pki/tls/certs/
[root@localhost certs]# ls -la
合計 1780
drwxr-xr-x. 2 root root    4096  2月 20 12:41 2015 .  
drwxr-xr-x. 5 root root    4096  2月 20 11:03 2015 ..  
-rw-r--r--. 1 root root    2242  1月 21 02:32 2015 Makefile
-rw-r--r--. 1 root root  786601  7月 14 23:55 2014 ca-bundle.crt
-rw-r--r--. 1 root root 1005005  7月 14 23:55 2014 ca-bundle.trust.crt
-rw-------. 1 root root    1541  2月 20 11:29 2015 localhost.crt
-rwxr-xr-x. 1 root root     610  1月 21 02:32 2015 make-dummy-cert
-rwxr-xr-x. 1 root root     829  1月 21 02:32 2015 renew-dummy-cert
</code></pre>

<p>ここで例えば<code>make develop.crt</code>を実行すると、秘密鍵<code>develop.key</code>と証明書<code>develop.crt</code>のセットを作成することが出来る。質問事項のうち秘密鍵を作成・参照するためのパスフレーズは必須、<code>Organization Name</code>（ここではDEVELOP）と<code>Common Name</code>の入力（ここではlocalhost）は必要だが、その他は規定値で構わないので空ENTERでもよい。</p>

<pre><code class="language-brush:plain">[root@localhost certs]# make develop.crt
umask 77 ; \  
    /usr/bin/openssl genrsa -aes128 2048 &gt; develop.key
Generating RSA private key, 2048 bit long modulus  
.............................+++
...........................................+++
e is 65537 (0x10001)  
Enter pass phrase:********↩  
Verifying - Enter pass phrase:********↩  
umask 77 ; \  
    /usr/bin/openssl req -utf8 -new -key develop.key -x509 -days 365 -out develop.crt -set_serial 0
Enter pass phrase for develop.key:********↩  
You are about to be asked to enter information that will be incorporated  
into your certificate request.  
What you are about to enter is what is called a Distinguished Name or a DN.  
There are quite a few fields but you can leave some blank  
For some fields there will be a default value,  
If you enter '.', the field will be left blank.  
-----
Country Name (2 letter code) [XX]:JP↩  
State or Province Name (full name) []:Tokyo↩  
Locality Name (eg, city) [Default City]:Chiyoda↩  
Organization Name (eg, company) [Default Company Ltd]:DEVELOP↩  
Organizational Unit Name (eg, section) []:↩  
Common Name (eg, your name or your server's hostname) []:localhost↩  
Email Address []:↩  
[root@localhost certs]# ls -l develop.*
-rw-------. 1 root root 1261  2月 20 13:18 2015 develop.crt
-rw-------. 1 root root 1766  2月 20 13:18 2015 develop.key
</code></pre>

<p>出来上がったdevelop.crtの署名情報を確認してみると<code>-subject</code>と<code>-issuer</code>の中身が同一なので自己証明書である事がわかる。</p>

<pre><code class="language-brush:plain">[root@localhost certs]# openssl x509 -in develop.crt -noout -subject -issuer -dates
subject= /C=JP/ST=Tokyo/L=Chiyoda/O=DEVELOP/CN=localhost  
issuer= /C=JP/ST=Tokyo/L=Chiyoda/O=DEVELOP/CN=localhost  
notBefore=Feb 20 04:18:44 2015 GMT  
notAfter=Feb 20 04:18:44 2016 GMT  
</code></pre>

<p>次にパスフレーズを削除した秘密鍵を<code>/etc/pki/tls/private/</code>に作成し、パーミッションを落としておく。<sup id="fnref:1"><a href="http://multix.jp/making-ssl-self-certificate/#fn:1" rel="footnote">1</a></sup></p>

<pre><code class="language-brush:plain">[root@localhost certs]# umask 77; openssl rsa -in develop.key -out ../private/develop.key
Enter pass phrase for develop.key:********↩  
writing RSA key  
[root@localhost certs]# ls -l ../private/
合計 8
-rw-------. 1 root root 1679  2月 20 13:21 2015 develop.key
-rw-------. 1 root root 1679  2月 20 11:29 2015 localhost.key
[root@localhost certs]#
</code></pre>

<hr>

<h4 id="ssltlsweb">自作したSSL/TLSサーバ証明書でWebサーバを起動する</h4>

<p>これで秘密鍵と証明書が用意出来たので、httpsサーバ設定<code>/etc/httpd/conf.d/ssl.conf</code>の該当項目2箇所を書き換える。またこのファイルの中にも<code>ServerName</code>を指定する箇所があるが、いまは何もしなくても良い。</p>

<pre><code class="language-brush:plain">#ServerName www.example.com:443

#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/pki/tls/certs/develop.crt

#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/pki/tls/private/develop.key  
</code></pre>

<p>あとはconfigtestで書き換えエラーがないのを確認してサービスを再起動するだけだ。</p>

<pre><code class="language-brush:plain">[root@localhost conf.d]# service httpd configtest
Syntax OK  
[root@localhost conf.d]# service httpd restart
httpd を停止中:                                            [  OK  ]  
httpd を起動中:                                            [  OK  ]  
[root@localhost conf.d]# 
</code></pre>

<p>ブラウザでふたたび<code>https://localhost</code>を閲覧して証明書の内容を確認してみると、認証局の位置に先ほど<code>Organization Name</code>に入力した文字列 DEVELOP が表示されているだろう。</p>

<p><img src="http://multix.jp/content/images/2015/02/2015-02-20-15-03-01.png" alt=""></p>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>ここではumaskコマンドを前置してopensslコマンドの出力段階で不要なパーミッションを落としている。 <a href="http://multix.jp/making-ssl-self-certificate/#fnref:1" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item><item><title><![CDATA[Apache/SSLサーバ導入手順]]></title><description><![CDATA[<p>CentOS6のApache+mod_sslでHTTPS/SSL/TLSサーバを立ち上げるシンプルな手順を示す。ここではLANに接続されたCentOSデスクトップPCでの構築練習を仮定している。前項<a href="http://multix.jp/openssl-command/">opensslコマンド例文集</a>も参照のこと。</p>

<ul class="index"></ul>

<hr>

<h4 id="apache">Apache導入</h4>

<p>必要なupdateを行った上で、Apache、mod_sslを導入する。もしopensslが入っていなければ自動的に追加される。</p>

<pre><code class="language-brush:plain">yum update -y  
yum install httpd mod_ssl  
</code></pre>

<hr>

<h4 id="web">Webサーバを起動する</h4>

<p>さっそくこのWebサーバを起動してみよう。/etc/httpd/conf/httpd.conf を編集して<code>ServerName</code>を所定の位置に追記する。既定では記入例がコメントで書かれているからその直下に<code>ServerName localhost</code>を追記して保存する。設定編集が必要なのはこれだけだ。<sup id="fnref:1"><a href="http://multix.jp/starting-apache-ssl/#fn:1" rel="footnote">1</a></sup></p>

<pre><code class="language-brush:plain gutter:true title:/etc/httpd/conf/httpd.conf">#ServerName www.example.com:80
ServerName localhost  
</code></pre>

<p>設定に間違いがないか確認してhttpdサービスを起動する。</p>

<pre><code class="language-brush:plain">[root@localhost ~]# service</code></pre>]]></description><link>http://multix.jp/starting-apache-ssl/</link><guid isPermaLink="false">e81f94f9-3965-4d97-a026-f369935a1745</guid><category><![CDATA[ユーティリティ]]></category><category><![CDATA[Linux]]></category><category><![CDATA[めもらんだむ]]></category><category><![CDATA[SSL/TLS]]></category><dc:creator><![CDATA[朝日薫]]></dc:creator><pubDate>Thu, 19 Feb 2015 09:45:00 GMT</pubDate><content:encoded><![CDATA[<p>CentOS6のApache+mod_sslでHTTPS/SSL/TLSサーバを立ち上げるシンプルな手順を示す。ここではLANに接続されたCentOSデスクトップPCでの構築練習を仮定している。前項<a href="http://multix.jp/openssl-command/">opensslコマンド例文集</a>も参照のこと。</p>

<ul class="index"></ul>

<hr>

<h4 id="apache">Apache導入</h4>

<p>必要なupdateを行った上で、Apache、mod_sslを導入する。もしopensslが入っていなければ自動的に追加される。</p>

<pre><code class="language-brush:plain">yum update -y  
yum install httpd mod_ssl  
</code></pre>

<hr>

<h4 id="web">Webサーバを起動する</h4>

<p>さっそくこのWebサーバを起動してみよう。/etc/httpd/conf/httpd.conf を編集して<code>ServerName</code>を所定の位置に追記する。既定では記入例がコメントで書かれているからその直下に<code>ServerName localhost</code>を追記して保存する。設定編集が必要なのはこれだけだ。<sup id="fnref:1"><a href="http://multix.jp/starting-apache-ssl/#fn:1" rel="footnote">1</a></sup></p>

<pre><code class="language-brush:plain gutter:true title:/etc/httpd/conf/httpd.conf">#ServerName www.example.com:80
ServerName localhost  
</code></pre>

<p>設定に間違いがないか確認してhttpdサービスを起動する。</p>

<pre><code class="language-brush:plain">[root@localhost ~]# service httpd configtest
Syntax OK  
[root@localhost ~]# service httpd start
httpd を起動中:                                            [  OK  ]  
[root@localhost ~]#
</code></pre>

<p>Linuxデスクトップ上でWebブラウザを起動し<code>http://localhost</code>を参照すると以下の画面を得ることが出来る。</p>

<p><img src="http://multix.jp/content/images/2015/02/2015-02-20-11-57-32.png" alt=""></p>

<p>自分自身（localhost）以外から参照するにはファイアウォールでHTTPポート接続を許可する必要<sup id="fnref:2"><a href="http://multix.jp/starting-apache-ssl/#fn:2" rel="footnote">2</a></sup>がある。これには<code>WWW(HTTP)</code>と<code>安全なWWW(HTTPS)</code>のふたつを許可しよう。</p>

<p><img src="http://multix.jp/content/images/2015/02/2015-02-20-11-57-21.png" alt=""></p>

<hr>

<h4 id="https">HTTPSで接続する</h4>

<p>実はこの段階で、プリインストールされた自己CA証明書を用いたHTTPSサーバがすでに起動している。ブラウザから<code>https://localhost</code>を参照すると以下【信頼できない接続】の画面を得ることが出来る。</p>

<p><img src="http://multix.jp/content/images/2015/02/2015-02-20-12-21-46.png" alt=""></p>

<p>FireFoxの場合は【危険性を理解した上で接続するには】の【例外を追加】からこの自己CA証明書を【承認】する。</p>

<p><img src="http://multix.jp/content/images/2015/02/2015-02-20-12-25-30.png" alt=""></p>

<p>すると先のHTTP接続と同じ画面が表示されるが、アドレス欄には鍵マークが付いている。これをクリックするとHTTPSで確かに通信されていることが判る。</p>

<p><img src="http://multix.jp/content/images/2015/02/2015-02-20-12-28-23.png" alt=""></p>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p><strong>ServerName</strong>がコメントアウトされたまま起動しようとしてもエラーが出て立ち上がらない。 <a href="http://multix.jp/starting-apache-ssl/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p><strong>system-config-firewall-base</strong>パッケージの<strong>system-config-firewall-base-tui</strong>コマンドでファイアウォールを制御できる。 <a href="http://multix.jp/starting-apache-ssl/#fnref:2" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item><item><title><![CDATA[opensslコマンド例文集]]></title><description><![CDATA[<p>opensslコマンド関係の備忘録。</p>

<ul class="index"></ul>

<hr>

<h4 id="">サーバに設定された証明書を確認する</h4>

<p>正しくSSL通信が為されているならば証明書の署名と発行者、またSSLネゴシエーションのパラメータや暗号方式が得られる。</p>

<pre><code class="language-brush:plain">openssl s_client -connect HOSTNAME_OR_ADDR:443 -showcerts  
</code></pre>

<p>中間証明書が正しく設定されているならばそれらを通じてルートCAまで一貫して辿れることが確認できる。
なお、ポート番号にはデフォルトでは以下を指定する。</p>

<ul>
<li>443 HTTPS</li>
<li>995 POP over SSL</li>
<li>465 SMTP over SSL</li>
<li>993 IMAPS</li>
</ul>

<p>このコマンドは「---」で表示が止まるが、TCPセッションは接続したままになっている。HTTPSの場合は<code>get /</code>ENTERを打てばトップページの内容が得られるし、SMTPなら<code>HELO</code>等を打つことでSMTPサーバと直接会話することができる。</p>

<hr>

<h4 id="crt">証明書ファイル(CRT)の内容を確認する</h4>

<p><code>-inform</code>を省略した場合は<code>-in</code>ファイルは（BASE64エンコードされた）PEMフォーマットであると仮定する。解読できない場合はDERを指定してみると良い。これは他のコマンドでも同様である。</p>

<pre><code class="language-brush:plain">openssl</code></pre>]]></description><link>http://multix.jp/openssl-command/</link><guid isPermaLink="false">93e16083-30d4-46bb-95e2-1109c0e4ce72</guid><category><![CDATA[Linux]]></category><category><![CDATA[めもらんだむ]]></category><category><![CDATA[SSL/TLS]]></category><dc:creator><![CDATA[朝日薫]]></dc:creator><pubDate>Thu, 19 Feb 2015 09:01:00 GMT</pubDate><content:encoded><![CDATA[<p>opensslコマンド関係の備忘録。</p>

<ul class="index"></ul>

<hr>

<h4 id="">サーバに設定された証明書を確認する</h4>

<p>正しくSSL通信が為されているならば証明書の署名と発行者、またSSLネゴシエーションのパラメータや暗号方式が得られる。</p>

<pre><code class="language-brush:plain">openssl s_client -connect HOSTNAME_OR_ADDR:443 -showcerts  
</code></pre>

<p>中間証明書が正しく設定されているならばそれらを通じてルートCAまで一貫して辿れることが確認できる。
なお、ポート番号にはデフォルトでは以下を指定する。</p>

<ul>
<li>443 HTTPS</li>
<li>995 POP over SSL</li>
<li>465 SMTP over SSL</li>
<li>993 IMAPS</li>
</ul>

<p>このコマンドは「---」で表示が止まるが、TCPセッションは接続したままになっている。HTTPSの場合は<code>get /</code>ENTERを打てばトップページの内容が得られるし、SMTPなら<code>HELO</code>等を打つことでSMTPサーバと直接会話することができる。</p>

<hr>

<h4 id="crt">証明書ファイル(CRT)の内容を確認する</h4>

<p><code>-inform</code>を省略した場合は<code>-in</code>ファイルは（BASE64エンコードされた）PEMフォーマットであると仮定する。解読できない場合はDERを指定してみると良い。これは他のコマンドでも同様である。</p>

<pre><code class="language-brush:plain">openssl x509 -in "CERTFILE.PEM" -noout -text  
</code></pre>

<pre><code class="language-brush:plain">openssl x509 -in "CERTFILE.CRT" -inform der -noout -text  
</code></pre>

<hr>

<h4 id="">証明書ファイルの有効期間を確認する</h4>

<p><code>-text</code>での表示内容から有効期間(Validity)フィールドだけを表示する。</p>

<pre><code class="language-brush:plain">openssl x509 -in "CERTFILE.PEM" -noout -dates

notBefore=Jan 28 17:19:49 2015 GMT  
notAfter=Jan 29 17:58:54 2016 GMT  
</code></pre>

<hr>

<h4 id="">証明書ファイルの要求使用者名を確認する</h4>

<p><code>-text</code>での表示内容から要求使用者(Subject)フィールドだけを表示する。</p>

<pre><code class="language-brush:plain">openssl x509 -in "CERTFILE.PEM" -noout -subject

subject= /C=JP/CN=secure.example.jp/emailAddress=hostmaster@example.jp  
</code></pre>

<hr>

<h4 id="">証明書ファイルの発行署名者を確認する</h4>

<p><code>-text</code>での表示内容から発行署名者(Issuer)フィールドだけを表示する。</p>

<pre><code class="language-brush:plain">openssl x509 -in "CERTFILE.PEM" -noout -issuer

issuer= /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA  
</code></pre>

<hr>

<h4 id="csr">証明書申請ファイル(CSR)の内容を確認する</h4>

<pre><code class="language-brush:plain">openssl req -in "CERTRESIGNQUEST.PEM" -noout -text  
</code></pre>

<hr>

<h4 id="">秘密鍵ファイルの内容を確認する</h4>

<pre><code class="language-brush:plain">openssl rsa -in "PRIVATEKEY.PEM" -noout -text  
</code></pre>

<hr>

<h4 id="pub">証明書と秘密鍵の公開鍵(PUB)が一致するかを確認する</h4>

<p>これは証明書と秘密鍵それぞれから公開鍵を抽出して比較することで実現できる。</p>

<pre><code class="language-brush:plain">openssl rsa -in "PRIVATEKEY.PEM" -pubout -out "PUBKEY.PEM"  
openssl x509 -in "CERTIFICATE.PEM" -pubkey -noout &gt; "CERTPUB.PEM"  
diff "PUBKEY.PEM" "CERTPUB.PEM" &amp;&amp; echo OK  
</code></pre>

<hr>

<h4 id="">秘密鍵のパスフレーズを削除する</h4>

<p>サービスデーモンで使用する秘密鍵は、サービスを起動する度に毎回パスフレーズ入力を求められることになるのを避けるため、セキュリティ的に弱くなるのを承知しつつパスフレーズを削除しておくのが一般的<sup id="fnref:1"><a href="http://multix.jp/openssl-command/#fn:1" rel="footnote">1</a></sup>だ。入力ファイルと出力ファイルは同じファイル名にして上書き保存しても良いし別ファイルに変えても良い。普通は使用するサービスが区別できるような名前にするだろう。</p>

<pre><code class="language-brush:plain">openssl rsa -in "PRIVATEKEY.PEM" -out "SERVERKEY.PEM"  
</code></pre>

<p>作成した秘密鍵ファイルは速やかにファイル属性をrootユーザの読み込み専用に変更し、通常は<code>/etc/pki/tls/certs/</code>に適切な名前で格納する。</p>

<pre><code class="language-brush:plain">openssl rsa -in localhost.key -out localhost.key  
chown root.root localhost.key  
chmod 400 localhost.key  
mv localhost.key /etc/pki/tls/certs/  
</code></pre>

<hr>

<h4 id="">証明書のフォーマット変換</h4>

<p>UNIX系サーバソフトやアプリではPEM形式が多用されるが事実上平文も同然なので、外部とのやりとりやWindows/Macintosh上ではDER形式やPKCS12形式を利用するほうが多いだろう。なのでファイルフォーマット変換は利用する機会が多い。<sup id="fnref:2"><a href="http://multix.jp/openssl-command/#fn:2" rel="footnote">2</a></sup></p>

<pre><code class="language-brush:plain">openssl x509 -in "input_file.der" -inform DER -out "output_file.pem" -outform PEM  
</code></pre>

<pre><code class="language-brush:plain">openssl x509 -in "input_file.der" -inform DER -text -noout  
</code></pre>

<pre><code class="language-brush:plain">openssl x509 -in "input_file.pem" -inform PEM -out "output_file.der" -outform DER  
</code></pre>

<pre><code class="language-brush:plain">openssl pkcs12 -export -in "input_file.pem" -out "output_file.p12" -name "FRIENDLYNAME"  
</code></pre>

<p>PKCS12への変換はシステムから外部へのエクスポートなのでパスフレーズの設定入力が求められる。<code>-name</code>は任意入力だがたいていは誰彼が使うために発行したのかが区別できるように書く。</p>

<pre><code class="language-brush:plain">openssl pkcs12 -in "input_file.p12" -nodes -out "output_file.pem"  
</code></pre>

<p>PKCS12からの変換は外部からシステムへのインポートなので正しいパスフレーズを解除入力しないと実行されない。</p>

<p>なおWindowsでは証明書ファイルをフォーマット形式ではなく用途によって既定の拡張子を定めている。用途と合致しない拡張子の証明書をインポートしようとすると正しい場所へストアされずに悩まされることがある。<sup id="fnref:3"><a href="http://multix.jp/openssl-command/#fn:3" rel="footnote">3</a></sup></p>

<hr>

<h4 id="">証明書の正当性検証</h4>

<p>ルートCA証明書は自分自身を証明して他には依存していないため以下のコマンドでOKが返る。<sup id="fnref:4"><a href="http://multix.jp/openssl-command/#fn:4" rel="footnote">4</a></sup></p>

<pre><code class="language-brush:plain">openssl verify ルートCA証明書  
</code></pre>

<p>ルートCA証明書で直接署名された（ルートから見て深さが1の）証明書は<code>-CAfile</code>オプションにルートCA証明書を与えることで直接検証できる。</p>

<pre><code class="language-brush:plain">openssl verify -CAfile 親証明書 子証明書  
</code></pre>

<p>中間CA証明書で署名された（ルートから見て深さが2以上の）証明書の場合は検証確認が煩雑になる。取り敢えず簡便なのは、ルートCA証明書と必要な中間CA証明書をすべて含む一つの親証明書を作成してこれで検証する方法だろう。</p>

<pre><code class="language-brush:plain">cat StartSSL_CA_Root.pem StartSSL_CA_Class1.pem &gt; StartSSL_CA.pem  
openssl verify -CAfile StartSSL_CA.pem cert.pem 

cert.pem: OK  
</code></pre>

<hr>

<h4 id="ssl">アプリケーションのSSL警告を抑制する</h4>

<p>システムにバンドルされていない証明書をシステムに追加するには<code>ca-certificates</code>パッケージに付属の<code>update-ca-trust</code>コマンドを使用する。<code>/etc/pki/ca-trust/source/anchors/</code>に中間CA証明書をコピーして<code>update-ca-trust extract</code>を実行すると<code>/etc/pki/ca-trust/extracted/pem/*.pem</code>証明書ストアに結合される。<sup id="fnref:5"><a href="http://multix.jp/openssl-command/#fn:5" rel="footnote">5</a></sup></p>

<pre><code class="language-brush:plain">cp StartSSL_CA_Class1.pem /etc/pki/ca-trust/source/anchors/  
update-ca-trust extract  
openssl verify -CAfile /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem cert.pem

cert.pem: OK  
</code></pre>

<p>この証明書ストアは<code>wget</code>コマンド等が参照しているので、この作業を行うとこのCA証明書を参照するホストについては<code>--no-check-certificate</code>オプションを付加する必要がなくなる。自作CA証明書（いわゆるオレオレ証明書）もこの方法でシステムに登録できる。</p>

<hr>

<div class="footnotes"><ol><li class="footnote" id="fn:1"><p>パスフレーズ未削除運用するときに考慮すべき最大の問題は、サーバマシン自体を再起動した際にサービスそのものが、現場でサーバ管理者が正しいパスフレーズを入力するまで機能停止しつづけることだろう。時にはこのパスフレーズを誰も知らなかったり唯一知っていたはずの人物が何年も前に他界してたりするものである。 <a href="http://multix.jp/openssl-command/#fnref:1" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:2"><p>慣習的なものだが拡張子の用途とファイル形式が合致していないので混乱しやすい。<strong>.pem</strong>はPEM形式であることを示すがそれだけではKEYかCSRかCRTか判らないし、<strong>.crt</strong>が証明書なのは判るもののPEMかDERかPKCS7かはファイルを開いてみるまで判らない。 <a href="http://multix.jp/openssl-command/#fnref:2" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:3"><p>Windowsの場合<strong>.crt</strong>はサーバ用証明書で<strong>.pfx</strong>は個人用クライアント証明書と見做され<strong>.der</strong>はOutlookやアドレス帳へのクライアント証明書インポートに使われる。 <a href="http://multix.jp/openssl-command/#fnref:3" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:4"><p>システムにバンドル済のルートCA証明書は<strong>/etc/pki/tls/certs/ca-bundle.crt</strong>に、信頼済証明書は<strong>/etc/pki/tls/certs/ca-bundle.trust.crt</strong>に結合されて格納されている。これらは<strong>ca-certificates</strong>パッケージで提供されており<strong>yum update</strong>で更新されることもありえるから直接編集するべきではない。 <a href="http://multix.jp/openssl-command/#fnref:4" title="return to article">↩</a></p></li>

<li class="footnote" id="fn:5"><p>更新されるストアファイルは<strong>email-ca-bundle.pem</strong>、<strong>objsign-ca-bundle.pem</strong>、<strong>tls-ca-bundle.pem</strong>の3つで、それぞれメール個人署名、オブジェクトコード署名、SSL通信署名に対応する。 <a href="http://multix.jp/openssl-command/#fnref:5" title="return to article">↩</a></p></li></ol></div>]]></content:encoded></item></channel></rss>