カテゴリー
Windows

OpenSSL で作る SANs 対応かつ SHA256 使用の自前認証局。

The same article in English
投稿アップデート情報  追記(10/28)

 今回の騒ぎ“Qualys SSL Labs – Projects / SSL Server Test” をやったとき,テスト結果にやらオレンジやらが乱舞していた (^_^;)。
 
||赤いの||

  1. Trusted : No NOT TRUSTED <<---- これは,自前認証局を使っているせいなので,自信をもって無視する(笑)。
  2. IE 6 / XP No FS 1 No SNI 2 : Protocol or cipher suite mismatch : Fail3 <<---- うちの SSL サーバのユーザは私だけで,私は IE 6 / XP なんぞ使わないので,これも無視。
  3. Fail3 “Only first connection attempt simulated. Browsers tend to retry with a lower protocol version.” なんだそうだ。うちの SSL サーバはより低レベルのプロトコルは受けつけないが,これも別に問題なし。
  4.  というわけで,赤いのについては何もやらなくてよし。

||オレンジの||

  1. Prefix handling : Not valid for “www.o6asan.com” :CONFUSING
  2. Signature algorithm : SHA1withRSA : WEAK
  3. Chain issues : Contains anchor <<---- Ivan Ristić“Chain issues Contains anchor” で書いていたことを根拠に,無視。
  4. Not in trust store <<---- これも自前認証局のせいなので,無視。
  5. Downgrade attack prevention : No, TLS_FALLBACK_SCSV not supported
  6. Forward Secrecy : With some browsers

 オレンジのについては, 1, 2, 5, 6 について対処する必要がありそうだ。まずは, 5 と 6 から。 1 と 2 は証明書そのものを作り変えないといけないので,後回し。

  1. Apache 2.4.10 (httpd-2.4.10-win32-VC11.zip) を 10/20 バージョンにアップデートした。この版は openssl-1.0.1j を使ってビルドされてて,1.0.1j は TLS_FALLBACK_SCSV をサポートしたから。
  2. httpd-ssl.conf において, SSLHonorCipherOrder on をアンコメントし, SSLCipherSuite Directive の値を変更。
    HIGH:MEDIUM:!aNULL:!MD5

    EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384
    EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256
    EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP
    !PSK !SRP !DSS

       参考 : Configuring Apache, Nginx, and OpenSSL for Forward Secrecy
    ↓ RC4 関連で, 12/23 に下記に変更した。
    EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384
    EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH
    EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"

       Ref : RC4 in TLS is Broken: Now What?

    SSL サーバがモバイルや旧世代の OS/browser をサポートしなくてはいけない場合は,それらに合わせた設定もする必要が生じる。うちのは,関係ないけど。
  3. この作業後,テストしたら, “Downgrade attack prevention : Yes, TLS_FALLBACK_SCSV supported”“Forward Secrecy : Yes (with most browsers) ROBUST” に変わった。

 次は, 1 と 2。
 1 は自前認証局の Common Name が o6asan.com だけだからだ。で,新しいのは, o6asan.com も www.o6asan.com もサポートさせないといけない。しかし,我が家の SSL サーバ用の IP は,一つしか割り当てる気がないよという問題がある。これに対処するために, SNI(Server Name Indication) を使う。 8 月ごろに,くりくりさんが取り組まれていた。まあ,まだすべての OS/browser がサポート完了しているわけではないが……それでも,かなりましになってきたのは確か。ワイルドカード証明書か SAN かということになるが, SANs で行くことにした。だって,うちの SSL サーバに任意のサブドメインを受け入れさせる必要はないでしょ。これについては Apache からも制限できるとはいえ,必要のない扉を大きく開けるのはポリシーに反する。
 2 は前の証明書を作ったときに OpenSSL の default を使ったからである。デフォルトだと,今もかわらず SHA1 を使うようになっている。今回は, default_md = sha256 にして,こさえるワ。
 28 日,改めて Server Name Indication を読み込んでいたのだが, SNI と ワイルドカード証明書か SAN は次元の違う話のようだ。難しいなぁ。

 openssl.cnf (← この標準の名称のままで行く) を Apche24conf から c:openssl-1.0.1x-winxxssl (← OpenSSL をフルでインストールすると,ここがデフォルト) にコピーして,以下のようにカスタマイズする。

    一行アンコメントし,いくつか値を変更する。

  1. dir = ./demoCA —->> dir = X:/demoCA <<----絶対パス
  2. default_crl_days = 30 —->> default_crl_days = 365
  3. default_md = default —->> default_md = sha256
  4. default_bits = 1024 —->> default_bits = 2048
  5. # req_extensions = v3_req —->> req_extensions = v3_req
    何行か追加する。
  1. [ v3_req ] のエリアに subjectAltName = @alt_names を追加。
  2. [ v3_ca ] エリアの直前に以下を追加。
    [ alt_names ]
    DNS.1 = example.com
    DNS.2 = www.example.com

     
    必要なドメインを DNS.1, DNS.2, DNS.3, … のように追加できる。
  3. クライアント証明書も必要な場合は, openssl.cnf の最後に以下を追加する
    [ ssl_client ]
    basicConstraints = CA:FALSE
    nsCertType = client
    keyUsage = digitalSignature, keyEncipherment
    extendedKeyUsage = clientAuth
    nsComment = "OpenSSL Certificate for SSL Client"

 さて,新自前認証局の作成をしよう。(参考 : 本家のお世話-#68)

    ||自前 CA 作成||

  1. X:/ に myCA フォルダを作る。
  2. private と newcerts という 2 つのフォルダと index.txt を myCA に作る。
  3. cmd.exe を 管理者として実行。
    pushd X:myCA
    echo 01 > serial
    openssl req -new -keyout privatecakey.pem -out careq.pem
    openssl ca -selfsign -in careq.pem -extensions v3_ca -out cacert.pem
    copy cacert.pem (Drive_SV):Apache24confssl.crt
    copy cacert.pem my_ca.crt

      注)(Drive_SV) というのは,自宅サーバ上のサーバウェア用パーティションである。

    ||Server 証明書作成||

  1. pushd X:myCA
    openssl genrsa -out server.key 2048
    openssl req -new -out server.csr -key server.key
  2. 次のコマンドで CSR 内の SANs を確認する。(中にちゃんと ‘Subject Alternative Name’ があるかな?)
    openssl req -text -noout -in server.csr
  3. openssl ca -in server.csr -out server.crt -extensions v3_req
    copy server.key cp_server.key
    openssl rsa <cp_server.key> server.key
    copy server.key (Drive_SV):Apache24conf
    copy server.crt (Drive_SV):Apache24conf
    ||Client 証明書作成||

  1. pushd X:myCA
    openssl req -new -keyout client.key -out client.csr
    openssl ca -policy policy_anything -extensions ssl_client -in client.csr -out client.crt
    openssl pkcs12 -export -in client.crt -inkey client.key -out clientcert.p12

   SANs 作成参考リンク : FAQ/subjectAltName (SAN), Multiple Names on One Certificate.

 やっと,「 SANs 対応かつ SHA256 使用の自前認証局」が出来た。満足じゃ!!

「OpenSSL で作る SANs 対応かつ SHA256 使用の自前認証局。」への11件の返信

おはようございます。

これはすごい!!
かなり気合入ってますね。
ワイルドカードやSANsの証明書からSNIからSHA256と
色々とてんこもり!!
かなりがんばられたんじゃないですか???

俺も販売店にきいたら、sha256できるぽいのでそのうち試してみます。
pleskの方でcsrはつくれないぽいですが、
アップできるみたいし他の所でつくったのあげればいけるかも??レンタルサーバーにきいてみます。

くりくりさん,こんばんは。

> かなりがんばられたんじゃないですか???
はーい,がんばりましたよぉー(笑)。
本式に思い立ったのは, POODLE 騒ぎからですから, 10 日はかかってますね。 Heartbleed の関係で SSL Server Test を使ったときから,そこで得られる情報は気になってまして,いろんな警告にもいつか対処してやろうと思ってました。もっとも,いまだに自前認証局ですから,すべての警告を消すのは望むべくもなかったですが。ただ,仕事で SSL を使うのと違って, XP / IE6 / ガラケー / スマホ等々を考慮に入れなくていいので,その点は楽でした。

内容的には,本当にてんこ盛りになりましたね。初めは,証明書をどのレベルからつくりかえればいいのかさえもわからなかったのですが, default_md は [ CA_default ] にあるもので,ヤッパ CA もつくりかえるべきなんだろうと思って,結局全部やり替えました。その関係で,もと CA 関係の revoke もやっとかなきゃいけなかったし, WordPress 用の pem のつくりかえもやったんですが,記事のほうは息切れして,その辺は端折っちゃいました。なにしろ長くなったもので,面倒くさくって(苦笑)。

今どき,自前認証局は流行らないんでしょうね。今回の記事の件でアチコチ見に行きましたが,日本以外まで含めても「SANs 対応かつ SHA256 使用」のすべてを自前でやってる記事は,見当たりませんで,「完全に自己満足の世界だなあ」と痛感しました(滝汗)。

しかし,10 月は POODLE のほかに, KB2949927 のゴタゴタもありましたし,それなりにタイムリーな話題かなとも思ってます(自画自賛―爆)。

くりくりさん,こんばんは。

改めて, SNI の話を読んでいたのですが, SNI はワイルドカードや SANs の解決法として導入されたんですか? まだよく理解できてないなぁ→自分。今のところ,自分がやりたかったことはできたので,良しとしてるんですが, HTTPS はまだまだよくわかってません。

o6asanさん こんばんは。

いつもお世話になりまして有り難うございます。

さて、日本シリーズは只今7回裏の途中”5対0”で鷹さんが優勢。(笑)
このまんま鷹さんいくでしょうね。

FHさん,こんばんは。

ありがとうございます。

現在,鋭意応援中です。
トナリンの登板に珍しくも 5 点も取ってくれたので,このまま行ってくれることを願ってます。

このまま行く = 日本一ーー!!

という意味です。この試合だけではなくて(ヘヘッ)。

追記(10:02pm):
サファテが余計な 1 点を与えましたが,無事,勝ちました。ヤレヤレ。

おはようございます。

今日メールでyum関係の警告が来ていたので
調べてみたら出力が日本語になっていました。
自分のは英語なのにおかしいなとおもっていたら・・・。
centos6.6来てました。さっそくバージョンアップ。
[root@www ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
http://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.6/Japanese

いつもstrangerさんに教えてもらうのですが今回もなかったので油断してました(笑)

>SNI はワイルドカードや SANs の解決法として導入されたんですか?
私も詳しくはわかりませんが、両方とも同時に研究されていたという感じでしょうか。サポートも同じ2007年くらいですからね。
ただ、SANsやワイルドカードはひとつの証明書で複数のコモンネームを使う技術です。SNIはひとつのIPで複数の証明書が可能になる技術です。
SANsはかなり高いのでうちは恐らく導入できないでしょう。
SNIをつかった900円くらいの証明書を何個も持つようになるでしょう。証明書が100個以上の管理とかやだな・・・。

くりくりさん,こんばんは。

> SANsやワイルドカードはひとつの証明書で複数のコモンネームを使う技術です。
> SNIはひとつのIPで複数の証明書が可能になる技術です。
なるほど。両方組み合わせると, IP アドレスの数も少なくて済むし,証明書の数も少なくなるのですね。

> 証明書が100個以上の管理とかやだな・・・。
ウワッ。しかし, SANs の場合はコモンネームが変わったら作り直す必要があるわけで,流動的なコモンネームを含めてしまうと,それはそれで大変ですね。

しかし, HTTPS プロトコルが一般的に使われるようになると,このあたりの管理の大変さが,自宅サーバの数をさらに減らしていく気がします。

> CentOS release 6.6 (Final)
Final になりましたか。 VMWare 上の CentOS を 6.6 にしました。特に問題はないようです。

o6asanさん こんばんはです。

鷹さん 今夜も勝ちましたねえ。

はじめのところで2対0まで観ていてお客さんが・・・
お帰りになったところで観戦しますと9回裏から延長10回でして。
結果、サヨナラホームランで!!!。

「ええどええど・・・。」は亡き電右衛門さんのお言葉です。

>このまま行く = 日本一ーー!!

はいー!!! (ニコ) これも電右衛門さんふう。

FHさん,こんばんは。

ありがとうございます。
誰とは言いませんが,先発が独り相撲で試合を壊しかけまして。薄氷を踏む思いでしたが,あれだけ不振だったアキラ(サマサマです)のサヨナラホームランで,勝てました。
あと一勝,あと一勝と,呪文のように唱えておりまする(爆)。

o6asanさん こんばんは。

>あと一勝,あと一勝と,呪文のように唱えておりまする(爆)。

はぁイー、そのo6asanさんの呪文が効果アリ?。

只今、鷹さんが1点・・・ヨシヨシ!。

このまんま決めてしまいましょう!!。

FHさん,こんばんは。

ありがとうございました。
すっきりしない決まり方でしたが,勝ちましたよー。

しかし, 3 四球 + 守備妨害で決まりとはねぇ。
3 年ぶり,日本一です。

o6asan へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です