在PostgreSQL数据库中存储X509证书的最佳方法是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在PostgreSQL数据库中存储X509证书的最佳方法是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1990字,纯文字阅读大概需要3分钟。
内容图文
我正在使用Web身份验证系统,用户将对随机令牌进行数字签名,并使用存储在服务器上的X509证书进行检查.
因此,我必须在PostgreSQL数据库中存储几个X509证书(PEM或DER格式).听起来很简单,但我希望有可能搜索带有主题,发行者,notBefore,notAfter和类似标准的证书.
我的想法是在数据库中有以下列:X509data,notAfter,notBefore,subject,issuer等.我将使用add_new_X509(),find_X509(搜索条件)等方法创建表示X509证书的对象(在SQL炼金术中).所以每当我将使用方法add_new_X509()添加新证书,它将自动从证书中读取所有数据并填充其余列并将原始证书放入X509data列.
不幸的是这个解决方案有两个缺
>我将存储两次相同的信息(在X509证书本身和单独的列中以便于搜索)
>每当我想阅读X509证书时,我的应用程序将不得不交叉检查,而不是之前,主题,发行人与原始证书中存储的信息(这是出于安全原因,以防有人试图修改此字段).
所以..任何人都有更好的想法或建议?也许有人看到这个解决方案可能出现的任何其他安全问题?
解决方法:
复制并不理想,但在这种情况下可能是最佳选择.设置表权限,以便表所有者不是您的应用运行的日常数据库用户,并且只授予您的应用程序写入证书数据列的能力,而不是具有到期等的“缓存”列. SECURITY DEFINER触发器函数拦截写入证书字段,并且作为特权用户通过使用X.509库在验证后从证书中提取字段来更新索引缓存列.
或者,您可以编写一个PL / Python,PL / Perl,甚至是一个调用X.509证书解析器库的C SQL函数来提取字段并返回它们.所以你要说extract_x509_field(证书,’主题’).或者甚至是像SELECT主题一样的行返回形式,issuerName FROM(SELECT extract_x509_fields(cert)FROM the_table)其中extract_x509_fields返回所有相关证书数据的一行.使用这种方法,您可以创建功能索引,如CREATE INDEX cert_issuer ON certificate_table(extract_x509_field(cert,’issuer’));可用于匹配WHERE表达式.根本不需要为提取的数据提供表列.缺点是,在索引创建期间,索引重新检查期间等证书将被多次解析,这可能会更慢.
无论哪种方式,您的应用程序作为PostgreSQL用户运行是至关重要的,该用户不是数据库所有者,而不是超级用户,而不是所关注的表和索引的所有者.它应该被授予必要的最低权利,而不是更多.如果你有完全独立的任务(比如只读与写入和更新),请考虑为他们使用不同的数据库用户,以便即使你的应用程序的“读取”部分被欺骗尝试编写字段/更新证书/ etc,它没有权限.
内容总结
以上是互联网集市为您收集整理的在PostgreSQL数据库中存储X509证书的最佳方法是什么?全部内容,希望文章能够帮你解决在PostgreSQL数据库中存储X509证书的最佳方法是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。