php - 使用客户端证书的私有(private)部分让 firefox 解密

标签 php javascript encryption rsa client-certificates

我感兴趣的是我在 LAMPhp 服务器上使用公钥加密的东西,在 Web 客户端上使用适当的私钥解密(至少是 firefox,最好是标准的 javascript)

请注意,我想要做的不仅仅是使用 SSL/https 进行加密连接。甚至使用基于浏览器的客户端证书作为登录/访问控制方法。我知道如何做这两件事。我想做的更像是使用 gpg key 发送电子邮件。我希望能够创建一条短消息,我将使用用户的公钥对其进行加密,只有他们才能使用他们的私钥进行解密。我正在寻找的不是 ssl 自动实现的隐私,而是只允许特定用户解密消息的能力。我知道我可以使用 gpg 或 SMIME 轻松地做到这一点,也许这是最好的方法,但我更喜欢基于网络的替代方法。

Firefox 等有一个证书存储,我知道出于明显的安全原因,那里保存的私钥不太可能导出到 javascript 中,但我假设有一些方法可以 - 使用 - 来自 javascript 调用的证书来解密某事..

我想这样做的原因是我需要一种安全的方法来将随机生成的密码提供给特定的管理员。我正在尝试实现完整的数据库半透明性,而公钥加密似乎是这项工作的重要组成部分。但这是我在没有这种能力的情况下难以解决的一个用例。

所以在 php 方面,我会像这样使用 openssl 加密调用...

<?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>";

?>

请注意,我通过 stackedoverflow 找到了许多优秀的 javascript 加密库...但实际上我想使用根据 MyOpenId.com 或 CaCert.org 导入到 Firefox 中的 key

有人知道这是否可行吗?

谢谢, -FT

最佳答案

你问这个问题已经有一段时间了,但如果你或其他人正在寻找这个问题或类似问题的潜在解决方案,他们应该查看 JavaScript Forge 项目:

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

该项目在 JavaScript 中实现了 SSL,允许您在与 Apache 通信时包含客户端证书。您还可以使用关联的私钥(您可以在 JavaScript 中访问)手动进行 RSA 解密。

例如,JavaScript 可以获取/发布到服务器并包含其客户端证书。 Apache 可以读取此证书,使用公钥加密任何适当的数据,然后将该数据返回给客户端。然后,客户端可以使用其私钥(在 JavaScript 中)解密信息并对其进行处理。但是,如果您的服务器可以将客户端证书验证为您尝试传递的 secret 的适当接收者,则可能甚至不需要这种额外的加密。

Forge 项目也有 API 来构建一个系统,用于从 Firefox 或其他浏览器导入/导出 key 和证书(如果出于某种原因这仍然是一个要求)。可能需要 openssl 的一点帮助才能以正确的格式获取 key /证书以进行导入/导出 (pem => pkcs12),但可以在基于 JavaScript 的 WebID 演示中找到其中一些工作原理的示例。 WebID 是一种基于客户端证书的身份验证系统:

WebID管理演示:https://webid.digitalbazaar.com/manage/

WebID 身份验证演示:https://payswarm.com/webid-demo/

请注意,上述网站的 SSL 证书是自签名的,需要将临时异常(exception)添加到您的浏览器才能查看。这些网站不要求您输入任何个人信息,它们仅用于演示目的。但是,如果您转到第一个链接,您可以在浏览器中生成 key (它使用 Forge JavaScript 来执行此操作),然后您可以在顶部的列表中看到以 PEM 格式生成的私钥和证书页面的。 key 和证书通过闪存本地存储持久保存。

WebID 管理站点的源代码几乎 100%(如果不是那个)是可见的,因为它主要是 JavaScript。此外,Forge 项目本身(参见 github 链接)是开源的。

关于php - 使用客户端证书的私有(private)部分让 firefox 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2082262/

相关文章:

php - 获取即将到来的夏令时日期

javascript - 如何像这样重定向到其他网站

javascript - Video.js:设置视频src后出错

iphone - 安全/加密的 PDF : iOS 4. 3 显示空白页

php - 减少 codeigniter 中的加密字符串长度

php - 在新查询中链接现有 MySQL 记录,PHP/PDO

php - C 程序中的 block 系统命令

python - python中的RSA加密

php mysql 和 memcached

javascript - 通过 cypress.get() 选择 HTML 中的元素