快速自颁代码签名证书

保存以下内容为.bat批处理文件,快速生成自己的代码签名证书:

openssl req -new -keyout code/codeSign.key -out code/codeSign.req -config openssl_code.cnf
openssl ca -policy policy_anything -config openssl_code.cnf -out code/codeSign.pem -infiles code/codeSign.req
openssl pkcs12 -export -out code/codeSign.pfx -inkey code/codeSign.key -in code/codeSign.pem -codeSignfile ./demoCA/ca.crt

快速自颁ECC SSL证书

保存以下内容为.bat批处理文件,快速生成自己的证书请求文件csr、私匙key及SSL证书crt:

openssl ecparam -out ssl/server.key -name secp384r1 -genkey && openssl req -config openssl_server.cnf -new -key ssl/server.key -sha384 -nodes -out ssl/server.csr
openssl ca -config openssl_server.cnf -extensions server_cert -days 3650 -in ssl/server.csr -out ssl/server.crt

如果要使用中文:

openssl ecparam -out ssl/server.key -name secp384r1 -genkey && openssl req -utf8 -config openssl_server.cnf -new -key ssl/server.key -sha384 -nodes -out ssl/server.csr

快速自颁ECC CA根证书

保存以下内容为.bat批处理文件,快速生成自己的根证书CA crt及私匙key:

openssl ecparam -genkey -name secp384r1 | openssl ec -aes256 -out ca.key
openssl req -config openssl_root.cnf -new -x509 -sha384 -extensions v3_ca -key ca.key -out ca.crt -days 10800
openssl x509 -noout -text -in ca.crt

Let’s Encrypt的证书签发与配置

本教程没有用到任何脚本进行配置Let’s Encrypt的证书,对于新手熟悉一下https的配置也是有帮助的。教程中的出现的xiaokyun.com域名需要替换成你要签发的域名。另外教程是在阿里云ECS上实践出来后才写的,跟着教程走就可以签发成功。

签发Let’s Encrypt证书

进入有root权限的终端,先停止nginx运行(必做)

CentOS 6.x:

service nginx stop

CentOS 7.x:

systemctl stop nginx

然后获取Let’s Encrypt的源代码

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

接着给你的网站签发证书

./letsencrypt-auto certonly --standalone --email i@xiaokyun.com -d xiaokyun.com -d www.xiaokyun.com

!注!意!

(from https://pypi.python.org/simple/python2-pythondialog/) failed: <urlopen error [Errno -2] Name or service not known>

如果出现这个报错,则需要进行下面的配置

mv /etc/resolv.conf /etc/resolv.conf.backup && vim /etc/resolv.conf

打开resolv.conf文件之后里面应该是什么都没有的

i 进入编辑模式,复制下面的内容进去,保存退出

nameserver 223.5.5.5
nameserver 8.8.8.8

然后重新执行,给你的网站签发证书

./letsencrypt-auto certonly --standalone --email i@xiaokyun.com -d xiaokyun.com -d www.xiaokyun.com

这个主要是修复服务器上的DNS解析失败的问题


完成上面的操作,Let’s Encrypt就已经给你的网站签发证书了

可以输入下面命令查看

ls /etc/letsencrypt/live/xiaokyun.com(这里的域名是你的签发证书域名)

会发现里面有四个文件

cert.pem  chain.pem  fullchain.pem  privkey.pem

前两个是给Apache用的,后两个才是给Nginx用的

配置Nginx

这里默认你已经开启了https,只是替换证书而已···

打开网站所对应的Nginx的conf配置文件

假设我的配置文件是在 /usr/local/nginx/conf/vhost 的目录

vim /usr/local/nginx/conf/vhost/xiaokyun.com.conf

打开后,按 i 进入编辑模式,找到

ssl_certificate .............;
ssl_certificate_key ............;

修改为

ssl_certificate /etc/letsencrypt/live/xiaokyun.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xiaokyun.com/privkey.pem;

不要忘了启动Nginx

CentOS 6.x:

service nginx start

CentOS 7.x:

systemctl start nginx

至此,Let’s Encrypt的证书签发与配置已经完成,刷新你的网站,就能看到绿绿的小锁

自动续时

一般地,Let’s Encrypt的证书有效期只有90天,所以需要设置一个自动续时的任务

先安装crontabs,一般情况下是提示已经安装

yum -y install crontabs

然后

crontab -e

添加下面的内容在新的一行

0 0 1 * * ./letsencrypt-auto certonly --renew-by-default --email i@xiaokyun.com -d xiaokyun.com -d www.xiaokyun.com

接着,根据自己服务器的系统版本在后面再填一行

CentOS 6.x:

0 1 1 * * service nginx reload

CentOS 7.x:

0 1 1 * * systemctl reload nginx

添加完成后,保存退出,查看定时任务列表

crontab -l

查看显示成功追加了两条定时任务···

这样,服务器就会在每个月1号自动为你的Let’s Encrypt证书续签了。

Let’s Encrypt+Apache虚拟主机上设置

Apache在生成证书后也需要修改一下apache的配置文件 /usr/local/apache/conf/httpd.conf ,查找httpd-ssl将前面的#去掉。
然后再执行:
Apache 2.2如下:

cat >/usr/local/apache/conf/extra/httpd-ssl.conf<<EOF
Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl

SSLCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLProxyCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLHonorCipherOrder on

SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3
SSLPassPhraseDialog builtin

SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300

SSLMutex "file:/usr/local/apache/logs/ssl_mutex"

SSLStrictSNIVHostCheck on
NameVirtualHost *:443
EOF

Apache 2.4如下:

cat >/usr/local/apache/conf/extra/httpd-ssl.conf<<EOF
Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl

SSLCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLProxyCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLHonorCipherOrder on

SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3
SSLPassPhraseDialog builtin

SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300

Mutex sysvsem default

SSLStrictSNIVHostCheck on
EOF

并在对应apache虚拟主机配置文件的最后下面添加上SSL部分的配置文件:

<VirtualHost *:443>
	DocumentRoot /home/wwwroot/www.xiaokyun.com   #网站目录
	ServerName www.xiaokyun.com:443   #域名
	ServerAdmin admin@xiaokyun.com      #邮箱
	ErrorLog "/home/wwwlogs/www.xiaokyun.com-error_log"   #错误日志
	CustomLog "/home/wwwlogs/www.xiaokyun.com-access_log" common    #访问日志
	SSLEngine on
	SSLCertificateFile /etc/letsencrypt/live/www.xiaokyun.com/fullchain.pem   #改一下里面的域名就行
	SSLCertificateKeyFile /etc/letsencrypt/live/www.xiaokyun.com/privkey.pem    #改一下里面的域名就行

<Directory "/home/wwwroot/www.xiaokyun.com">   #网站目录
	SetOutputFilter DEFLATE
	Options FollowSymLinks
	AllowOverride All
	Order allow,deny
	Allow from all
	DirectoryIndex index.html index.php
</Directory>

</VirtualHost>

需将上述配置根据自己的实际情况修改后,添加到虚拟主机配置文件最后面。注意要重启apache使其实现。
执行:

/etc/init.d/httpd restart

重启Apache使其生效。