クライアント認証付きの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);
  }
});

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-01-04 (木) 02:31:06 (2297d)