2015-06-05 24 views
12

PKI güvenliğini etkinleştirmiş bir sitem var. Her istemci sertifikalarını yüklemek için bir kart okuyucu kullandı veya sertifika kutularına IE sertifika deposunda yüklendi.PKI güvenliği olan bir siteye erişmek için python kullanın

Benim soru vardır:

  1. nasıl kart okuyucu sertifikası ya da sistemi doğrulamak için sistem üzerinde depolanan sertifikayı kullanabilirsiniz?
  2. Kimlik bilgilerini siteye nasıl iletebilirim, hey ben ve hizmete erişebilir miyim? Örnekler yumuşak sertifikalar kullanıyor olabilirler. Kart okuyucu kısmını daha sonra çözebilirim.

Çevrede araştırıyorum ve bu durumda bana yardımcı olacak hiçbir şey bulamadım. Django'nun bir grup modülü var, ama bu bir seçenek değil çünkü ben sadece şeylerin müşteri tarafıyla ilgileniyorum. Hizmeti barındırmak için bir site oluşturmuyorum. Bu servislere erişmem gerek.

Bu kod çalışma türünde çalışıyorum. Sadece alıyorum yönlendirmeyi nasıl işleneceğini bilmiyorum:

import httplib 
KEYFILE = r"C:\cert\my.key" 
CERTFILE = r"c:\cert\my.pem" 
HOSTNAME = 'machine.com' 

conn = httplib.HTTPSConnection(
    HOSTNAME, 
    key_file = KEYFILE, 
    cert_file = CERTFILE 
) 

conn.putrequest('GET', '/arcgis/sharing/rest?f=json') 
conn.endheaders() 
response = conn.getresponse() 
print response.read() 

tüm bu sonucudur: sağlanan

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>302 Found</title> 
</head><body> 
<h1>Found</h1> 
<p>The document has moved <a href="https://machine.com/pki?https://machine.com/arcgis/sharing/rest%3f&amp;f=json">here</a>.</p> 
</body></html> 

Herhangi bir yardım çok iyi olurdu!

Yazılım özellikleri: piton 2.7.8 Windows 2012 R2

+0

Şimdiye kadar denediğiniz şey hakkında biraz bilgi paylaşır mısınız? "PKI yetkisi", "istemci sertifikası auth" anlamına geldiği varsayılırsa, # 1'de (sertifikanın elde edilmesi) an için punting yapılması, # 2'nin https/ssl/tls'yi sarmalayan kitaplıklarda pişirildiğine inanıyorum. Örneğin, isteklerde, kullanın: 'requests.get (url, cert = ('yol/to/cert', 'path/to/key'))' (üzgünüm - cevap olarak göndermek istemedim) – bimsapi

+0

It "PKI" dediğinize göre aslında "istemci sertifikası kimlik doğrulaması" (PKI bundan daha geniş bir alan ve genellikle sunucu sertifikalarının doğrulanmasını içerir). Kart okuyucunuz PKCS # 11 sürücüleri sağlıyor mu, yoksa sadece Windows API mı? – Bruno

+0

Bu arada Python'da herhangi bir kütüphaneyi kullanmayı planlıyor musunuz? – Bruno

cevap

3

Ben o urllib2 kütüphane çalışması kullanabilmesi istekleri işlemek için bir PKI işleyicisi yarattı deneyin.

import httplib, urllib2 

class HTTPSClientAuthHandler(urllib2.HTTPSHandler): 

    def __init__(self, key, cert): 
     urllib2.HTTPSHandler.__init__(self) 
     self.key = key 
     self.cert = cert 
    def https_open(self, req): 
     #Rather than pass in a reference to a connection class, we pass in 
     # a reference to a function which, for all intents and purposes, 
     # will behave as a constructor 
     return self.do_open(self.getConnection, req) 
    def getConnection(self, host, timeout=300): 
     return httplib.HTTPSConnection(host, 
              key_file=self.key, 
              cert_file=self.cert, 
              timeout=timeout) 

Bunu kullanmak için, işleyiciyle birlikte bir cookiejar kullanmanız gerekir.

from cookielib import CookieJar 
cookiejar = CookieJay() 
handlers = [] 
handlers.append(HTTPSClientAuthHandler(somekey, somecert)) 
handlers.append(urllib2.HTTPCookieProcessor(cookiejar)) 
opener = urllib2.build_opener(*handlers) 
... do other urllib2 calls .... 

Bu, herkese yardımcı olur umarım!

1

Bu kodu

#!/usr/bin/env python 

import httplib 

CERTFILE = '/home/robr/mycert' 
HOSTNAME = 'localhost' 

conn = httplib.HTTPSConnection(
    HOSTNAME, 
    key_file = CERTFILE, 
    cert_file = CERTFILE 
) 
conn.putrequest('GET', '/ssltest/') 
conn.endheaders() 
response = conn.getresponse() 
print response.read() 
+0

teşekkürler. Httplib yönlendirmeleri yönetebilir mi? –

İlgili konular