Copper PDF の各言語向けドライバ(CTI Driver)を、Java、.NET、Node.js、Ruby、Perl、Python、PHP の 7 本すべて更新しました。TLS で接続する ctips: の修正と、試験用に証明書の検証を省くオプションの追加が中心です。あわせて Ruby 版を RubyGems.org で公開し、Java 版の Maven / Gradle からの導入を直しました。
| ドライバ | 新しい版 | 入手先 |
|---|---|---|
| Java | 2.3.2 | Maven / Gradle(JitPack)、GitHub Releases |
| .NET | 2.2.2 | NuGet、GitHub Releases |
| Node.js | 1.1.0 | GitHub(npm install に git の URL を指定) |
| Ruby | 2.2.1 | RubyGems、GitHub Releases |
| Perl | 2.1.5 | GitHub(cpanm にアーカイブの URL を指定) |
| Python | 3.0.2 | GitHub(pip に git の URL を指定) |
| PHP | 2.2.1 | Packagist、GitHub |
TLS 接続(ctips:)の修正
7 本すべてを、TLS を終端する中継の先にあるサーバー(cti.li)と、Copper PDF 3.2.33 自身の TLS 待受(TLS 1.3 と 1.2)に対して、平文・証明書の検証あり・検証なし・不正な証明書の拒否の各条件で自動試験し、変換できること(拒否すべきものは拒否すること)を確認しています。
- Java 2.3.x: TLS 1.3 のハンドシェイクが完了しない、SNI を送らない、サーバー証明書を検証しない、の 3 点を直しました。証明書は既定で検証します(従来の設定名
jp.cssj.driver.tls.trustは意味が逆だったため、jp.cssj.driver.tls.insecureに改めました)。CTIP で 32KB を超える文字列を送ると接続が壊れる欠陥、CLI の-pが効かない欠陥なども直しています。 - .NET 2.2.x: サーバー証明書を常に受け入れていたのを、標準の検証に改めました。2.2.1 では、Copper PDF 3.2 自身の TLS 待受(Java)に TLS 1.3 で繋ぐと変換の途中で失敗していた問題も直しています(長さ 0 の書き込みが content type の無い TLS レコードになり、サーバーが拒否していました)。2.2.2 では、接続先 URI に
?cafile=証明書ファイルを付けると、独自の認証局や自己署名の証明書を OS のストアに登録せずに信頼させられるようにしました。 - Node.js 1.1.0: SNI を送っていなかったため、名前で証明書を選ぶ中継の先には繋げませんでした。修正しました。
- Ruby 2.2.0 / 2.2.1:
ctips:が接続の途中で必ず失敗していたのを直し、証明書とホスト名の検証と SNI の送出を入れました(2.2.0)。2.2.1 で検証を省くオプションを追加しました。 - Perl 2.1.5: TLS の接続に失敗したとき(証明書の検証に落ちたときなど)に理由を
warnで出すようにしました。従来は理由を示さず、後から「Can’t call method … on an undefined value」で落ちるだけでした。検証を省くオプションも追加しました。 - Python 3.0.2 / PHP 2.2.1: TLS の接続に問題はありませんでした(従来から証明書を検証しています)。他の言語と揃えて、検証を省くオプションを追加しました。
互換性に関する注意
Java と .NET は、このバージョンから証明書を検証します。自己署名の証明書や名前の違う証明書のサーバーに繋いでいた場合は接続に失敗するようになります。検証しないモードも利用可能です。Java は --insecure または jp.cssj.driver.tls.insecure=true、.NET は接続先 URI に ?insecure=1、Node.js は get_session() のオプション rejectUnauthorized: false、Ruby・Python・PHP は get_session() のオプション insecure(Ruby は 'insecure' => true、Python は 'insecure': True、PHP は 'insecure' => true)、Perl は insecure => 1 です。いずれも試験用で、証明書もホスト名も確かめなくなるので本番では使わないでください。
本番で自己署名や独自の認証局の証明書を使う場合は、検証を省くのではなく、その認証局を信頼させてください。Ruby・Perl・Python は環境変数 SSL_CERT_FILE に証明書ファイルを指定するなどして OpenSSL に、Node.js は NODE_EXTRA_CA_CERTS で、Java はトラストストアに、.NET は URI の ?cafile= か OS のストアに、PHP は OS や PHP(openssl.cafile)の認証局ストアに追加します。
サーバー側で TLS を受けるには
Copper PDF 3.2 のサーバーには TLS の待受が備わっています(既定では無効)。copperd.properties の次の行を有効にし、サーバー証明書を JKS 形式の鍵ストアに入れて conf ディレクトリに置いてください。クライアントからは ctips://ホスト名:8094/ で接続します。TLS を終端する中継(Traefik など)をサーバーの前に置く構成でも同じです。
jp.cssj.cssjd.tls.port=8094
jp.cssj.cssjd.tls.keyStore=keystore
jp.cssj.cssjd.tls.keyStorePassword=password
jp.cssj.cssjd.tls.keyPassword=password
インストール
Java
Maven / Gradle からの導入(JitPack 経由)は、JitPack のリポジトリを追加した上で、次の依存を指定してください。
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.zamasoftnet:cti.java:v2.3.2'
}
.NET
dotnet add package Zamasoft.CTI --version 2.2.2
Node.js
npm install https://github.com/zamasoftnet/cti.nodejs.git
Ruby
gem install copper-cti
Bundler をお使いの場合は Gemfile に gem 'copper-cti', '~> 2.2' を追加してください。
Perl
cpanm https://github.com/zamasoftnet/cti.perl/archive/refs/heads/main.tar.gz
Python
pip install "git+https://github.com/zamasoftnet/cti.python.git#subdirectory=python3"
PHP
composer require zamasoft/cti-php
各ドライバの詳細は Copper PDF ドライバのダウンロード、変更履歴は各リポジトリの README を参照してください。
