firefox istemci sertifikasının özel bölümünü kullanarak şifresini almak

4 Cevap php

Ben bir LAMPhp sunucu üzerinde ortak anahtar kullanarak şifrelemek o şey olan ilgileniyorum, web istemcisi üzerindeki uygun özel anahtar kullanılarak deşifre (firefox, en azından, bu standart javascript iyi değilse)

Ben ne yapmak istediğinizi unutmayın değil-sadece SSL / https kullanarak şifreli bir bağlantı var. Hatta bir giriş / erişim kontrol yöntemi olarak tarayıcı tabanlı istemci sertifikalarını kullanmak için. Ben bunlardan ikisini de yapmak için biliyorum. Ne yapmak istediğinizi daha Gpg tuşları ile e-posta gibi. Ben sadece-onlar-onların özel anahtarını kullanarak şifresini Kullanıcıların ortak anahtarla şifreler kısa mesaj oluşturmak için mümkün olmak istiyorum. Ne arıyorum ssl tarafından otomatik olarak elde gizlilik, ancak sadece belirli kullanıcıların mesajlarının şifresini çözmek için izin yetenek değildir. Ben kolayca belki Gpg veya SMIME ile bunu biliyorum ve belki de en iyi yoldur, ama ben bir web-tabanlı bir alternatif tercih ederim.

Firefox vb bir sertifika mağaza var ve ben özel anahtarları güvenlik nedeniyle javascript ihraç olması muhtemel tutulacak olduğunu biliyorum, ama ben bir şey şifresini aramaları kullanımlı sertifikaları javascript bazı yolu var olduğunu varsayalım ..

Ben bunu yapmak istiyorum nedeni, ben bir particluar yöneticisine rasgele oluşturulmuş bir şifre vermek için güvenli bir yöntem gerekir olmasıdır. Ben tam veritabanı translüsensi uygulamak çalışıyorum ve açık anahtar şifreleme bu çabaların önemli bir parçası gibi görünüyor. Ama bu yetenek bu tür olmadan sorun hitap yaşıyorum tek kullanım-durumdur.

Yani php tarafında ben şöyle openssl şifreleme çağrıları kullanmak istiyorsunuz ...

<?php

$browsers_public_key = get_it_from_the_browser_via_apache_maybe(); 

openssl_public_encrypt($data,$encrypted_ends_up_here,$browsers_public_key);

echo "<html><head>
<script type='javascript'>
      function decrypt_textarea(){  
            ??
     }
</script>
</head>
<body><textarea id='decrypt_me'> $encrypted_ends_up_here </textarea> 
<div id='where_the_plaintext_goes'>  </div>
</body> </html>";

?>

Ben stackedoverflow çok güzel javascript encrypton kütüphaneleri aracılığıyla bulduk unutmayın ... ama aslında MyOpenId.com başına veya CaCert.org gibi Firefox içe tuşlarını kullanmak istiyorum

Bu mümkün olup olmadığını biliyor mu?

Thanks, -FT

4 Cevap

Eğer bu soruyu sordum, ama sizin veya bir başkasının bu sorunu veya benzer bir birine potansiyel bir çözüm arıyor, onlar JavaScript Forge projeyi kontrol etmelisiniz çünkü bir süre oldu:

http://github.com/digitalbazaar/forge/blob/master/README

Bu proje Apache ile iletişim kurarken bir istemci tarafı sertifikası dahil sağlayacak JavaScript bir SSL uygulaması vardır. Elle de ilişkili özel anahtarı (eğer JavaScript erişimi olan) kullanarak RSA şifresinin yapabilirsiniz.

Örneğin, JavaScript sunucuya / yazı almak ve istemci tarafı sertifikası içerebilir. Apache, bu sertifikaya uygun ne olursa olsun veri şifrelemek için ortak anahtarı kullanır ve sonra istemci bu verileri geri dönebilirler. İstemci daha sonra (JavaScript) kendi özel anahtarı kullanmak ve bilgi şifresini ve onunla bir şeyler yapabilirdi. Sunucu geçmek için çalışıyoruz gizli uygun alıcı olarak istemci tarafı sertifika kimlik doğrulaması eğer bu ekstra şifreleme Muhtemelen bile, ancak gerekli değildir.

Forge Proje ayrıca / Firefox veya diğer tarayıcılar (bu hala nedense bir gereklilik ise) anahtarları ve sertifikaları ihracat / ithalat için bir sistem kurmak için API'leri vardır. Openssl biraz yardım ithalat / ihracat (pem => pkcs12) için doğru biçimde tuşları / certs almak için gerekli olabilir, ama bu biraz nasıl çalıştığını bir örnek WebID bir JavaScript tabanlı gösteride bulunabilir. WebID bir istemci tarafı sertifika bazlı kimlik doğrulama sistemidir:

WebID yönetimi demo: https://webid.digitalbazaar.com/manage/

WebID kimlik demo: https://payswarm.com/webid-demo/

Yukarıdaki siteleri için SSL sertifikaları kendi kendine imzalanan ve onları görüntülemek için tarayıcınızda eklenecek geçici istisnalar gerektirir unutmayın. Siteler sadece gösteri amaçlıdır, herhangi bir kişisel bilgi girmeniz gerekmez. Ancak, ilk linke giderseniz, size tarayıcı tuşları üretebilir (bunu yapmak için Forge JavaScript kullanır) ve daha sonra üstündeki listede PEM biçiminde oluşturulan özel anahtarı ve sertifikayı, görebilirsiniz sayfa. Anahtar ve sertifika Flash yerel depolama yoluyla kalıcı.

Çoğunlukla JavaScript beri WebID yönetim site için kaynak yaklaşık% 100 (eğer değil) görülebilir. Ayrıca, Forge projenin kendisi (github bağlantıya bakınız) opensource.

Şimdi ben ne dediğini anlamak, sana kesin bir cevap verebilirim :)

Ben size söyleyebilirim iyi bunu yapmak arıyorsanız şekilde iyi şifreleme alınamıyor olmasıdır. Özel anahtar şifreleme (yani RSA) şifreleme yapmak için çok, çok, çok büyük sayılar kullanır. Küçük numaralarını kullanma (sadece çok asal sayılar vardır) hesaplama kırmak çok basittir ve sayıları olağanüstü hızla büyük olsun. Temelde, RSA ile, çok sayıda almak ve büyük üstlerin bunları yükseltmek gerekir. JavaScript oldukça çok sayıda destek yapabiliyor, ancak performans ile bir duvara çarptı olacak. Şifre çözme dakikada yapmak için saniye sürebilir ise 512-bit anahtar ile, birkaç kilobayt şifreleme, bir kaç saniye sürebilir. Derlenmiş bir dil değildir, çünkü JS çok yavaş nedeni basitçe. Tabii, sen anahtar boyutunu azaltmak, ancak bir kaç kilobayt daha büyük bir şey ve bir sorun var olabilir.

Özel anahtar şifresi edilecek verilerle birlikte iletilir (çünkü daha önce transfer sürece) Ayrıca, RSA verilerin şifresini çözmek için sayfayı aldığı herkes sağlayan bir web sayfası doğal olarak güvensizdir.

Ben size bir kullanıcı veya bir müşteri bazı kod karartmak istiyorum, çünkü bunu yapmak için arıyorsanız varsaymak gidiyorum, bu yüzden XOR şifreleme kontrol etmenizi tavsiye edeceğim. Verilen, RSA gibi güvenli hiçbir yerde yakın, ama düzgün kullanıldığı takdirde çok güvenli olabilir ilkeleri kullanır. Eğer sadece bir kez kullanılan ve veri / kodu olarak aynı uzunlukta (bir kerelik pad) sahip olan bir rastgele anahtar kullanmak Örneğin, şifreleme "uncrackable" dir. Daha da iyisi, XOR şifreleme hızlı. İşte bazı kaynaklar şunlardır:

http://guymal.com/mycode/xor_js_encryption/

http://javascript.internet.com/passwords/xor-encryption4.html

Yapmanız çalıştığınız ne şans var umut!

I am searching exactly the same thing you do and wanted to use php's openssl-functions, too. I was happy to see that on the phpside everything was working great with private/public key (encrypt/decrypt) and now wanted to find a way to use privatekey on clientside as you do.

!

Bir şey bulacaksınız IF bana e-posta ile iletebilirsiniz:

PKI (at) life.de

!

And for the performance aspect: You would encrypt the big parts with symetric encryption and only the decryption key with the public key of the client to excahnge it. So you dont't need to enrypt many kb.

But it seems to be an dead end with firefox, but with IE and ActiveX it seems possible with CAPICOM (I had not much read about it now). hxxp://geekswithblogs.net/shahed/archive/2007/05/03/112232.aspx

But for JavaScript/PHP have a look at (and read all comments at FAQ and other pages,too!In future maybe bidirectional communication was mentioned): hxxp://www.jcryption.org/

hxxp :/ / www.zend.com//code/codex.php?ozid=1323&single=1

Pure Javascript Public/Privatekey encryption hxxp://shop-js.sourceforge.net/crypto2.htm

A helful FireFox-Addon for PKI: hxxps://addons.mozilla.org/en-US/firefox/addon/4471 hxxp://www.mozilla.org/projects/security/pki/nss/tools/index.html

PHP with OpenSSL on Serverside / .NET on CLientside hxxp://www.csharpbydesign.com/2008/04/asymmetric-key-encryption-with.html

Javascript OpenPGP

hxxp :/ / www.hanewin.net/encrypt/

PS: stupid mekanizması beni bağlantıları ilanıyla önler ...

Eğer PHP SSL kolu yok. SSL otomatik olarak web sunucusu tarafından işlenir. Apache kullanıyorsanız, burada basit bir öğretici bulunuyor:

http://www.debian-administration.org/article/Setting_up_an_SSL_server_with_Apache2

Fikir normal gibi kod yazmak olduğunu, ve kullanıcı https kullanarak sitenizi eriştiğinde, sunucu otomatik bağlantıyı şifreler. İstemci tarafında, tarayıcı zaten automagically bağlantıyı şifresini ve kullanıcı ajan kodu sunmak zorundadır özel anahtarları kullanma yeteneğine sahiptir.

Bu yardımcı olur umarım!