カード決済のTLS1.2化に向けてCentOS6のcurlをアップデート

こんにちは、ディーネットの山田です。

前置き

さて、昨今はCPUに脆弱性が報告されたりとセキュリティの話題に沸いている
2018年ですがクレジット決済周りの暗号化通信方式にもTLS1.2化という
大きなアップデートを迎えようとしています。

なぜ、TLS1.2化されてしまうの?

PCI DSS v3.2(PCIデータセキュリティスタンダード)というセキュリティ基準が
あって、2018年06月30日以降はTLS1.1以前を使うことが禁止されます。
リンク

PCI DSSとは

加盟店やサービスプロバイダにおいて、クレジットカード会員データを安全に取り扱う事を
目的として策定された、クレジットカード業界のセキュリティ基準です。

Payment Card Industry Data Security Standardの頭文字をとったもので、
国際カードブランド5社(American Express、Discover、JCB、MasterCard、VISA)が
共同で設立したPCI SSC(Payment Card Industry Security Standards Council)に
よって運用、管理されています
引用

どんな影響が出るの?

curlなどに付随する暗号化ライブラリがTLS1.2に対応していなければ通信
できないため、アプリケーションなどからのクレジット決済処理が行えなく
なる恐れが考えられます。

では検証を含めてアップデートを進めてみる

用意したOS環境

# cat /etc/redhat-release
CentOS release 6.3 (Final)

用意したアーキテクチャ

# uname -m
x86_64

用意した環境にインストールされているそれぞれのバージョン

# rpm -qa --queryformat="%{NAME:shescape},%{VERSION:shescape}\n" | egrep -i -w "curl|nss|libcurl"
'nss','3.13.3'
'curl','7.19.7'
'nss-softokn-freebl','3.12.9'
'nss-util','3.13.3'
'nss-softokn','3.12.9'
'nss-sysinit','3.13.3'
'nss-tools','3.13.3'
'libcurl','7.19.7'

事前検証

paypalさんにTLS1.2に限定されたAPIURLがあるので、これを利用させて頂く
PHPの簡単なプログラムを書いた。

<?php
$ch = curl_init("https://api-3t.sandbox.paypal.com/");
if (curl_exec($ch) === false) {
var_dump(curl_errno($ch));
var_dump(curl_error($ch));
}
curl_close($ch);
?>

これを実行すると

int(35)
string(17) "SSL connect error"

-> ライブラリ等がTLS1.2に対応していないので、当然エラーになる。

アップデート作業

CentOS6系では、curlの暗号化ライブラリにNSSが標準で用いられていますが
このバージョンが、3.19.1-6以降であればTLS1.2に標準で対応している
ので、yumコマンドでアップデートを行います。

* 水 11月 18 2015 Elio Maldonado  - 3.19.1-6
- Resolves: Bug 1272504 - Enable TLS 1.2 as the default in nss
アップデートがあるか確認
# yum info nss.x86_64
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
Installed Packages
Name        : nss
Arch        : x86_64
Version     : 3.13.3
Release     : 6.el6
Size        : 2.4 M
Repo        : installed
From repo   : anaconda-CentOS-201207061011.x86_64
Summary     : Network Security Services
URL         : http://www.mozilla.org/projects/security/pki/nss/
License     : MPLv1.1 or GPLv2+ or LGPLv2+
Description : Network Security Services (NSS) is a set of libraries designed to
: support cross-platform development of security-enabled client and
: server applications. Applications built with NSS can support SSL v2
: and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509
: v3 certificates, and other security standards.
Available Packages
Name        : nss
Arch        : x86_64
Version     : 3.28.4
Release     : 4.el6_9
Size        : 879 k
Repo        : updates
Summary     : Network Security Services
URL         : http://www.mozilla.org/projects/security/pki/nss/
License     : MPLv2.0
Description : Network Security Services (NSS) is a set of libraries designed to
: support cross-platform development of security-enabled client and
: server applications. Applications built with NSS can support SSL v2
: and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509
: v3 certificates, and other security standards.
アップデートする
# yum update nss.x86_64
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package nss.x86_64 0:3.13.3-6.el6 will be updated
--> Processing Dependency: nss = 3.13.3-6.el6 for package: nss-tools-3.13.3-6.el6.x86_64
--> Processing Dependency: nss = 3.13.3-6.el6 for package: nss-sysinit-3.13.3-6.el6.x86_64
---> Package nss.x86_64 0:3.28.4-4.el6_9 will be an update
--> Processing Dependency: nss-util >= 3.28.3 for package: nss-3.28.4-4.el6_9.x86_64
--> Processing Dependency: nss-softokn(x86-64) >= 3.14.3-22 for package: nss-3.28.4-4.el6_9.x86_64
--> Processing Dependency: nspr >= 4.13.0 for package: nss-3.28.4-4.el6_9.x86_64
--> Processing Dependency: libnssutil3.so(NSSUTIL_3.24)(64bit) for package: nss-3.28.4-4.el6_9.x86_64
--> Processing Dependency: libnssutil3.so(NSSUTIL_3.21)(64bit) for package: nss-3.28.4-4.el6_9.x86_64
--> Processing Dependency: libnssutil3.so(NSSUTIL_3.17.1)(64bit) for package: nss-3.28.4-4.el6_9.x86_64
--> Processing Dependency: libnssutil3.so(NSSUTIL_3.15)(64bit) for package: nss-3.28.4-4.el6_9.x86_64
--> Processing Dependency: libnssutil3.so(NSSUTIL_3.14)(64bit) for package: nss-3.28.4-4.el6_9.x86_64
--> Running transaction check
---> Package nspr.x86_64 0:4.9-1.el6 will be updated
---> Package nspr.x86_64 0:4.13.1-1.el6 will be an update
---> Package nss-softokn.x86_64 0:3.12.9-11.el6 will be updated
---> Package nss-softokn.x86_64 0:3.14.3-23.3.el6_8 will be an update
--> Processing Dependency: nss-softokn-freebl(x86-64) >= 3.14.3-23.3.el6_8 for package: nss-softokn-3.14.3-23.3.el6_8.x86_64
---> Package nss-sysinit.x86_64 0:3.13.3-6.el6 will be updated
---> Package nss-sysinit.x86_64 0:3.28.4-4.el6_9 will be an update
---> Package nss-tools.x86_64 0:3.13.3-6.el6 will be updated
---> Package nss-tools.x86_64 0:3.28.4-4.el6_9 will be an update
---> Package nss-util.x86_64 0:3.13.3-2.el6 will be updated
---> Package nss-util.x86_64 0:3.28.4-1.el6_9 will be an update
--> Running transaction check
---> Package nss-softokn-freebl.x86_64 0:3.12.9-11.el6 will be updated
---> Package nss-softokn-freebl.x86_64 0:3.14.3-23.3.el6_8 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================
Package                    Arch           Version                     Repository       Size
=============================================================================================
Updating:
nss                        x86_64         3.28.4-4.el6_9              updates         879 k
Updating for dependencies:
nspr                       x86_64         4.13.1-1.el6                base            114 k
nss-softokn                x86_64         3.14.3-23.3.el6_8           base            262 k
nss-softokn-freebl         x86_64         3.14.3-23.3.el6_8           base            168 k
nss-sysinit                x86_64         3.28.4-4.el6_9              updates          51 k
nss-tools                  x86_64         3.28.4-4.el6_9              updates         447 k
nss-util                   x86_64         3.28.4-1.el6_9              updates          68 k
Transaction Summary
=============================================================================================
Upgrade       7 Package(s)
Total download size: 1.9 M
Is this ok [y/N]: y
Downloading Packages:
(1/7): nspr-4.13.1-1.el6.x86_64.rpm                                   | 114 kB     00:00
(2/7): nss-3.28.4-4.el6_9.x86_64.rpm                                  | 879 kB     00:00
(3/7): nss-softokn-3.14.3-23.3.el6_8.x86_64.rpm                       | 262 kB     00:00
(4/7): nss-softokn-freebl-3.14.3-23.3.el6_8.x86_64.rpm                | 168 kB     00:00
(5/7): nss-sysinit-3.28.4-4.el6_9.x86_64.rpm                          |  51 kB     00:00
(6/7): nss-tools-3.28.4-4.el6_9.x86_64.rpm                            | 447 kB     00:00
(7/7): nss-util-3.28.4-1.el6_9.x86_64.rpm                             |  68 kB     00:00
---------------------------------------------------------------------------------------------
Total                                                        4.9 MB/s | 1.9 MB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Updating   : nspr-4.13.1-1.el6.x86_64                                                 1/14
Updating   : nss-util-3.28.4-1.el6_9.x86_64                                           2/14
Updating   : nss-softokn-freebl-3.14.3-23.3.el6_8.x86_64                              3/14
Updating   : nss-softokn-3.14.3-23.3.el6_8.x86_64                                     4/14
Updating   : nss-sysinit-3.28.4-4.el6_9.x86_64                                        5/14
Updating   : nss-3.28.4-4.el6_9.x86_64                                                6/14
Updating   : nss-tools-3.28.4-4.el6_9.x86_64                                          7/14
Cleanup    : nss-tools-3.13.3-6.el6.x86_64                                            8/14
Cleanup    : nss-sysinit-3.13.3-6.el6.x86_64                                          9/14
Cleanup    : nss-3.13.3-6.el6.x86_64                                                 10/14
Cleanup    : nss-softokn-3.12.9-11.el6.x86_64                                        11/14
Cleanup    : nss-util-3.13.3-2.el6.x86_64                                            12/14
Cleanup    : nspr-4.9-1.el6.x86_64                                                   13/14
Cleanup    : nss-softokn-freebl-3.12.9-11.el6.x86_64                                 14/14
Verifying  : nss-tools-3.28.4-4.el6_9.x86_64                                          1/14
Verifying  : nss-3.28.4-4.el6_9.x86_64                                                2/14
Verifying  : nss-softokn-3.14.3-23.3.el6_8.x86_64                                     3/14
Verifying  : nss-softokn-freebl-3.14.3-23.3.el6_8.x86_64                              4/14
Verifying  : nspr-4.13.1-1.el6.x86_64                                                 5/14
Verifying  : nss-util-3.28.4-1.el6_9.x86_64                                           6/14
Verifying  : nss-sysinit-3.28.4-4.el6_9.x86_64                                        7/14
Verifying  : nspr-4.9-1.el6.x86_64                                                    8/14
Verifying  : nss-3.13.3-6.el6.x86_64                                                  9/14
Verifying  : nss-sysinit-3.13.3-6.el6.x86_64                                         10/14
Verifying  : nss-tools-3.13.3-6.el6.x86_64                                           11/14
Verifying  : nss-util-3.13.3-2.el6.x86_64                                            12/14
Verifying  : nss-softokn-3.12.9-11.el6.x86_64                                        13/14
Verifying  : nss-softokn-freebl-3.12.9-11.el6.x86_64                                 14/14
Updated:
nss.x86_64 0:3.28.4-4.el6_9
Dependency Updated:
nspr.x86_64 0:4.13.1-1.el6                       nss-softokn.x86_64 0:3.14.3-23.3.el6_8
nss-softokn-freebl.x86_64 0:3.14.3-23.3.el6_8    nss-sysinit.x86_64 0:3.28.4-4.el6_9
nss-tools.x86_64 0:3.28.4-4.el6_9                nss-util.x86_64 0:3.28.4-1.el6_9
Complete!

事後検証

先ほど使った、PHPのスクリプトを実行するとエラーなくHTTPの通信が出来たことを確認します。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /cgi-bin/ppapi was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache Server at <a href="mailto:ppmtps@paypal.com">api-3t.sandbox.paypal.com</a> Port 443</address>
</body></html>

まとめ

curlの暗号化ライブラリにNSSが使われている場合は、yumコマンドで簡単にアップデート出来ました。
サーバ再起動も不要なので、特にダウンタイムを設けて行う必要もなさそうです。
※シビアな方は、念のためダウンタイムを設けた方が確実かと思います。

備考

CentOS6系以降であれば、yumで暗号化ライブラリをアップデートすることでTLS1.2に対応
させることのできる余地があります。
しかし、CentOS5系以前ではTLS1.2に対応した暗号化ライブラリをyumではインストールできず
(OSのサポートがそもそも終了している)ソースコードからコンパイルすることになりますが、
curlそのものをコンパイルする必要やその他依存するミドルウェアに影響がないか配慮する
必要が出てくるので、このタイミングで出来れば、CentOS6系や7系へのリプレイスをおすすめ
します。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA