はじめに
API連携先より、特定の証明書がサーバ内にインストールされているかを確認をするように連絡があった。
DigiCert Global Root CA
curl接続時に使われている暗号化方法
APIへはcurlで接続されている。https通信する際に、内部でNSSやOpenSSLを使って暗号化している様子。 curlは標準ではNSSを使っているらしい。以下で確認できる。
$ curl --version
curl 7.40.0 (x86_64-redhat-linux-gnu) libcurl/7.40.0 NSS/3.19.1 Basic ECC zlib/1.2.8 libidn/1.18 libssh2/1.4.2
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets
NSSを使っているのがわかる。通常、サーバにはメジャーなCA(Certificate authority、認証局)については、証明書がプリインストールされているとのこと。ゆえに、特に設定せずhttpsのURLに対してcurlを実行しても結果が返ってくるみたい。ブラウザでの閲覧時も同様。ちなみに、NSS/3.19.1-6 versionからTLS 1.2に標準対応しているとのこと。
NSSの証明書のサーバ内の所在
ググると、RHEL 6 or later
の場合は、
Curl is using the system-default CA bundle is stored in /etc/pki/tls/certs/ca-bundle.crt.
との記述あり。
Amazon LinuxはRedHat系なので、実際にサーバを調べるとNSSについてのコメントが書かれたファイルが見つかった (OS、OS version、そして暗号化方法によって異なる可能性あるので注意)。
vi /etc/pki/tls/certs/ca-bundle.crt
いくつもの証明書の中に探していたIssuerの「DigiCert」のものが見つかる!
証明書イメージ↓
長い部分は(省略)としています。
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
Validity
Not Before: Nov 10 00:00:00 2006 GMT
Not After : Nov 10 00:00:00 2031 GMT
Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
(省略)
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Subject Key Identifier:
03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
X509v3 Authority Key Identifier:
keyid:03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
Signature Algorithm: sha1WithRSAEncryption
(省略)
-----BEGIN CERTIFICATE-----
(証明書部分)
-----END CERTIFICATE-----
これで安心して更新を待てそうです。
補足
-
最初、誤ってopensslの証明書を探していた。
-
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
にそれらしきものが見つかる。 - Issuerなどの情報が書かれていない & 複数の証明書が1ファイル内で連結されている。
- 1証明書ずつ、
openssl x509 -in {cert_file} -noout -text
で中身を見ることはできた。
-
-
2017/10/31に、DigiCertsがSymantecのPKIソリューションを買収した。
-
エンジニア経験浅いので、間違った内容があればご指摘いただけると助かります。
参考
- [技術者でなくても分かる電子証明書とPKI入門 by Symantec] (https://www.websecurity.symantec.com/ja/jp/theme/pki-basics)
- How to update cURL CA bundle on RedHat? on StackExchange
- NSS FAQ by Mozilla