[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[postfix-jp: 2111] Re: cannot get private key でTLSを使用できない



安部です。

少し時間が経ってしまいましたが、PostfixでTLSを使用できなかった件を
やっと解決することができました。

原因は、証明書の形式やパーミッションではなく、Shared Object を
リンクする順番だったようです。
postfix の Makefile を作成する際のパラメータを変更することで、
TLSを使用できるようになりました。


変更前(NG):
make -f Makefile.init makefiles \
 "CCARGS= \
  -DHAS_MYSQL -I/usr/include/mysql \
  -DHAS_PCRE -I/usr/include/pcre \
  -DUSE_SASL_AUTH -I/usr/include/sasl \
  -DUSE_TLS \
 " "AUXLIBS= \
 -L/usr/lib -L/usr/lib/mysql \
 -lmysqlclient -lz -lm -lpcre -lsasl2 -lssl -lcrypto"

変更後(OK):
make -f Makefile.init makefiles \
 "CCARGS= \
  -DHAS_MYSQL -I/usr/include/mysql \
  -DHAS_PCRE -I/usr/include/pcre \
  -DUSE_SASL_AUTH -I/usr/include/sasl \
  -DUSE_TLS \
 " "AUXLIBS= \
 -L/usr/lib -L/usr/lib/mysql \
 -lz -lm -lpcre -lsasl2 -lssl -lcrypto -lmysqlclient"

要は、 -lmysqlclient を -lssl より後に書けばよかったようです。


なぜこれが原因だと判断したかは以下となります。

tls/tls_certkey.c の set_cert_stuff() 内で、
SSL_CTX_use_certificate_chain_file() や
SSL_CTX_use_PrivateKey_file() を呼び出しています。

main.cf で smtpd_tls_cert_file (証明書)に存在しないファイルを設定しても
SSL_CTX_use_certificate_chain_file() は成功していました。
(cannot get certificate from file がエラー出力されませんでした。)

gdb で smtpd をステップ実行してみたところ、上記関数内で
stepi を行うと、libssl.so.4 ではなく、なぜか libmysqlclient.so の
中に入っていたようでした。
libssl の関数は実行されていないようでした。

それで postfix のコンパイル時に -lssl と -lmysqlclient の順番を
変えてみたところ、問題なくTLSを使用できました。


桜根様、さとうふみやす様、皆様、ありがとうございました。


安部
_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxxxxxxxxxxxxxxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list

References
[postfix-jp: 2057] cannot get private key でTLSを使用できない, Kenji Abe
[postfix-jp: 2060] Re: cannot get private key でTLSを使用できない, SATOH Fumiyasu
[postfix-jp: 2061] Re: cannot get private key でTLSを使用できない, Kenji Abe

[検索ページ] [Postfix-JP ML Home]