ssl

中间件技术栈

Wordpress站点的Nginx服务配置https

生成证书

参考《SSL证书生成》,生成适合于自己的免费证书。也可购买商业SSL证书。

如果只想生成CSR,用CSR在CA机构换取CRT证书,可以执行下面命令即可:

1
openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr

配置Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 配置80端口跳转到443端口
server {
listen 80;
server_name www.abc.zyx;
# rewrite ^ https://$server_name$request_uri permanent;
rewrite ^(.*)$ https://$host$1 permanent;
}
# 配置WordPress的https服务
server {
#listen 80;
#listen [::]:80;
listen 443 ssl;
server_name www.abc.zyx;
charset utf-8;

ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA256";
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

location / {
root /var/www/html/abc;
index index.html index.htm index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
try_files $uri $uri/ /index.php?$args;
}
#rewrite /wp-admin$ $scheme://$host$uri/ permanent;
#try_files $uri $uri/ /index.php?q=$uri&$args;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

location = /50x.html {
root /var/www/html;
}

location ~ \.php$ {
root /var/www/html/abc;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include fastcgi.conf;
try_files $uri =404;
}

location ~ /\.ht {
deny all;
}
}

注意:ssl_protocols配置项,不添加TLSv1会导致部分IE浏览器打不开,如果加上TLSv1用站长工具检测会提示PCI DSS 不合规。

重新加载配置文件:nginx -s reload

如果是阿里云ECS服务器,需要在控制台的安全组中增加入网的443端口,具体配置可以参照其他的配置。

如果这时候https还不能访问,则需要查看Ubuntu服务器是否开启了443端口,如果无,则需要开启。

查看443端口是否开启:

1
iptables -L -n | grep 443

开启443端口,并让其生效:

1
2
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
iptables-save

WordPress后台改成https访问

主题支持改动

如果主题中有修改网站URL的入口,则直接在admin管理后台修改即可。

如果使用的 WP Editor.md 插件,也需要修改思维导图库资源路径,一般情况下可以使用//替换http://,这样资源就可以根据站点的scheme自动切换了。

SQL UPDATE

1
2
3
4
5
6
7
update scat_posts
set post_content = replace(post_content, 'http://www.abc.xyz', '//www.abc.xyz')
where post_content like '%http://www.abc.xyz%';

update scat_posts
set guid = replace(guid, 'http://www.abc.xyz', 'https://www.abc.xyz')
where guid like '%http://www.abc.xyz%';

通过找到当前主题下的 function.php 文件

1
2
3
4
5
6
7
function replacehttp($content){
if( is_ssl() ){
$content = str_replace('http://www.abc.xyz', 'http://www.abc.xyz', $content);
}
return $content;
}
add_filter('the_content', 'replacehttp');

wp-config.php文件中添加

1
2
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

阅读剩下更多

默认配图
生产工具专题

SSL证书生成

SSL介绍

SSL证书通过在客户端浏览器和 Web 服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。由于 SSL 技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装服务器证书就可以激活该功能了)。即通过它可以激活 SSL 协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。

流程介绍

1.创建根证书密钥文件(自己做CA)root.key;创建根证书的申请文件root.csr;创建一个自当前日期起为期十年的根证书root.crt。

2.创建服务器证书密钥server.key;创建服务器证书的申请文件server.csr;创建自当前日期起有效期为期两年的服务器证书server.crt。

3.创建客户端证书密钥文件client.key;创建客户端证书的申请文件client.csr;创建一个自当前日期起有效期为两年的客户端证书client.crt。

4.将客户端证书文件client.crt和客户端证书密钥文件client.key合并成客户端证书安装包client.pfx;保存生成的文件备用,其中server.crt和server.key是配置单向SSL时需要使用的证书文件,client.crt是配置双向SSL时需要使用的证书文件,client.pfx是配置双向SSL时需要客户端安装的证书文件。

.crt文件和.key可以合到一个文件里面,把2个文件合成了一个.pem文件。(直接拷贝过去就可以)

实际操作

生成CA证书

生成CA私钥(.key)–>生成CA证书请求(.csr)–>自签名得到根证书(.crt)(CA给自已颁发的证书)

  • 生成CA私钥 (key 文件)
1
$ openssl genrsa -out root.key 1024
  • 生成CA证书签名请求文件 (csr 文件)
1
$ openssl req -new -key root.key -out root.csr

交互信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN -------------------------------------------------- 证书持有者所在国家
State or Province Name (full name) [Some-State]:Zhejiang ------------------------------- 证书持有者所在州或省份(可省略不填)
Locality Name (eg, city) []:Hangzhou ---------------------------------------------------- 证书持有者所在城市(可省略不填)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:OpenMind.ltd --------------- 证书持有者所属组织或公司
Organizational Unit Name (eg, section) []:OpenMind ------------------------------------- 证书持有者所属部门(可省略不填)
Common Name (e.g. server FQDN or YOUR name) []:zhoujunwen.com -------------------------- 域名
Email Address []:joyven888@163.com ----------------------------------------------------- 邮箱(可省略不填)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:. --------------------------------------------------------------- 自定义密码
An optional company name []: ------------------------------------------------------------ 可选公司名称
```

<center>表1 CSR证书生成信息</center>

|字段 | 说明 | 示例 |
|------|-------|--------|
|Country Name | ISO国家代码(两位字符)| CN|
|State or Province Name |所在省份| Zhejiang |
|Locality Name|所在城市 |Hangzhou|
|Organization Name|公司名称|XYZ Technology Inc |
|Organizational Unit Name|部门名称|AI Dep |
|Common Name|申请SSL证书的域名|www.abc.xyz|
|Email Address|邮件地址,可选,不需要输入||
|A challenge password|不需要输入||
|An optional company name|可选公司名称||

- 生成证书文件 (crt 文件)

``` bash
$ openssl x509 -req -days 3650 -in root.csr -signkey root.key -out root.crt

生成用户证书

生成私钥(.key)–>生成证书请求(.csr)–>用CA根证书签名得到证书(.crt)

生成服务端证书

1
2
3
4
5
6
# private key  
$ openssl genrsa -des3 -out server.key 1024
# generate csr
$ openssl req -new -key server.key -out server.csr
# generate certificate
$ openssl ca -in server.csr -out server.crt -cert root.crt -keyfile root.key

生成客户端证书

1
2
3
$ openssl genrsa -des3 -out client.key 1024   
$ openssl req -new -key client.key -out client.csr
$ openssl ca -in client.csr -out client.crt -cert root.crt -keyfile root.key

生成PEM格式

1
2
$ cat client.crt client.key> client.pem 
$ cat server.crt server.key > server.pem

文件扩展名说明

  • .key格式:私有的密钥
  • .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
  • .crt格式:证书文件,certificate的缩写
  • .crl格式:证书吊销列表,Certificate Revocation List的缩写
  • .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

免费证书

FreeSSL.org 是一个免费提供 HTTPS 证书申请、HTTPS 证书管理和 HTTPS 证书到期提醒服务的网站,旨在推进 HTTPS 证书的普及与应用,简化证书申请的流程。

生成证书

选择CSR

打开官网,输入需要进行登记的域名,点击“创建免费的SSL证书”,但不支持通配符,然后根据提示输入邮箱,选择证书类型、验证类型、CSR生成方式等信息。

关于CSR生成有三个选项:

  • 1.离线生成

    • 1、私钥本地加密存储更安全,自由选择iCloud、OneDrive、Dropbox、百度网盘备份加密库;
    • 2、公私钥自动合成,支持常见证书格式转换方便部署;
    • 3、支持部分WebServer一键部署,更便捷;
    • 4、需要安装keyManager2软件
  • 2.浏览器生成

    在浏览器支持 Web Cryptography 的情况下,使用浏览器根据用户的信息生成CSR文件。

  • 3.我有CSR

    如果您有 CSR 文件,您可以选择我有 CSR 并粘贴。我们将根据您的 CSR 颁发证书。CSR文件是以”-----BEGIN CERTIFICATE REQUEST-----“开头 和以”-----END CERTIFICATE REQUEST-----“结尾的字符串。

    可通过在线工CSR工具生成,也可以自己生成:

    1
    2
    $ openssl genrsa -des3 -out server.key 2048   
    $ openssl req -new -key server.key -out server.csr

    或者

    1
    openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr

    免费证书CHINASSL 免费SSL证书

验证DNS

上面步骤选择完信息,填写好邮箱之后,点击创建,则出现DNS验证信息。

在域名解析服务中配置TXT记录:

记录类型 解析线路 主机记录 记录值 MX优先级 TTL
TXT 默认 _dnsauth 201906280714025bfkk6mup9247muyv4wuyd77vb5klf4oqqgk2up5q6hgsz0ms2 - 10分钟

然后点击验证,即可生成证书,下载或者在keyManager中导出即可用。

阅读剩下更多

默认配图
返回顶部