クライアント証明書を使用して、ノードアプリからHTTPS接続を作成しています。
_var options = {
hostname: 'https://my-server.com',
port: 443,
path: '/',
method: 'GET',
key: fs.readFileSync('client1-key.pem'),
cert: fs.readFileSync('client1-crt.pem'),
ca: fs.readFileSync('ca-crt.pem') };
var req = https.request(options, res => {
[...]
});
_
すべて正常に動作していますが、TLS 1.2接続のみが許可されるようにコードを追加したいと思います。 https.agent オプションなどでこれを設定する方法を見つけることができません。これを設定することは可能ですか、それとも接続を確立してから プロトコルのクエリ バージョンを次のようなもので作成する必要がありますか?
res.socket.getProtocol() === 'TLSv1.2'
プロトコルが満足できない場合、接続を中止しますか?
最初に HTTPSリクエスト の作成に関するドキュメントを見つけました。 secureProtocol
と呼ばれるものを含む追加オプションをtls.connect()
に渡すことができると述べています。 tls.connect()
を掘り下げて、 tls.createSecureContext()
に言及するsecureContext
オプションを見つけました。そして最後に、 OpenSSLページ の文字列で指定できるsecureProtocol
に言及しています。妥当と思われる文字列(TLSv1_2_method
)を選択し、secureProtocol
オプションをhttps.request
に直接渡しました。
これは、指定されたsecureProtocol
でSSL Version: TLS 1.2
とSSL Version: TLS 1.1
でsecureProtocol: "TLSv1_1_method"
を出力します。指定されたTLSバージョンで接続を確立できない場合、最後のエラーハンドラが呼び出されます。
var https = require('https')
var options = {
hostname: 'www.howsmyssl.com',
port: 443,
path: '/a/check',
method: 'GET',
secureProtocol: "TLSv1_2_method"
}
https.request(options, res => {
let body = ''
res.on('data', d => body += d)
res.on('end', () => {
data = JSON.parse(body)
console.log('SSL Version: ' + data.tls_version)
})
}).on('error', err => {
// This gets called if a connection cannot be established.
console.warn(err)
}).end()