- PR -

【OpenLDAP for win32】証明書エントリの登録がうまくいかない

1
投稿者投稿内容
それでも、猫
会議室デビュー日: 2007/03/13
投稿数: 3
投稿日時: 2007-03-13 21:32
OpenLDAP for win32:openldap-2.2.29-db-4.3.29
OS:WindowsXP Pro SP2

証明書リポジトリを構築しようと、上記環境で構築しているのですが、
証明書エントリの登録がうまくいきません。

#C:\\openldap>ldapadd -D "cn=Manager,o=infokeepers,c=net" -w passward < ldif\\Ichiro.ldif

とコマンドを打つと、

-----------------------------------------------------------------
adding new entry "cn=Ichiro One,ou=CatFoods,o=infokeepers,c=net"
ldap_add: Invalid syntax (21)
additional info: usercertificate;binary: value #0 invalid per syntax
-----------------------------------------------------------------

という警告がでます。
単純な設定が洩れているのだと思われますが、原因が分かりません。
どなたかご教示お願いします。

slapd.conf、ldap.conf、Ichiro.ldif、ldapsearch結果の中は、
それぞれ以下のとおりです。



■--slapd.conf ----------------------------------------------------
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
ucdata-path ./ucdata
include ./schema/core.schema
include ./schema/cosine.schema
include ./schema/inetorgperson.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap:/root.openldap.org

pidfile ./run/slapd.pid
argsfile ./run/slapd.args

# Load dynamic backend modules:
# modulepath ./libexec/openldap
# moduleload back_bdb.la
# moduleload back_ldap.la
# moduleload back_ldbm.la
# moduleload back_passwd.la
# moduleload back_shell.la

# Sample security restrictions
# Require integrity protection (prevent hijacking)
# Require 112-bit (3DES or better) encryption for updates
# Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
# Root DSE: allow anyone to read it
# Subschema (sub)entry DSE: allow anyone to read it
# Other DSEs:
# Allow self write access
# Allow authenticated users read access
# Allow anonymous users to authenticate
# Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
# by self write
# by users read
# by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn. (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!

#######################################################################
# BDB database definitions
#######################################################################

database bdb
#suffix "dc=my-domain,=com"
suffix "o=infokeepers,c=net"

#rootdn "cn=Manager,dc=my-domain,dc=com"
rootdn "cn=Manager,o=infokeepers,c=net"

# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd( and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw passward

# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory ./data

# Indices to maintain
index objectClass eq

-----------------------------------------------------------------


■--ldap.conf ----------------------------------------------------
#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE dc=example, dc=com
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666

#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never

HOST 127.0.0.1
BASE o=infokeepers,c=net
-----------------------------------------------------------------


■--Ichiro.ldif ------------------------------------------------
version: 1
dn: cn=Ichiro One,ou=CatFoods,o=infokeepers,c=net
objectclass: inetOrgPerson
cn: Ichiro One
sn: Ichiro
usercertificate;binary:: 2S+aEGdpLUwTpd0Mz6(省略)
-----------------------------------------------------------------


■--ldapsearch ----------------------------------------------
C:\\openldap>ldapsearch -x -b "o=infokeepers,c=net" -s sub
# extended LDIF
#
# LDAPv3
# base <o=infokeepers,c=net> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# infokeepers, net
dn: o=infokeepers,c=net
objectClass: top
objectClass: organization
o: infokeepers

# CatFoods, infokeepers, net
dn: ou=CatFoods,o=infokeepers,c=net
objectClass: organizationalUnit
ou: CatFoods

# Saburo One, CatFoods, infokeepers, net
dn: cn=Saburo One,ou=CatFoods,o=infokeepers,c=net
objectClass: inetOrgPerson
cn: Saburo One
sn: Saburo

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3

C:\\openldap>
-----------------------------------------------------------------

anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2007-03-13 22:14
引用:

それでも、猫さんの書き込み (2007-03-13 21:32) より:
OpenLDAP for win32:openldap-2.2.29-db-4.3.29
OS:WindowsXP Pro SP2
-----------------------------------------------------------------
adding new entry "cn=Ichiro One,ou=CatFoods,o=infokeepers,c=net"
ldap_add: Invalid syntax (21)
additional info: usercertificate;binary: value #0 invalid per syntax
-----------------------------------------------------------------


ここはLinuxの会議室のような。
usercertificate;binaryのデータはどうやって作ったのでしょうか?
ちゃんとDER書式をBase64エンコードしていますか?
http://www.linux.or.jp/JF/JFdocs/LDAP-Implementation-HOWTO/certificates.html
_________________
桃李不言 下自成蹊
F/A
ぬし
会議室デビュー日: 2006/03/18
投稿数: 312
お住まい・勤務地: Tokyo
投稿日時: 2007-03-13 22:15
usercertificate;binaryに指定している値か文法が間違ってる…みたいなエラーに見えます。

usercertificate;binaryをGoogle等で検索すると、
多くはMIIから始まる文字列を指定しているみたいですが、
証明書フォーマットが間違っているとかそういう可能性はありませんか?
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2007-03-13 23:03
引用:

F/Aさんの書き込み (2007-03-13 22:15) より:
usercertificate;binaryに指定している値か文法が間違ってる…みたいなエラーに見えます。

多くはMIIから始まる文字列を指定しているみたいですが、




まぁ、MIIって30 82 をBase64するとそうなるわけですが。。ちなみに

usercertificate;binary:: MII+aEGdpLUwTpd0Mz6
△abbbbbb
△bbbbbb

のように次の行の先頭を空白(△)にする必要がある気がします。
#違うかもしれません。
一行ならそれはそれでいけると思いますが。
それでも、猫
会議室デビュー日: 2007/03/13
投稿数: 3
投稿日時: 2007-03-14 13:40
anightsさん、F/Aさん、加納正和さん、どうもありがとうございました。

ご指摘のとおり、usercertificate;binaryのデータを
変更してみたところ、とりあえず登録できました。
(以前の"2S+aEGdpLUwTp…"は、別のldifファイルに記載されていた
 値をそのままコピペしていました。)



ただ1点新たに疑問が発生してしまいました。

anightsさんにご紹介いただいたURLに記載の"PEM 証明書"というのが手元になく、
手元にあるのはp12ファイルだけだったのですが、
p12ファイルを、一度IEにインポートして、
"Base 64 encoded X509"の形式でエクスポートし
以下のようにコマンドを打って、

--------------------------------------------------------------------
C:\\openssl-0.9.8a-dll>openssl x509 -in certBase64.cer -text
Certificate:
Data:
(省略)

-----BEGIN CERTIFICATE-----
MIIGJTCCBQ2gAwIBAgIHByCjKmUUGDANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQG
EwJKUDEcMBoGA1UECgwTSmFwYW5lc2UgR292ZXJubWVudDEcMBoGA1UECwwTTWlu
aXN0cnkgb2YgSnVzdGljZTEwMC4GA1UEAwwnUmVnaXN0cmFyIG9mIFRva3lvIExl
(省略)
-----END CERTIFICATE-----

C:\\openssl-0.9.8a-dll>
--------------------------------------------------------------------

出力した結果の"MIIGJTCCBQ2gAwIBA…"を、
usercertificate;binaryのデータとして、指定したところ、
正常に登録することができたのですが、
ただ、IEからエクスポートする際、
今度は"DER encode binary X509"の形式でエクスポートし
以下のようにコマンドを打っても、

--------------------------------------------------------------------
C:\\openssl-0.9.8a-dll>openssl x509 -inform der -in certDer.cer -text
Certificate:
Data:
(省略)

-----BEGIN CERTIFICATE-----
MIIGJTCCBQ2gAwIBAgIHByCjKmUUGDANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQG
EwJKUDEcMBoGA1UECgwTSmFwYW5lc2UgR292ZXJubWVudDEcMBoGA1UECwwTTWlu
aXN0cnkgb2YgSnVzdGljZTEwMC4GA1UEAwwnUmVnaXN0cmFyIG9mIFRva3lvIExl
(省略)
-----END CERTIFICATE-----

C:\\openssl-0.9.8a-dll>
--------------------------------------------------------------------

というように同じような結果が返ってきます。

つまり、エクスポートする形式はあまり問わず、
"MIIGJTCCBQ2gAwIBA…"の部分だけ、取得できれば
(usercertificate;binaryに指定すれば)登録可能ということですか?

anightsさんの「ちゃんとDER書式をBase64エンコードしていますか?」が
きちんと理解できていないようです。。。。
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2007-03-14 15:45
引用:

それでも、猫さんの書き込み (2007-03-14 13:40) より:
anightsさんの「ちゃんとDER書式をBase64エンコードしていますか?」が
きちんと理解できていないようです。。。。



混乱させてしまったようですみません。
多分私が間違えていますね。
DER書式云々はldifコマンドの仕様のような気がします。
これも定かじゃないですが。
思い返せば、自分はpkcs12を食わせてたような記憶があるので
binary登録自体には関係ないかと。

まあ、最近ではldifコマンドは無いんですけど。。。
_________________
桃李不言 下自成蹊
それでも、猫
会議室デビュー日: 2007/03/13
投稿数: 3
投稿日時: 2007-03-14 16:29
anightsさん、素早いお返事ありがとうございます。

すみません、私、openLLDAPも、openSSLも昨日初めて触ったので、
まだ全然理解できてないのですけど、
"DER書式"や"Base64エンコード"というのはキーワードみたいですね。
これから勉強してみます。

皆様どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)