クライアント認証付きのHTTPSリクエスト発行 †Apache+openSSLでクライアント認証 で作った HTTPSクライアント認証環境に対してプログラムからアクセスするサンプル。 Pythonの場合 †参考 : https://docs.python.jp/3/library/ssl.html#ssl.SSLContext.load_cert_chain # coding: UTF-8 import json import ssl #import urllib2 as request # python2系 from urllib import request # python3系 # アクセス先のURL url = 'https://example.com/api/books/' # プライベートCAの証明書 cafile = '/var/certs/myCA/myca.crt' # クライアント証明書 client_certfile = '/var/certs/example.com-client1.crt' # クライアント秘密鍵 client_keyfile = '/var/certs/example.com-client1.key' # クライアント鍵のパスワード client_password = 'password' sslctx = ssl.create_default_context() # CA証明書ファイルをロード( 1ファイルに纏めれば load_cert_chain だけでもいける気がする ) sslctx.load_verify_locations(cafile=cafile) # クライアント証明書をロード #sslctx.load_default_certs(ssl.Purpose.CLIENT_AUTH); # 秘密鍵と対応する証明書をロード sslctx.load_cert_chain(certfile=client_certfile, keyfile=client_keyfile, password=client_password) r = request.urlopen(url, context=sslctx) headers = r.info() print ( '##### headers #####' ) print ( headers ) data = r.read() if headers["Content-Type"] == "application/json": data = json.loads( data ) print ( '##### body #####' ) print ( data ) Nodejs の場合 †var fs = require('fs'); var request = require('request'); // アクセス先のURL url = 'https://example.com/api/books/' // CA証明書 var caFile = '/var/certs/myCA/myca.crt'; // クライアント証明書 var clientCertFile = '/var/certs/example.com-client1.crt'); // クライアント秘密鍵 var clientKeyFile = '/var/certs/example.com-client1.key'); // クライアント鍵のパスワード var clientPassword= 'password' var options = { url: url, cert: fs.readFileSync(clientCertFile), key: fs.readFileSync(clientKeyFile), passphrase: clientPassword, ca: fs.readFileSync(caFile) }; request.get(options, function (error, response, body) { if (error) { console.error(error); } else { console.log(body); } }); |