GoldMap项目笔记(三)

新的问题很快就出现了,嗯,不过我觉得在这个项目运行的初期,还不算是什么大的问题,不过个人觉得还是有必要加以关注,同时也做一点学习和了解。
这个问题的引发是由于使用了asnycpg这个库操作postgresql,当访问postgresql创建连接池的时候,调用的参数包括了用户密码,当时我写入了访问数据库的密码,而且是明文写入的。因为目前项目是保存在github上面的,当代码上传之后,等于访问数据库的帐号以及密码就完全公开了,然后这就引发了我的困扰。因为这完全就是安全的隐患嘛!
昨天一天都在试图解决这个问题。
最先从脑海里产生的思路是,这是asyncpg的问题,为什么会明文写入密码,时候可以先进行加密,然后将加密后的密码串发送给pg,由pg端进行解密,然后验证用户?但是很快这个思路就被我否定了,因为这样操作,似乎并不能解决问题。因为即使我预先加密了原始的密码,但是只要调用asyncpg操作创建连接池的时候,还是要在参数中输入密码,密码同样也等于暴露了。
然后我想到的思路就是做ssl访问,客户端和服务器端核对认证证书。这样就无需输入密码即可访问操作postgresql了,而且在我的印象中,postgresql也是支持ssl和ssh访问的。于是,接下来就一直在按照这个思路在查询相关的资料。
首先查找的是postgresql的官方文档,不得不说,postgresql的官方文档相当详细,几十章的内容,介绍了这个产品的方方面面。介绍客户端认证的内容在第十九章(我使用的postgresql版本号为9.5,而最新版则是9.6),整整一个章节介绍了认证的各个方法。其中就包括了关于ssl认证的说明。而第十七章第九节则详细介绍了如果设置ssl认证。postgresql的ssl认证是需要制作证书,客户端的证书尤其麻烦。不过在该小节末尾介绍了如何自行制作ssl证书。于是我就按照该章节的说明进行了配置。
很不幸的是,尝试没有成功。然后就在网络上搜集其他人的文章,看看有没有配置成功的操作案例,虽然找到了不少,而且每个人设置的方法也都不尽相同。只好跟着每个人的设置,尝试解决自己的问题。就这样折腾了一个晚上,一直到了半夜。问题依然没有解决。
我的系统是ubuntu16.10,看起来似乎是权限的问题,只要我在pg_hba.conf文件中设置了认证方式为hostssl,postgresql的服务就无法启动,/var/run/postgresql/.s.PGSQL这里就没有权限获取,从而导致服务不能起来。关于这一点,可能需要在后面学习了postgresql的相关知识后才能找到问题的原因了吧。
不过在查阅官方文档的过程中,我倒是发现了避开我的困扰的方法。根据文档中的说明,在postgresql的本机上客户端访问时候,是可以不用输入密码,直接就可以进行访问并操作的,于是我尝试着修改了一下代码。果然,虽然去掉了password的参数,但是程序依旧成功地进行了数据库的操作。这个晚上总算有了一点点小小的收获!
对于现在的情况来说,关于安全这一块,则是将风险转移到了操作系统上面,只要系统不被入侵,访问数据库的操作还是比较安全的。就算以后整个系统正式上线,只要不是需要多台机器访问数据库,这一个困扰我的问题都不需要面对。不过我想,到了那个时候,或许这个系统已经相当庞大了,而我也许找到了更好的办法。毕竟对于psotgresql来说,可以进行安全认证的方法并不只有ssl这一种。
前几天在蜂鸟上面看到了一组外国的摄影师为自己女儿拍摄的写真,爸爸将女儿打造成了《星球大战:原理觉醒》的女主角,非常的可爱。不知道未来将会诞生的我的宝贝,会不会有一天也会让我给她拍一组这样的片子?

你可能感兴趣的:(GoldMap项目笔记(三))