标签 https 下的文章

在ssl2buy.com购买通配符证书

在阿里云申请的单域名证书过期了,由于设备众多需要重新申请,索性买个通配符证书(wildcard俗称野卡)。为什么不用letsencrypt的通配符证书,每三个月更新一次证书还不如阿里云的单域名一年更新一次。

经过简单了解,选择了ssl2buy.com购买证书,确实别别的地方便宜一些。
这次购买的是alphassl的40刀一年,购买了2年。
付款后按提示开始配置,需要自己生成csr(Certificate Signing Request),这里使用https://csrgenerator.com/
天好心情信息后会生成如下

-----BEGIN CERTIFICATE REQUEST-----


-----END CERTIFICATE REQUEST-----
-----BEGIN PRIVATE KEY-----


-----END PRIVATE KEY-----

把上面生成的第一部分

-----BEGIN CERTIFICATE REQUEST-----


-----END CERTIFICATE REQUEST-----

填入配置页面,会有个选择域名认证的方式,我选择了dns,
会给你一个txt的根域,解析生效后在配置页面点击验证。
几分钟后就会生成通配符域名证书
这里没有中间证书,为了移动设备等的兼容性需要配置好中间证书,这里通过一个工具来补全https://myssl.com/chain_download.html
保存为fullchain.pem
然后把第一步中

-----BEGIN PRIVATE KEY-----


-----END PRIVATE KEY-----

保存为privkey.pem
nginx中修改成这两个文件即可。

proxmox配置https证书、端口、源和关闭订阅提醒

proxmox安装完后默认管理地址是https://IP:8006,由于是自签名证书,所以浏览器打开提示证书错误。
一、修改证书及端口让浏览器正常打开。
1,安装pve时配置固定ip,配置域名解析到这个ip
2,申请域名证书
3,ssh登陆到pve,找到/etc/pve/nodes/<主机名>/<主机名>-ssl.key和<主机名>-ssl.pem,把pem和key替换成域名证书内容
4,由于8006端口是写入二进制文件的,所以不能从配置文件修改,这里通过iptables添加端口转发

iptables -t nat -I PREROUTING -d <IP> -p tcp --dport 443 -j DNAT --to-destination <IP>:8006

iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8006

5,禁止外部访问8006端口

iptables -A INPUT -s 127.0.0.1 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -p TCP --dport 8006 -j REJECT

iptables -A INPUT -i ! lo -p tcp --dport 8006 -j DROP

6,保存iptables

iptables-save > /etc/iptables.up.rules
echo -e '#!/bin/sh\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables

这样浏览器打开https://你的域名,就是正常的了。

二、配置更新源
1,删除原来的企业源

rm /etc/apt/sources.list.d/pve-enterprise.list

2,添加官方免费源

echo 'deb http://download.proxmox.com/debian/pve stretch pve-no-subscription' >>/etc/apt/sources.list.d/pve-free.list

3,更新

apt update

三、关闭订阅提醒
1,编辑文件

nano /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

control+w 搜索data.status,把if(data.status!=='Active') 修改为if(false),control+x保存退出
2,退出重新登陆
3,此方法可能在升级pve后失效,失效后再修改即可

unifi的cloud key 替换https证书及遇到的坑

20191023更新:最新版cloudkey系统keytool软连接到了错误位置

/usr/lib/jvm/java-8-openjdk-armhf/jre/bin/keytool -importkeystore -srckeystore unifi.p12 -srcstoretype PKCS12 -srcstorepass aircontrolenterprise -destkeystore unifi.keystore.jks -storepass aircontrolenterprise

此外新版开机证书检测脚本把cert.tar的目录改到了/root/etc/ssl/private,需要注意。更正打包命令,删除cloudkey.crt cloudkey.key unifi.keystore.jks的路径。

unifi的cloud key的web页面默认使用的是自签名的证书,打开时浏览器会提示不信任的页面,从阿里云或者其他地方免费获取证书后替换就能显示小绿锁了。想着替换一个证书而已,没想到这中间还有坑。
首先简单介绍一下cloud key的web架构
首先是80端口,请求http后会返回301跳转到https,然后打开入口页面,一个是unifi controller,一个是cloud key管理
80端口和443端口是nginx监听的,cloud key 管理页面是443端口,但是unifi controller使用的是8443端口,这个是java的
检查nginx配置发现ssl证书在/etc/ssl/private目录下,有cloudkey.crt和cloudkey.key,nginx证书替换好办,直接把新申请的域名证书内容覆盖cloudkey.crt和cloudkey.key内容即可。
麻烦的是java使用的证书,在网上找到办法,需要根据cloudkey.crt和cloudkey.key生产p12格式证书,在用工具生成Java用的证书unifi.keystore.jks,方法如下

cd /etc/ssl/private
openssl pkcs12 -export -in cloudkey.crt -inkey cloudkey.key -out unifi.p12 -name unifi -password pass:aircontrolenterprise
keytool -importkeystore -srckeystore unifi.p12 -srcstoretype PKCS12 -srcstorepass aircontrolenterprise -destkeystore unifi.keystore.jks -storepass aircontrolenterprise
service nginx restart
service unifi restart

现在使用域名打开unifi controller页面,小绿锁出现了。
然后就遇到坑了,重启发现证书又变成了自签名,这就尴尬了,重启不能保存这则么能行。google后有说cloud key重启会重置文件系统的,但是查看df -h,和经过测试,发现并不会重置,那就是有开机脚本操作了。再搜索,ubnt的英文论坛里说/usr/share/initramfs-tools/scripts/ubnt-bottom/configure-sslcert这个脚本每次开机执行,检查/etc/ssl/private/cert.tar这个压缩包里的证书是否和/etc/ssl/private里的一致。分析脚本发现,只要这个tar包只要是非0字节就会解压到临时目录,对比/etc/ssl/private里证书,如果不一致则情况重新生成,并更新cert.tar。
到此,只要保持cert.tar里面到三个文件和外面到一致就可以了。注意,打包时cloudkey.crt cloudkey.key unifi.keystore.jks三个文件不要带路径。

cd /etc/ssl/private && tar cvf /root/etc/ssl/private/cert.tar cloudkey.crt cloudkey.key unifi.keystore.jks

重启,小绿锁还在。

转一个脚本

#!/usr/bin/env bash

###################################################
# Instructions to replace self-signed certificate #
###################################################
# 1. Save this script file to your cloud key
# 2. Use chmod to make this script executable:
#    chmod u+x cloudkeycert.sh
# 3. Create a certificate signing request (CSR) and private key
#    including the Subject Alternate Name (SAN) field.
#    Chrome will complain if the SAN field is missing.
#    There are many tools out there to create the CSR and
#    key file:
#    * - XCA (https://sourceforge.net/projects/xca/)
#    * - Digicert util (https://www.digicert.com/util/)
#    * - etc.
# 4. Have the CSR signed.
# 5. Ensure the signed certificate and key are in PEM (Base64) format
# 6. In the root home directory (/root), copy the signed cert
#    and key using the following names:
#    * - Certificate -> cloudkey.crt
#    * - Private Key -> cloudkey.key
# 7. Then run this script.  It will backup the existing files
#    in case you need to back out, copy the new files into place,
#    and update the keystore file.  It will stop/start the 
#    web server (NGINX) and the Unifi services.  You may need
#    to close your browser as it may not pick up on the fact that
#    the certificate changed...
#
# OpenSSL and Keytool options copied from script:
#    /usr/share/initramfs-tools/scripts/ubnt-bottom/configure-sslcert
# the only added option to the keytool was -noprompt to force
# overwriting the unifi alias rather than requiring the user
# to answer the prompt

HOSTCERTDIR=/etc/ssl/private
HOSTCERTTAR=cert.tar
HOSTCERTS="cloudkey.crt cloudkey.key unifi.keystore.jks"
BACKUPDIR="${HOSTCERTDIR}/`/bin/date +%Y%m%d`"
BACKUPFILE="`/bin/date +%Y%m%d%H%M`-cert.tar"

echo "Stopping the unifi service"
/usr/sbin/service unifi stop

echo "Stopping the NGINX web server"
/usr/sbin/service nginx stop

# Change to certificate directory
cd ${HOSTCERTDIR}

# Create a backup of the existing bits just in case
if [ ! -d ${BACKUPDIR} ]; then
        echo "Making directory ${BACKUPDIR}"
        mkdir ${BACKUPDIR}
fi

if [ ! -f ${HOSTCERTDIR}/${BACKUPFILE} ]; then
        echo "Creating tar ${BACKUPDIR}/${BACKUPFILE}"
        /bin/tar -cf ${BACKUPDIR}/${BACKUPFILE} ${HOSTCERTS}
fi

# Copy the certificate files from /root
/bin/cp /root/cloudkey.key ${HOSTCERTDIR}/
/bin/cp /root/cloudkey.crt ${HOSTCERTDIR}/

# Build the keystore file from the cloudkey.key and cloudkey.crt
/usr/bin/openssl pkcs12 -export -in ${HOSTCERTDIR}/cloudkey.crt -inkey ${HOSTCERTDIR}/cloudkey.key \
        -out /tmp/keystore.p12 -name unifi -password pass:'' && \
/usr/bin/keytool -importkeystore -deststorepass aircontrolenterprise \
        -destkeypass aircontrolenterprise -destkeystore ${HOSTCERTDIR}/unifi.keystore.jks \
        -srckeystore /tmp/keystore.p12 -srcstoretype PKCS12 -srcstorepass '' -alias unifi -noprompt

# Create the tar file after the keystore file is created
cd ${HOSTCERTDIR}
/bin/tar -cf ${HOSTCERTTAR} ${HOSTCERTS}


echo "Starting the NGINX web server"
/usr/sbin/service nginx start

echo "Starting the unifi service"
/usr/sbin/service unifi start

echo "You may need to restart your browser so it will notice the updated certificate"

esxi修改https证书,不再提示不可信

ESXi 安装后会默认自动生成证书,浏览器报不可信,网页提供的证书上传的功能不可用。

通过SSH手动替换证书是个相对可靠方便的方法。

注:连接了vCenter的主机需要跟vCenter走,本例为独立主机。

首先在面板或DCUI中启用SSH。

登录后,

cd /etc/vmware/ssl
ls
里面的 rui.crt 和 rui.key 就是需要改的证书了。

有需要的可以先备份一下,然后,

vi rui.crt
修改,贴入签名过的证书。

vi rui.key
修改,贴入证书密钥。

注意 .key 是只读文件,保存时可以用 :wq! 强制保存。

证书替换后不是即时生效,需要重启。

记录一个nginx的301或者rewrite的坑

http跳转到https一般使用301或者rewrite,但是在post到http时,按照http标准,收到301后会变成get https,一般调用接口会出现这个问题,简单不完美的解决办法是使用303或者307跳转。