メランジ雑記帳

2010年4月29日

nssを使って復号を行うアプレットを作成する

カテゴリー: LINUX, PKCS, java — admin @ 7:34 AM
 public String decrypt(String cipher, String serverCert) {
        cat.debug("start decrypt");
        try {
            byte[] b = Base64.decode(cipher);
            cat.debug("chiper = " + Dump.getDump(b));
            p11 = new PKCS11Sign();
            byte[] cleartext = p11.decrypt("kansaieigyo/kansaieigyo", b);
            cat.debug("cleartext = " + Dump.getDump(cleartext));

            // 暗号が解けたのであるが、これをさらにサーバの公開キーで暗号化する。
              byte[] bincert  = Base64.decode(serverCert);
             X509Certificate svrCert = null;
            try {
                svrCert = p11.getX509Certificate(bincert);
            } catch(Exception ex) { ex.printStackTrace(); }
              byte [] reciphered =  p11.encrypt(cleartext, svrCert);
               return Base64.encode(reciphered);
        } catch(Exception e) { e.printStackTrace(); }
        return null;
    }

これを呼ぶ側のjavascriptでは

           function decryptCommonKey() {
            var cleartext = document.myApplet.decrypt(encryptedCommonKey, serverCert);
           }

とする。

そうすると以下のような結果が得られる。
一度平文にしたものをさらにサーバの公開キーで暗号化しているのは、安全性の
ため。これで解読するのは、3DES等の共通キーで、本当の文書を暗号化する場合に
これは使い捨てのような形で生成される。しかしこの共通キーを相手に安全に渡すのにRSAを
使うのである(これがSMIMEやX500などでの習慣である)。
ここで利用しているPKCS11なるクラスは、melutil.jarなるjarファイルにライブラリ的にあるものでアプレットのロード時に

<applet code="jp.co.melange.sdp.applet.SignApplet"
                  archive="sdpapplet.jar,log4j-1.2.6.jar,melutil.jar"
                 width="320" height="200" name="myApplet">
</applet>

のように指定している。
上記のものは、関西営業の人物のキーを使うものであるが、これはGUIで選択したりというふにう拡張可能である。

2010-04-29 06:52:49,518 (Thread-4) [SignApplet.java:61]- chiper =
0000: 21 19 0c af df 7b 49 35 4b fd c4 eb e8 b0 f9 ab !....{I5 K.......
0010: 8c d2 3c ff cf e2 cd 2d e5 4e 3c 4f 0e 60 65 d8 ..<....- .N 0020: 74 9e 3b 22 e0 54 65 70 a8 ba e7 05 bd 60 4c 33 t.;".Tep .....`L3
0030: 0a 65 9b d9 f8 8a fc f4 48 33 47 ed df 23 70 01 .e...... H3G..#p.
0040: f4 27 f5 c6 be 8f ba 94 f5 f5 11 73 e5 2e 54 a9 .'...... ...s..T.
0050: bd dd 2e 66 a5 f7 54 71 3a f9 eb 18 d1 82 b2 91 ...f..Tq :.......
0060: 25 a6 88 58 84 21 6e 1b e1 b9 40 83 c1 e3 28 c4 %..X.!n. ..@...(.
0070: 7b 94 b9 9c 7e 7d 8a ee f3 f0 c4 98 0d a6 43 32 {...~}.. ......C2

alias=sdp-test
alias=kansaieigyo/kansaieigyo
after decipher:

2010-04-29 06:52:49,760 (Thread-4) [SignApplet.java:64]- cleartext =
0000: 2f 07 6b ea dc 6d 8a 9d 37 15 a8 d6 64 c2 ec 8c /.k..m.. 7...d...
0010: 73 70 ce 4a 8f 8f 9d 01 sp.J....

]

ただしアプレットのような外部から(オンラインで)引っ張ってきたプログラムに各種のローカルの資源を
自由にアクセスさせるのは危険であるから、java appletではかなり厳しいアクセス制限が課されている。
したがって、これを実行させるクライアントUNIXマシーンの/usr/java/default/jre/lib/security/java.policyファイルには

// melange add
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.pkcs11";
permission java.io.FilePermission "/etc/pki/nssdb/mypkcs11.config", "read";
permission java.io.FilePermission "/usr/lib64/libsoftokn3.so", "read";

permission java.security.SecurityPermission "insertProvider.SunPKCS11-NSS";
permission java.security.SecurityPermission "authProvider.SunPKCS11-NSS";
permission java.security.SecurityPermission "removeProvider.SunPKCS11-NSS";

のような記述を追加しておくこと。/etc/pki/nssdb/mypkcs11.configには、

name = NSS
slot = 2
library = /usr/lib64/libsoftokn3.so
nssArgs = "configdir='/etc/pki/nssdb' certPrefix='' keyPrefix='' secmod='secmod.db' flags=readOnly"

のような設定がある。
Browserの種別や、OSの種別を区別することで、configファイルの配置を変更できるようにするつもりである。
現在のこの関係で弊社が開発してきたものは、
CAPI用(Active X)==>IEのみ対応
SUNのpkcs11==>mozillaのみ(WindowsではIEでもいけるようにできるはず)
電子入札用のapplet + jniのペアである<==これはIEでもMozilla, NSでもOK

2010年4月24日

nssをつかっての簡単な署名をするアプレットを作成

カテゴリー: 未分類 — admin @ 12:16 PM

nssの内部ストアを利用することにより、ICカードやリーダ・ライタがなくてもPKIのテストを簡単にできるようにしてみた。


2010-04-24 12:05:06,591 (AWT-EventQueue-2) [SignApplet.java:20]- *** start paint ***
2010-04-24 12:05:08,297 (Thread-4) [SignApplet.java:31]- start sign
2010-04-24 12:05:08,311 (Thread-4) [SignApplet.java:34]- digest = 0000: 64 61 74 61 0a data.
alias=sdp-test
alias=kansaieigyo/kansaieigyo
2010-04-24 12:05:08,452 (Thread-4) [PKCS11Sign.java:37]- before sign data is 0000: 64 61 74 61 0a data.
2010-04-24 12:05:08,452 (Thread-4) [PKCS11Sign.java:37]- before sign data is 0000: 64 61 74 61 0a data.
pkcs1sign of data is
0000: 0f 7a 0e 1b a9 30 7c cb 80 8a 72 f5 c7 2b 69 85 .z...0|. ..r..+i.
0010: 2b 2e 60 55 b6 88 8e 31 01 eb 2c cf a8 51 dd 52 +.`U...1 ..,..Q.R
0020: ab c1 35 f4 af 10 01 61 c9 8d ea 1d 84 7f cb 7d ..5....a ......}
0030: c3 88 44 b4 87 1d 7f 7b 8e 1d db 57 3e 5d 7a 4f ..D...{ ...W>]zO
0040: a1 b2 57 e4 39 8b b2 c0 0b 52 62 95 48 a0 32 bf ..W.9... .Rb.H.2.
0050: 35 11 b2 f3 06 da 6c 2b 05 d2 22 da 13 e8 f3 e3 5.....l+ ..".....
0060: d2 65 c3 3f 91 d5 76 c8 d3 d1 01 4e e3 69 76 36 .e.?..v. ...N.iv6
0070: d2 67 b2 40 db ec 45 73 d6 50 2c 36 d5 73 33 23 .g.@..Es .P,6.s3#

2010-04-24 12:05:08,461 (Thread-4) [SignApplet.java:38]- sign =
0000: 0f 7a 0e 1b a9 30 7c cb 80 8a 72 f5 c7 2b 69 85 .z...0|. ..r..+i.
0010: 2b 2e 60 55 b6 88 8e 31 01 eb 2c cf a8 51 dd 52 +.`U...1 ..,..Q.R
0020: ab c1 35 f4 af 10 01 61 c9 8d ea 1d 84 7f cb 7d ..5....a ......}
0030: c3 88 44 b4 87 1d 7f 7b 8e 1d db 57 3e 5d 7a 4f ..D...{ ...W>]zO
0040: a1 b2 57 e4 39 8b b2 c0 0b 52 62 95 48 a0 32 bf ..W.9... .Rb.H.2.
0050: 35 11 b2 f3 06 da 6c 2b 05 d2 22 da 13 e8 f3 e3 5.....l+ ..".....
0060: d2 65 c3 3f 91 d5 76 c8 d3 d1 01 4e e3 69 76 36 .e.?..v. ...N.iv6
0070: d2 67 b2 40 db ec 45 73 d6 50 2c 36 d5 73 33 23 .g.@..Es .P,6.s3#

2010-04-24 12:05:08,462 (Thread-4) [SignApplet.java:46]- getCert

というjava consoleの出力が得られた。

tomcat側のログは

2010-04-24 09:29:56,238 (http-9080-Processor25) servlet.SignDocHTML#doGet[248]- action is SignedDigest
2010-04-24 09:29:56,238 (http-9080-Processor25) servlet.SignDocHTML#doVerify_Go[136]- Create SignedDigest request
2010-04-24 09:29:56,239 (http-9080-Processor25) servlet.SignDocHTML#doVerify_Go[139]- SignerCert: MIIDQTCCAqqgAwIBAgIBajANBgkqhkiG9w0BAQQFADBWMQswCQYDVQQGEwJKUDEcMBoGA1UEChMTTWVsYW5nZSBDb3Jwb3JhdGlvbjEQMA4GA1UECxMHUEMtQ2x1YjEXMBUGA1UECxMOTWVsYW5nZVNvZnQgQ0EwHhcNMDUwMTMwMDYwODMzWhcNMTUwMTI4MDYwODMzWjCBmDELMAkGA1UEBhMCSlAxCzAJBgNVBAoMAmNvMQwwCgYDVQQLDANBQkMxFjAUBgNVBAsMDUthbnNhaSBCcmFuY2gxGTAXBgNVBAsMEFNhbGVzIERlcGFydG1lbnQxFjAUBgNVBAMMDUhpZGVvIE5vZ3VjaGkxIzAhBgkqhkiG9w0BCQEWFHNkcHVzZXI0QHNkcC10ZXN0LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6jh2hRcAo6ZxktIzKzOhZLPCCVGEJ3HNW576NKz0+XKst1qIXJ+zsWZ/XUrO4fAB9H2LfFWcQnfrl1CHHMvponeIigoS450u7RysjaWuti0W5mf+1yH8updDIDwNKrTSZhEfSoUSBY0oM5gHAYfwAPar013Tondz53z8rkpyu3wIDAQABo4HbMIHYMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBT5rh1wCAeP0wH8FIhTyVz5AUGH7DB+BgNVHSMEdzB1gBSs2d3N+e9kDKMCLX99Ht9//fTLbqFapFgwVjELMAkGA1UEBhMCSlAxHDAaBgNVBAoTE01lbGFuZ2UgQ29ycG9yYXRpb24xEDAOBgNVBAsTB1BDLUNsdWIxFzAVBgNVBAsTDk1lbGFuZ2VTb2Z0IENBggEAMA0GCSqGSIb3DQEBBAUAA4GBACUt08Me7fjDxZqrQ0zUgzqIeaa99pTSAMDiZ47eQ9spoX5cfhIAb0M+04GrdMVxyXArdKp5RAhNNxGT7qPlJtelHyQZezjPVc/ka8ae/QJhM9y2iduDXIYQgUI2mITtFFTSQsGidEXCU81Dj45Je0Lyx7Rw1T2Y8Rnoq/tvi2S4
2010-04-24 09:29:56,241 (http-9080-Processor25) util.DmsUtil#getCertDN[511]- x509certificate class=sun.security.x509.X509CertImpl

2010-04-24 09:29:56,245 (http-9080-Processor25) servlet.SignDocHTML#doVerify_Go[158]- publicKey :RSA public key (1024 bits):
public exponent: 10001
modulus: ba8e1da145c028e99c64b48ccacce8592cf082546109dc7356e7be8d2b3d3e5cab2dd6a21727ecec599fd752b3b87c007d1f62df1567109dfae5d421c732fa689de2228284b8e74bbb472b23696bad8b45b999ffb5c87f2ea5d0c80f034aad34998447d2a14481634a0ce601c061fc003daaf4d774e89ddcf9df3f2b929caedf

2010-04-24 09:29:56,252 (http-9080-Processor25) util.DtsUtil#readFile[1300]- contentFile:read contentFile len=5
2010-04-24 09:29:56,261 (http-9080-Processor25) util.PKCS11Sign#verify[153]- verify is true
2010-04-24 09:29:56,261 (http-9080-Processor25) servlet.SignDocHTML#doVerify_Go[179]- b is true
2010-04-24 09:29:56,442 (http-9080-Processor25) dtsapi.DTSAPI#getSessionAttribute[2452]- get attribute(desSessionId): 79313DB4A175496C62243614BBA13746
2010-04-24 09:29:56,443 (http-9080-Processor25) dtsapi.DTSAPI#[330]- new DTSAPI dmsSession is org.apache.catalina.session.StandardSessionFacade@8a52b6
userDN = CN=Hideo Noguchi,OU=Sales Department,OU=Kansai Branch,OU=ABC,O=co,C=JP
2010-04-24 09:29:56,445 (http-9080-Processor25) util.LdapFind#find[301]- base = CN=Hideo Noguchi,OU=Sales Department,OU=Kansai Branch,OU=ABC,O=co,C=JP
2010-04-24 09:29:56,446 (http-9080-Processor25) util.LdapFind#find[305]- new base = CN=Hideo Noguchi,OU=Sales Department,OU=Kansai Branch,OU=ABC,O=co,C=JP
2010-04-24 09:29:56,471 (Thread-113) util.LdapFind#run[1600]- base=CN=Hideo Noguchi,OU=Sales Department,OU=Kansai Branch,OU=ABC,O=co,C=JP
2010-04-24 09:29:56,704 (http-9080-Processor25) servlet.Login#handleRequest[271]- checkLDAP:userDN : CN=Hideo Noguchi,OU=Sales Department,OU=Kansai Branch,OU=ABC,O=co,C=JP
2010-04-24 09:29:56,705 (http-9080-Processor25) servlet.Login#handleRequest[276]- loginDateTime : 2010-04-24 09:29:56 JST
2010-04-24 09:29:56,705 (http-9080-Processor25) servlet.Login#handleRequest[282]- call DTSAPI Login
2010-04-24 09:29:56,707 (http-9080-Processor25) dtsapi.DTSAPI#Login[1183]- Login Base64&URL encoded cert------

2010-04-24 09:29:56,707 (http-9080-Processor25) dtsapi.DTSAPI#Login[1184]- -----------------------------------
2010-04-24 09:29:56,708 (http-9080-Processor25) dtsapi.DTSAPI#genDESServletURL[1105]- genDESServletURL: snoop=false snoopURL=null
2010-04-24 09:29:56,708 (http-9080-Processor25) dtsapi.DTSAPI#Login[1191]- Login start!!-------------------
2010-04-24 09:29:56,709 (http-9080-Processor25) dtsapi.DTSAPI#Login[1193]- DTSAPI_version is 2
2010-04-24 09:29:56,709 (http-9080-Processor25) dtsapi.DTSAPI#Login[1194]- TOMCAT_version is 4

firefoxにjava pluginを設定する(linux)

カテゴリー: 未分類 — admin @ 7:52 AM

firefoxの新しいバージョンをかなり頻繁にインストールするようになった。

$ cd /usr./lib/mozilla/plugin
$ ln -s /usr/java/default/jre/plugin/i386/ns7/libjavaplugin_oji.so

としておくこと。
最初の行は、firefoxのプラグインのディレクトリに移動してる。
2番めの行は、/usr/java/defaultがシステムで利用しているjavaの起点になるディレクトリであり、
jre/以下はjdkを入れないでもランタイムだけでも動作する環境がそのjre以下にある。そして、ブラウザからみてjava pluginという
特殊な共有ライブラリ形式(特定のエントリがあって、どのようなデータ型を処理するのか等を返すと思われる)が、plugin/i386/ns7/以下にあり、
その名前はlibjavaplugin_oji.so というものになっている。i386はCPUの形式、ns7はネットスケープ7以降を示す。libjavapluginの部分は共有ライブラリの名前がlibで始まり、そのあとはそのライブラリをよく表す名前をつけることになっているので適切であるが、ojiはopen java interfaceの意味か?
ともかくもここにシンボリックを張っておけば、ブラウザが起動した時にここにある.soファイルを自動的にスキャンしてくれることになっている。
また、この./usr/java/default/jre/plugin/i386/ns7/libjavaplugin_oji.so は、jni(java native interface)というC言語からjavaあるいはjavaからC言語の共有ライブラリを利用するための規格に則って作られている。

$ ls -l
合計 18472
-rwxr-xr-x. 1 jojo jojo 8847468 2009-12-15 05:48 libflashplayer.so
-rwxr-xr-x. 1 jojo jojo 10017140 2008-10-21 23:22 libflashplayer.so.release
lrwxrwxrwx. 1 jojo jojo 58 2010-04-24 07:52 libjavaplugin_oji.so -> /usr/java/default/jre/plugin/i386/ns7/libjavaplugin_oji.so

となっている。libflashplayer.soはadobeのフラッシュプレイヤーのこと。

たまにjava consoleが表示されないことがあるが、その場合には、Web Developerという「拡張機能」をFireFoxに追加する。すると、以下のようにたくさんのメニュー項目があるなかでjava consoleが見つかる。

2010年4月20日

fedoraについているicedtea関係のfirefoxのpluginをアンインストールする。そして懐かしい環境に。

カテゴリー: LINUX, java, log4j — admin @ 6:00 PM

Fedora上でjava appletの試験をしたかったので、java consoleを開こうとしたら、firefox(3.6.3)のメニューになかった。
いろいろとgoogleで調べた。
まず、プラグインをfirefox内で調べた。すると、opensdkというものがあり、icedteaという、こちらで言うアイスティーという飲み物のような名前のjava(これ自体飲み物?)があり、これがsunのものと一緒にプラグインとして登録されていた(URLにabout:pluginsを入力するか、ツール->アドオンで確認)。
なぜか、一方を有効にするともう一方も有効になり、逆に一方を無効にするともう一方も無効になってしまって、どちらが使われているのか、分からない。

それで、

rpm -qa | grep -i java

でプラグインの名前を調べて、

yum remove java-1.6.0-openjdk-plugin

(rpm -eでも可)
としたら、sunのpluginだけになった。


gnu さんごめんなさい。今のところ、sunのほうが扱い易いです。

sunのjavaのbinで./ContorolPanelを起動して、WIndowsと同じコントロールパネルがlinuxでも表示されて詳細でjava console を有効にできた。

以下は、java consoleである。アプレットのデバッグにlog4jを利用している。

2010年4月12日

IPAexfontをインストールする

カテゴリー: font — admin @ 5:09 PM

数ヶ月前にIPAFontのことを書いたばかりであるが、2010年2月にVer 3.0というものがダウンロードできるようになって
かつ、.otfという拡張子ではなく、普通の.ttfになった。インストールも/usr/share/fontsの任意のディレクトリにそのファイルを
いれて、そのディレクトリでmkfontdirすれば利用できるようになっていた。javaでも高度のフォント選択ができるようなもの(Open OfficeやSQUirrel SQL Client)では直ちに利用できた。
GNOMEのフォント設定でも利用できた。その影響でFireFox(64ビット)のメニューのフォントも綺麗になった。

古い昔からのJavaの4-5種類のフォントから選択する方式(Monospace, Dialog,云々)のためには、fontconfig.*.*を真面目に変更するか、…./jre/lib/fonts/fallbackにシンボリックリンクを張るのがよい。

また、fop関係はそれなりにフォントのメトリック(レイアウト情報)が必要になる。
以下のように辻の字が正しく表示されている。やっと2004年漢字規格が…

2010年4月8日

twitterとtweeter

カテゴリー: twitter — admin @ 6:31 PM

オーディオの世界では、ツイーター(tweeter)といえば、高音域を守備するスピーカーユニットのことである。
一時パイオニアのスーパーツイターなどで遊んだことがある。スピーカーキットと組み合わせてかなり
いい線をいっていた。ドイツ製のフルレンジのスピーカーでいい音であった。エンクロージャはMDFのような木であったが
すこし、共鳴する振動数があったが、それ以外はOKであった。

最近はツイッター(twitter)という別のものがはやっているようである。
桜の季節はここらでは終盤であるが、そのような情報交換にはよいのかも。

2010年4月7日

NSS(PKCS11のストア)にPKCS12ファイルをインポートする…そしてjavaから利用する。

カテゴリー: LINUX, PKCS, java — admin @ 1:28 PM

Network Secuirity ServiceというものがFedoraに付属している。これを使ってみた。

$ modutil -list -dbdir /etc/pki/nssdb

Listing of PKCS #11 Modules
-----------------------------------------------------------
1. NSS Internal PKCS #11 Module
slots: 2 slots attached
status: loaded

slot: NSS Internal Cryptographic Services
token: NSS Generic Crypto Services

slot: NSS User Private Key and Certificate Services
token: NSS Certificate DB

2. CoolKey PKCS #11 Module
library name: libcoolkeypk11.so
slots: 1 slot attached
status: loaded

slot: E-Gate 0 0
token:
-----------------------------------------------------------

となっている。最初のモジュールにはスロットが2つあって、最初のもの(スロット1)は単純にRSA関係や楕円暗号を利用するためのもの。
これはJavaに付属している暗号にはないものをPKCS11経由で使うなどの用途に適している。

もう一方のスロット(2)にはユーザのプライベートキーを入れたり、証明書を入れたりするバーチャルトークン。
こちらの方にPKCS12(プライベートキーと発行人の証明書と証明書がセットになっているもの)を入れるには、

pk12util -i hideonoguchi.p12 -d /etc/pki/nssdb

とする。
これにjavaでアクセスするには、まずkeytoolと言うjavaのアプリケーションで試す。

keytool -v -keystore NONE -storetype PKCS11 \
-providerClass sun.security.pkcs11.SunPKCS11 -providerArg mypkcs11.config -list

結果は以下のようになる。

sh do_keytool_with_internal_pkcs11.sh
キーストアのパスワードを入力してください:
***************** 警告 警告 警告 *****************
* キーストアに保存された情報の完全性は検証されて *
* いません! 完全性を検証するには、キーストアの *
* パスワードを入力する必要があります。 *
***************** 警告 警告 警告 *****************

キーストアのタイプ: PKCS11
キーストアのプロバイダ: SunPKCS11-NSS

キーストアには 1 エントリが含まれます。

別名: kansaieigyo/kansaieigyo
エントリタイプ: PrivateKeyEntry
証明連鎖の長さ: 2
証明書[1]:
所有者: EMAILADDRESS=sdpuser4@sdp-test.jp, CN=Hideo Noguchi, OU=Sales Department, OU=Kansai Branch, OU=ABC, O=co, C=JP
発行者: OU=MelangeSoft CA, OU=PC-Club, O=Melange Corporation, C=JP
シリアル番号: 6a
有効期間の開始日: Sun Jan 30 15:08:33 JST 2005 終了日: Wed Jan 28 15:08:33 JST 2015
証明書のフィンガープリント:

という感じである。

-providerArg mypkcs11.config
であるが、mypkcs11.configには、

name = NSS
slot = 2
library = /usr/lib64/libsoftokn3.so
nssArgs = “configdir=’/etc/pki/nssdb’ certPrefix=” keyPrefix=” secmod=’secmod.
db’ flags=readOnly”

というような内容を書いておくとよい。/usr/lib64のlib64は32ビット版であれば、libでよい。

このヴァーチャルPKCS11をキーストアのようにしてアクセスするには、

import java.io.*;
import java.security.*;
import javax.crypto.*;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.Provider;
import java.security.Security;
import java.security.cert.Certificate;
import java.util.Enumeration;

import sun.security.pkcs11.SunPKCS11;

public class Test {
    public static void main(String args[])
    {
        doIt();
    }

    public static void doIt() {
        try {
            Provider nss = new sun.security.pkcs11.SunPKCS11("mypkcs11.config");
            Security.insertProviderAt(nss, 1);
            KeyStore ks = KeyStore.getInstance("PKCS11", nss);
            ks.load(null,"".toCharArray());
            Enumeration aliases = ks.aliases();
            String alias = null;
            while (aliases.hasMoreElements()) {
                alias = (String) aliases.nextElement();
                System.out.println("alias=" + alias);
            }
            Security.removeProvider(nss.getName());
        } catch (Exception e) { e.printStackTrace(); }
   }
}

のようなプログラムでOKである。

さっそく、PKCS7を作成できるかを試験してみた。使え‘そうなサインアルゴリズムがSHA1withRSAであったので、その
ように調整すると、

2010-04-08 12:03:37,094 (http-9080-Processor25) util.CommonPKCS7#main[550]- ----------------- start PKCS11 case -----------------
alias=kansaieigyo/kansaieigyo
alias=sdp-test

以下の行からNSSのPKCS11のプライベートキーが利用されていることが分かる。

2010-04-08 12:03:37,165 (http-9080-Processor25) util.PKCS11Sign#doIt[68]- key is SunPKCS11-NSS RSA private key, 1024 bits (id 3461876769, token object, sensitive, ex\
tractable)

2010-04-08 12:03:37,166 (http-9080-Processor25) util.PKCS11Sign#doSign[35]- before sign data is
0000: 31 5d 30 18 06 09 2a 86 48 86 f7 0d 01 09 03 31 1]0...*. H......1
0010: 0b 06 09 2a 86 48 86 f7 0d 01 07 01 30 1c 06 09 ...*.H.. ....0...
0020: 2a 86 48 86 f7 0d 01 09 05 31 0f 17 0d 31 30 30 *.H..... .1...100
0030: 34 30 38 30 33 30 33 33 37 5a 30 23 06 09 2a 86 40803033 7Z0#..*.
0040: 48 86 f7 0d 01 09 04 31 16 04 14 a9 99 3e 36 47 H......1 .....>6G
0050: 06 81 6a ba 3e 25 71 78 50 c2 6c 9c d0 d8 9d ..j.>%qx P.l....

pkcs1sign of data is
0000: 95 55 03 db ef 9d 43 87 58 c6 a4 fb 65 93 d0 51 .U....C. X...e..Q
0010: 9a 2e 11 a5 a7 f2 60 db e4 64 06 24 75 9c f6 a7 ......`. .d.$u...
0020: 22 72 37 07 b1 14 be 41 e5 ea 0a 3e 9b 19 93 66 "r7....A ...>...f
0030: f8 74 81 21 46 1d 2b c8 6e 73 96 be fc 62 11 bf .t.!F.+. ns...b..
0040: c1 25 d3 39 90 1e 6d 5f 77 1e b6 39 73 a9 41 9e .%.9..m_ w..9s.A.
0050: bc 9d 36 a7 32 4a e7 1d 4e 74 05 ce 33 05 60 55 ..6.2J.. Nt..3.`U
0060: 9f eb f6 05 71 de 8a 18 5c f4 e5 bb ad dd b9 f5 ....q... \.......
0070: e1 49 9e eb ac ab 6f c4 c9 6f ee ad b6 86 00 1c .I....o. .o......

以下は原始的なrsaの解読でサインのもとになったデータに復元したところ

2010-04-08 12:03:37,172 (http-9080-Processor25) util.CommonPKCS7#pkcs1verify[301]- dec =
0000: 00 01 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
0050: ff ff ff ff ff ff ff ff ff ff ff ff 00 30 21 30 ........ .....0!0
0060: 09 06 05 2b 0e 03 02 1a 05 00 04 14 21 8a 57 b4 ...+.... ....!.W.
0070: ee 3a 04 6a ad a5 6f 50 f6 38 fe cf 91 d9 54 a2 .:.j..oP .8....T.

2010-04-08 12:03:37,174 (http-9080-Processor25) util.CommonPKCS7#sign[249]- issuerNameX=CN=sdp-test.jp,OU=ABC,O=co,C=JP
2010-04-08 12:03:37,175 (http-9080-Processor25) util.CommonPKCS7#sign[271]- PKCS#7 produced, dumping PKCS#7 contents...
2010-04-08 12:03:37,201 (http-9080-Processor25) util.CommonPKCS7#sign[275]- p7(sun) is Content Info Sequence
Content type: 1.2.840.113549.1.7.1
Content: null
PKCS7 :: version: 01
PKCS7 :: digest AlgorithmIds:
SHA
PKCS7 :: certificates:


以下省略(VEIRFY OKであった)

2010年4月2日

fedora12に移行して、openldap (2.4.19)が変わってしまった。

カテゴリー: LDAP, LINUX — admin @ 7:15 AM

というわけで、fedora 11か10あたりからDB_CONFIGファイルがない、とかいろいろ警告がでていたのを無視していたのだが(それでも動作はしていた)、今回はエラーが出て、動作しなくなっていた。

しかたがないのでデバッグ。

  1. “dc=my-domain,dc=com” を仮定しているようなエラーがでている。
  2. `DB_CONFIGがないという警告がでている。

そのせいで起動はできるのだが、ldapaddができない。ということになっていた。

サーバ側を

usr/sbin/slapd -d 255 -h ldap:/// -u ldap

で動かし(emacsのshellモードから手動で)、もう一方でldapaddのスクリプトを起動した。

ldapadd -c -d 255 -vvv -x -D 'cn=ldapmanager,c=JP' -w パスワード \
-f app-test_.ldif  -h 127.0.0.1 -p 389

そうすると、はやり認証のところで、一致する管理者名(cn=ldapmanager,c=JP)がないというエラーになっている。そして、

ldap_bind: Invalid credentials (49)

というエラーになっている。

まず、DB_CONFIGファイルをルートから探した。

find / -name 'DB_CONFIG.*' -print

/usr/share/doc/openldap-servers-2.4.19/DB_CONFIG.example

があった。これを/var/lib/ldapにコピーして問題2は解決。

また、正しく設定ファイルを読んでないように思えたのでデバッグ用サーバ起動コマンドを

usr/sbin/slapd -f /etc/openldap/slapd.conf -d 255 -h ldap:/// -u ldap

に修正した。これで問題1も解決。
しかし、DBを消さないとdc=mydomainなどの傷跡が残ってしまった。

以上のことを定常状態にするために、/etc/init.d/slapdで起動してみた。だめ。
デフォルトの構成ファイルの位置が変わったようである。(slapd.d)などをみるようになっていた。
私の構成はカスタマイズしたものであるので困る。
つまり、/etc/init.d/slapdも-fの引数が少し変だったので、強制的に
/etc/openldap/slapd,confした。OK。

Powered by WordPress