#contents

#br


* リンク [#g2710130]

- [[OpenSSL本家:http://www.openssl.org/]]
- [[OpenSSL日本語サイト:http://www.infoscience.co.jp/technical/openssl/]]

- [[OpenSSH(日本語):http://www.openssh.com/ja/index.html]]

* id_dsa [#n02bc232]

(2017/02/20)

公開鍵認証でホストにSSH接続しようとすると、以下のメッセージが出た。

 Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

"-v" を付けてやり直したところ、こんな行が含まれていた。

 debug1: Skipping ssh-dss key /Users/bear/.ssh/id_dsa - not in PubkeyAcceptedKeyTypes

dsa は(暗号化方式として弱いから)受け入れてくれなくなったということらしい。

解決策は .ssh/config に、DSAを受け入れるように書く方法もあるが、それだと弱い暗号を使い続ける状況は変わらないため、RSA 鍵を作る。環境によってはその他のもっと強い暗号方式でも良い。

 sshkeygen -t rsa -b 4096


* ファイルの暗号化と復号(公開鍵利用の場合) [#t8d49c67]

最初に秘密鍵/公開鍵ペアを作成

 [秘密鍵生成]
 openssl genrsa -des3 -out secret.pem
 (パスフレーズ設定を求められる)

 [公開鍵生成]
 openssl rsa -pubout -in secret.pem -out public.pem

次に、ファイルを暗号化。 平文ファイル plain.txt を暗号化して、encrypted.file を作る。

 openssl rsautl -encrypt -pubin -inkey secret.pem -in plain.txt -out encrypted.file

これを復号するには、

 openssl rsautl -decrypt -inkey secret.pem -in encrypted.file
 (秘密鍵のパスフレーズを聞かれる)

とする。

OpenSSL は Windows 版バイナリも配布されているので、いずれでも使えて便利ですね。

* OpenSSLのインストール [#f1937712]

 tar xfz openssl-1.0.0e.tar.gz
 cd openssl-1.0.0e
 ./config shared --prefix=/usr/local --openssldir=/usr/local/openssl
 make
 make test
 make install

バージョン確認

 % openssl version
 OpenSSL 1.0.0e 6 Sep 2011

* OpenSSHのインストール [#c5cd92e1]

 tar xfz openssh-5.9p1.tar.gz
 cd openssh-5.9p1
 ./configure --without-pam --with-zlib=/usr/local
 make

opensslが/usr/local/ssl/配下にインストールされている場合は、下記のようなメッセージが表示されることがある

 checking OpenSSL header version... 90804f (OpenSSL 0.9.8d 28 Sep 2006)
 checking OpenSSL library version... 90704f (OpenSSL 0.9.7d 17 Mar 2004)
 checking whether OpenSSL's headers match the library... no
 configure: error: Your OpenSSL headers do not match your library.
 Check config.log for details.
 Also see contrib/findssl.sh for help identifying header/library mismatches.

原因はその通りなので、configureのオプションを指定してあげれば良い

 ./configure --without-pam --with-zlib=/usr/local --with-ssl-dir=/usr/local/openssl

さて。sshdのサービスが動いているなら停止させてから、install

 make install

バージョンの確認

 root # ssh -V
 OpenSSH_5.9p2, OpenSSL 1.0.0e 6 Sep 2011
  (5.9p1 をインストールすると p2 が出る)

バージョンが古いのが出るときは、 which sshとして、/usr/bin/sshになってないか確認。 たとえば、こんなふうにする。

 cd /usr/bin
 ls ssh*
   --> 5つくらいssh関連コマンドが出る
 rm ssh*
 ln -s /usr/local/bin/ssh* .

こんな感じ。

また、OpenSSHのバージョンは上がっているのに、OpenSSLが古いものになっている場合も、同様に古いOpenSSLライブラリが呼ばれてるので、同じような処理をする。

* OpenSSL の make install でこける [#vf3f933f]

 make install 中に、下記のエラーを吐いてこけた。

 cp: fipscanister.o.sha1: No such file or directory
 cp: fipscanister.o: No such file or directory
 *** Error code 1
 
 Stop in /usr/local/src/openssl-0.9.8j/fips.
 *** Error code 1
 
 Stop in /usr/local/src/openssl-0.9.8j.

 初めてのケース。
 原因はよくわからない。困った。

 【追記】
 OpenSSL 0.9.8k では通った。意味不明。

* OpenSSH configure 時のオプションで… [#r0fc806c]

 ./configure --with-ssl-dir=/usr/local/openssl

として実行すると、

 checking OpenSSL header version... 1000005f (OpenSSL 1.0.0e 6 Sep 2011)
 checking OpenSSL library version... 9080ef (OpenSSL 0.9.8n 24 Mar 2010)
 checking whether OpenSSL's headers match the library... no
 configure: error: Your OpenSSL headers do not match your
 library. Check config.log for details.
 If you are sure your installation is consistent, you can disable the check
 by running "./configure --without-openssl-header-check".
 Also see contrib/findssl.sh for help identifying header/library mismatches.

となって、止まる。どこかに 0.9.8n のライブラリの残骸があるのかもしれないが、これまた見つけられない。

で、

 ./configure --without-pam --with-zlib=/usr/local --with-ssl-dir=/usr/local/openssl

とすると、

 checking OpenSSL header version... 1000005f (OpenSSL 1.0.0e 6 Sep 2011)
 checking OpenSSL library version... 1000005f (OpenSSL 1.0.0e 6 Sep 2011)

通る。 --without-pam だけ付けても通らなかったが、--with-zlib=/usr/local を付けたら通った。

理由は不明。


* 暗号化されていない秘密鍵の取り出し [#h22640cc]

通常、秘密鍵はこんな感じになっている

 -----BEGIN DSA PRIVATE KEY-----
 Proc-Type: 4,ENCRYPTED
 DEK-Info: DES-EDE3-CBC,B166280A577EB4F7
 ...

2行目にあるとおり、これは encrypted 。

特にコレを意識したことはなかったんだけど、秘密鍵を必要とする機器にこの鍵を登録しようとしたところ「暗号化されているのでダメ」と言われてしまった。

これを復号する方法は次のとおり

 openssl dsa -in id_dsa

id_dsa は秘密鍵ファイル。

テキストファイル key.txt に出力したい場合は、

 openssl dsa -in id_dsa -out key.txt

とする。

いずれの場合もパスフレーズの入力を求められる。 機器が登録を求めていたのは「パスフレーズのかかっていないもの」だったということですかね。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS