1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

389DSをTLS対応させる

Last updated at Posted at 2025-04-24

前回でCockpitをTLS接続に変更したときに証明書を作ったので、その証明書を使って389DSの接続もTLSにしておきます。

前回

基本は389DSとSSSDの設定の変更になりますが、Sambaも1行だけ修正が入ります。

なおオレオレルートCA証明書はOSに登録して丸っと信頼させることもできるようですが、お勉強のためアプリ個別に登録するようにしています。

といってもLDAP認証はSSSDが中継するので、今回はSSSDにルートCA証明書を登録するだけでした。

389DSに証明書を登録する

作業ディレクトリは389DSのインスタンス名と同じです。前回作ったserver.crtとserver.keyをコピーしておきましょう。

$ cd /etc/dirsrv/インスタンス名
$ cp 証明書置き場/server.crt .
$ cp 証明書置き場/server.key .

サーバに証明書を登録するときにPINを聞かれますがこれは作業ディレクトリの中にpin.txtという名前で入っています。(Software) Token:の後ろの文字列を使ってください。

$ cat pin.txt
Internal (Software) Token:xxx...

サーバ証明書の登録ですが登録前に変換が必要になります。前回作った証明書はテキスト(pem形式)なのですが、389DSへの登録はバイナリ形式の方を使います。

コマンドを実行するとPINを聞かれるので先ほど拾ったPINを使います。

# p12に変換(パスワードを設定しろと言われる)
$ openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -name <登録名>

# 登録(PINの後↑で設定したパスワードを聞かれる)
$ pk12util -i server.p12 -d . -n <登録名>

登録ができたか確認します。

$ certutil -L -d .
Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

Self-Signed-CA                                               CT,, 
Server-Cert                                                  u,u,u
<登録名>                                                     u,u,u

登録名を失敗したりでやり直したいとき。

$ certutil -D -n <登録名> -d .

証明書を使うよう設定する

サーバ/サーバ設定/セキュリティのサーバ証明書の所に登録名のエントリが増えているのでそれを設定します。

image.png

そのまま下にスクロールするとセキュアな接続を要求するとあるのでチェックを入れて設定の保存ボタンを押します。

image.png

サーバを再起動しろと言われるのでしておきましょう。

$ systemctl restart dirsrv@<インスタンス名>

TLS無しでつなごうとするとrequires a secure connectionと怒られるようになります。

image.png

というわけでもうポートは閉じておきましょう。

$ firewall-cmd --remove-service=ldap --permanent
$ firewall-cmd --reload

SSSDでTLS対応する

ldap接続でTLSを使わない(never)にしていたのを、ldaps接続でTLSを使う(demand)にします。

ldapのURIは前回はローカルホストのIPアドレスでしたが、TLSで接続する場合証明書と接続先ホスト名が違うとエラーになる場合があるので、URIにはホスト名の設定にしておきました。

併せてオレオレルートCA証明書も設定しておきます。

$ cp 証明書置き場/rootCA.crt /etc/sssd/
/etc/sssd/sssd.conf
#ldap_uri = ldap://127.0.0.1
#ldap_tls_reqcert = never
ldap_uri = ldaps://minipc.home:636
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/sssd/rootCA.crt

再起動したらTLS接続に切り替わります。

$ sss_cache -E
$ systemctl restart sssd

Sambaの設定

backendの接続先を変更します。やはりURIはTLSに登録したホスト名にしています。

……証明書にlocalhsotとか::1を追加しておけばよかったかも O(:3 )~ ('、3_ヽ)_

/etc/samba/smb.conf
        # ldapsに変更
#       passdb backend = ldapsam:ldap://localhost
        passdb backend = ldapsam:ldaps://minipc.home:636

        # 以下変更なし
        ldap ssl = no
        ldap admin dn = cn=Directory Manager
        ldap suffix = dc=home
        ldap user suffix = ou=Users,dc=home

ldap sslの設定はデフォルトがstart tlsっぽく消したらネゴシエーションに失敗します😇

ldaps接続自体がTLS接続なのでStartTLSの平文接続からTLSに昇格させる仕組みは不要です。なのでldap ssl = noの行はそのままおいておきます。

コンフィグを編集したら再起動しておきましょう。

$ systemctl restart smb

OpenLDAPのコマンドにも対応しておく

ldapsearchとか使いたいやん_(:3」∠)_

$ cp 証明書置き場/rootCA.crt /etc/openldap/certs/rootCA.crt

# ldapsearchを実行するユーザーが使うので一般ユーザーも読み取り可能にしておく
# 証明書(公開鍵)なので見られてもOK
$ chmod 644 /etc/openldap/certs/rootCA.crt

TLS_REQCERTdemandにするかコメントアウトして、ldap.confTLS_CACERTにオレオレルートCA証明書を設定しておきます。

/etc/openldap/ldap.conf
TLS_REQCERT demand
TLS_CACERT /etc/openldap/certs/rootCA.crt

これでladapsearchコマンドも使えるはずです。ただしTLSアクセスするときは証明書に登録したhost名でないとエラーがでます。

$ ldapsearch -x -H ldaps://minipc.home:636  -b "" -s base

他のLinuxPCからログインできるか試してみる

Fedora atomic(Sway Spin)からLDAPのユーザーでログインできるか試してみます。

まずはSSSDのインストール

$ rpm-ostree install sssd sssd-tools sssd-ldap
$ systemctl reboot

sssd.confの設定

/etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = default

[domain/default]
ldap_uri = ldaps://minipc.home:636
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/sssd/rootCA.crt
ldap_search_base = ou=Users,dc=home
ldap_default_bind_dn = cn=Directory Manager
id_provider = ldap
auth_provider = ldap

ldapアクセス用のパスワード設定

$ sss_obfuscate --domain=default

SSSDの起動

# パーミッションは600か640で
$ chmod 640 /etc/sssd/sssd.conf
$ systemctl start sssd

PAMに適用

$ authselect select sssd
$ systemctl reboot

LDAP経由でシステムにいないユーザーでログインできた!

けど、Swayでfootが上手く動きませんでした/(^o^)\

証明書の更新

証明書の期限切れやホスト名を変更したときは証明書を更新する必要があります。

CSR((サーバー証明書署名要求)の更新

RootCAの署名をもらうときに使うファイルで、LDAPサーバのホスト名の変更等があった場合は作り直します。

san.conf
[req]
req_extensions = v3_req
prompt = no
distinguished_name = req_distinguished_name

[req_distinguished_name]
C = JP
ST = Shimane
L = Masuda
O = MyHome
CN = minipc.home

[v3_req]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = minipc.home
DNS.2 = minipc-wifi.home
IP.1 = 192.168.x.x
$ openssl req -new -key server.key -out server.csr -config san.cnf

Server証明書の更新

RootCAの署名をもらってServer証明書を作成します。

$ openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 365 -sha256 -extfi
le san.cnf -extensions v3_req

386DSで使うp12形式に変換します。

$ openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -name minipc-server

389DSに登録した証明書を更新

一旦古い証明書を削除してから登録し直します。削除しないと二重で登録されます。

# 確認
$ certutil -L -d /etc/dirsrv/<インスタンス名>

# 削除
$ certutil -D -n <登録名> -d /etc/dirsrv/<インスタンス名>

# 登録
$ pk12util -i server.p12 -d /etc/dirsrv/<インスタンス名> -n <登録名>

サーバを再起動すれば更新したものが有効になります。

$ systemctl restart dirsrv@<インスタンス名>
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?