* クライアント認証付きのHTTPSリクエスト発行 [#j45d5863]
#setlinebreak(on);

#contents
-- 関連
--- [[Apache+openSSLでクライアント認証]]
--- [[ApacheでSSL(SNI)設定]]
--- [[Javaでhttps通信時の証明書検証について]]

** Pythonの場合 [#la02f8c2]
#html(<div style="padding-left:10px">)

参考 : https://docs.python.jp/3/library/ssl.html#ssl.SSLContext.load_cert_chain
#mycode2(){{
# 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 )
}}
#html(</div>)


** Nodejs の場合 [#o7117836]
#html(<div style="padding-left:10px">)
#mycode2(){{

var fs = require('fs');
var request = require('request');

// 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: 'https://example.com/api/books/',
    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);
  }
});
}}
#html(</div>)



トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS