分类
Zimbra

Zimbra 8.X安装使用阿里云免费SSL证书脚本(更新)

网上一搜都是使用 Let’s Encrypt或者沃通的SSL,他们的格式和阿里云下载的还是不同的,阿里云的相对来说,可能更简单些,不用合并root证书。

首先当然要去阿里云申请的ssl证书下载其他类型证书,解压缩后有两个文件上传到相应目录,这里是/opt/zimbra/ssl/aliyunssl/,文件名类似18131-domain.key和.pem

对比Let’s Encrypt和Wosign的证书,这里会涉及到转换阿里云的RSA密钥到PKCS#8的格式,两者的区别,在于开头和结尾的内容。zimbra是不能验证RSA秘钥的。

—–BEGIN RSA PRIVATE KEY—–

—–BEGIN PRIVATE KEY—–

我们可以通过openssl命令把阿里云的私钥转成zimbra能接受的格式。

 openssl pkcs8 -topk8 -inform PEM -in 18131XXXXXXXXX.key -outform PEM -nocrypt -out privkey.pem

完整脚本如下:

#!/bin/bash
# Note: create by itgeeker

domain=mail.itgeeker.net

su - zimbra -c 'zmproxyctl stop'
su - zimbra -c 'zmmailboxdctl stop'

mkdir /opt/zimbra/ssl/aliyunssl/
echo "up load aliyun ssl other to this folder first !!!!!!!"
cd /opt/zimbra/ssl/aliyunssl/
openssl pkcs8 -topk8 -inform PEM -in 18131XXXXXXXXX.key -outform PEM -nocrypt -out privkey.pem
mv 1813131_mail.geekerconsulting.com.pem cert.pem
chown zimbra:zimbra /opt/zimbra/ssl/aliyunssl/*

su - zimbra -c 'cd /opt/zimbra/ssl/aliyunssl/ && /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem '

echo "Backup Zimbra SSL directory"
cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d")

echo "Copy the private key under Zimbra SSL path"
cp /opt/zimbra/ssl/aliyunssl/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key

echo "Final SSL deployment"
su - zimbra  -c 'cd /opt/zimbra/ssl/aliyunssl/ /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem'

echo "restart zimbra"
su - zimbra -c 'zmcontrol restart'

gist link:

https://gist.github.com/alanljj/2f90ca543dc2f2e45319ac13c30bbf72

验证zimbra ssl证书命令:

su - zimbra -c '/opt/zimbra/bin/zmcertmgr viewdeployedcrt'

更新

通过上面的方法虽然没有提示任何错误,但可能无法更新证书,使用验证命令,仍然会显示老的证书。那么就需要以下的复杂流程了。

zimbra证书的三个文件,目录/opt/zimbra/ssl/zimbra/commercial/:

  1. commercial_ca.crt
  2. commercial.crt
  3. commercial.key

zimbra ssl证书制作方法:

commercial_ca.crt – 阿里云下载证书1813131_domain.pem的第二部分,也就是第二个—–BEGIN CERTIFICATE—–到—–END CERTIFICATE—– 也就是中级证书(mid-digicert-ca) + 根证书(root-digiert-ca)

阿里云免费ssl的根证书分享,不同发证机构根证书会有所不同:

-----BEGIN CERTIFICATE-----
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
-----END CERTIFICATE-----

https://gist.github.com/alanljj/26b12b591173b3ba7c3c51edea09cad6

commercial.crt – 1813131_domain.pem的第一部分,也就是第一个—–BEGIN CERTIFICATE—–到—–END CERTIFICATE—–部分。

commercial.key – 就是1813131_domain.key,用上面的RSA密钥到PKCS#8 转换方法先转换,然后改名字就可以了。

开始部署

上传三个文件到/opt/zimbra/ssl/zimbra/commercial/目录,上传前检查、检查、再检查是否已经正确,如果老的文件已存在,先删除老的三个文件(技术奇客有碰到未删除,生成的文件格式不对导致无法更新ssl证书的情况)

验证证书。进入/opt/zimbra/ssl/zimbra/commercial/目录后,使用zimbra用户执行:

/opt/zimbra/common/bin/openssl verify -CAfile commercial_ca.crt commercial.crt

部署证书。 使用zimbra用户执行 :

/opt/zimbra/bin/zmcertmgr deploycrt comm commercial.crt commercial_ca.crt

重启zimbra服务。

su - zimbra -c 'zmcontrol restart' 

查看新证书。

su - zimbra -c '/opt/zimbra/bin/zmcertmgr viewdeployedcrt' 

本方法ITGeeker技术奇客在CentOS 6 zimbra 8.8.11_FOSS版本实操通过。

by ITGeeker Approven
分类
Odoo python

Odoo timezone时差调整方法

最近在整合VOIP电话(供应商称为云电话)到奇客大师(GeekerMaster)系统,返回的log说是时间戳错误。供应商说每次post的url的时效性是1分钟,检查发现后,我们每次发送Post请求的时候都会重新产生一遍,应该不存在时间过期的问题。

用 _logger.warning记录更多参数,发现在计算post的url时的时间是不对的,比当前电脑时间早了8个小时。而在系统端用date查询时间是正确的。应该是Odoo系统采用UTC时间的问题,Odoo系统前端显示是当前自己时区的时间,后台数据库用的是UTC时间,据说这是解决全球性使用一个系统的时间差问题的最好方法。

但是国内的供应商用的是北京时间UTC+8时区,所以只好着手解决了:

Odoo调整时差方法一

import datetime
from datetime import timedelta

now = (datetime.datetime.now() + timedelta(hours=8)).strftime("%Y%m%d%H%M%S")

直接加8个小时,直观又方便。后面的时间格式根据要求可以更改。

Odoo调整时差方法二

import datetime
import pytz

user_tz = self.env.user.tz
# local_tz = pytz.timezone(user_tz)
now = datetime.datetime.now(pytz.timezone(
            user_tz)).strftime("%Y%m%d%H%M%S")

前提要在个人配置里设置对你自己的时区,否则无法读取。

这里有个小提示: strftime和 strptime是不同的,一个是输出显示时间的样式,后者是输出时间的格式。

ITGeeker技术奇客最近也调试了阿里云的短信,阿里用的时间格式就和时差无关,用的GMT时间。分享一下用python实现阿里短信所需要的时间格式吧:

import time

now = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())

UTC确立以后UTC(GMT)=UTC(+0)作为一般提到的世界时,GMT表示零时区的时刻。 … 格林威治时间(GMT)是一个比较模糊的概念。 在1928年,GMT就是世界时。 在UTC被广泛采用后,我们提到的GMT实际上是UTC时间,或者说零时区的标准时。

所以说用UTC是最好的解决方案。
分类
NAS

群晖NAS无法同步阿里云OSS文件的原因

阿里云对象存储OSS的权限已经给足,群晖使用CloudSync添加OSS的Bucket的添加也很顺利,为何还是不能同步呢?

群晖同步失败截图

后来用阿里云官方提供的OSS Browser试着下载,会看到提示:

归档文件,需要恢复才能预览或下载

选择恢复后,过了一定时间,网上说要一分钟,实际似乎要长一些,然后就可以同步了。

几经查询才发现是自己创建Bucket的时候,在存储的时候选择存储类型的时候,选择了“归档存储”所致。

对象存储OSS存储类型有标准存储类型(Standard)、低频访问存储类型(Infrequent Access)和归档存储类型(Archive)三种存储类型。三种存储类型拥有不同的价格:

  • 标准类型的存储费用:0.148元/GB/月
  • 低频类型的存储费用:0.08元/GB/月
  • 归档类型的存储费用:0.033元/GB/月

真是一个复杂,具体关于这三个存储类型的特点和优劣,请参看官方文档https://help.aliyun.com/document_detail/51374.html?spm=5176.8466010.0.0.43431450cHTEns

群晖NAS同步出错解决方案-OSS生命周期管理

官方说用户可以对一个Bucket中有需要的Object设置Lifecycle规则,实现一个Object从Standard -> 低频 -> 归档 -> 过期删除的生命周期管理。

这个方式可以解决节省费用的问题,但对于群晖同步时的错误提示,很难做到消除,而且NAS会一直发送请求。如果群晖的CloudSync做到能选择只同步指定存储类型的文件,问题可能就解决了。

其他解决方案还请技术奇客们多多留意指点一二。

分类
Zimbra

Zimbra 邮件尚未发送;有一个或多个地址未被接受。被拒绝地址:xx@itgeeker.net

阿里云升级经典网络为专有网络后,zimbra在线发送邮件出现弹窗错误。

Zimbra 邮件尚未发送;有一个或多个地址未被接受。被拒绝地址:xx@itgeeker.net

查询zimbra.log

发现类似错误log:

Jun 28 06:39:23 zimbra postfix/smtpd[31788]: NOQUEUE: reject: 
RCPT from mail.itgeeker.net[10.10.130.10]: 554 <somebody@domain.com>: 
Relay access denied; from=<user@example.com> to=<somebody@domain.com> 
proto=SMTP helo=<mail.itgeeker.net>

谷歌到官方wiki解释是ZimbraMtaMyNetworks相关配置问题,https://wiki.zimbra.com/wiki/ZimbraMtaMyNetworks

解决方案及步骤

#首先查看你的mynetworks配置
#su - zimbra
$postconf mynetworks
mynetworks = 127.0.0.0/8 10.162.96.0/20 xxx.xxx.172.0/22

zmprov gs mail.itgeeker.net zimbraMtaMyNetworks
zimbraMtaMyNetworks: 127.0.0.0/8 10.162.96.0/20 xxx.xxx.172.0/22    
#此处返回的结果包含了老的内网ip地址10.162.96.0/20,也是引起问题的原因。

# 更新zimbraMtaMyNetworks配置,可以是单一本机,或者地址段的网址,用/24或/32来区分,假设新的内网ip是10.10.130.0/24
zmprov ms mail.itgeeker.net zimbraMtaMyNetworks '127.0.0.0/8 10.10.130.0/24 xxx.xxx.172.0/22' #最后一部分的公网地址段可保持不变
postfix reload

#查询核实结果
zmprov gs mail.itgeeker.net zimbraMtaMyNetworks
zimbraMtaMyNetworks: 127.0.0.0/8 10.10.130.0/24 xxx.xxx.172.0/22    

回到网页登录发送测试邮件,成功解决。

分类
Linux

阿里云经典网络升级为专有网络

记得今年上半年,为了复制老服务器(经典网络)的文件到新服务器(专有网络),寻求阿里云的技术支持,结果什么解决方案都给不出,答复说我原先所在的服务器基础设施过于陈旧,所以无法通过内网复制,ITGeeker技术奇客只能通过外网,花了一天一夜才复制完毕。幸亏数据量不大,由此对阿里云的服务器十足的失望了一把。

上周开始,阿里云突然提示说可以把经典网络升级成专有网络了,猜想阿里云对老用户的抱怨应该有所察觉,不能不管已卖掉的老服务器吧。

于是乎赶紧升级了名下唯一的还是经典网络的服务器,过程非常顺利,递交申请后很快就回复,然后就给顺利的升级了。当然升级时有些提示,具体情况还是要根据自己的实际配置来调整配置服务器。

ITGeeker技术奇客升级到专有网络碰到的几个问题:

  • SSH设置了hosts.allow,但是无论如何设置还是无法登录,提示connection refused的错误,最后只能vi /etc/hosts.allow,注释其他所有,添加以下代码解决。
ssh: ALL
  • 服务器装有LDAP服务,阿里云升级到专有网络后,本地的ip地址也更改了,所以还要修改hosts文件,把老的内网ip替换为新的内网ip,否则你的ldap可能会提示错误。
Starting ldap...Done. Failed. Failed to start slapd. Attempting debug start to determine error. 5c16fedd daemon: bind(7) failed errno=99 (Cannot assign requested address) 5c16fedd daemon: bind(7) failed errno=99 (Cannot assign requested address) 5c16fedd slap_open_listener: failed on ldap
  • 再有就是要创建一个专有网络的安全规则,和之前的经典网络安全规则不通用。正好可以清理一下之前不必要的port通行,顺便也看看iptables吧,如果你还是使用CentOs 6 版本的防火墙。