开启s3的https客户端无法使用的问题

问题描述

在内网部署的https的时候,我们采用的是自签名的ssl证书,内网的这个证书是无法被客户端认证通过的,这个地方主要体现在下面几个现象可以看到

chrome下的表现

chromeerror
chromeerror2

s3cmd下面的表现

s3browser下的表现

这些共同的表现就是无法建立信任的关系

这里我们实际要解决的问题就是,内网是可以绕过这个证书的检测的

不同客户端的处理

s3cmd的处理

1
[root@lab103 ~]# s3cmd ls  --no-check-certificate   s3://mybucket/

s3browser的处理

可以看到官方在11.5.7版本开始考虑到这个问题了,可以忽略证书的认证,我们只是用到https传输即可

把这个选项勾选,也就是信任所有的证书,重启客户端

可以看到启用https,并且使用了最新的客户端,也是可以正常运行了,也就是证书的问题

通过自颁发证书来解决证书验证问题

自颁发证书

1
yum install openssl openssl-devel -y

step1: 生成证书请求文件

新建openssl.cnf,内容如下:

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
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = CH
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = GD
localityName = Locality Name (eg, city)
localityName_default = ShenZhen
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = organizationalUnitName
commonName = Internet Widgits Ltd
commonName_max = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]

# 改成自己的域名
#DNS.1 = kb.example.com
#DNS.2 = helpdesk.example.org
#DNS.3 = systems.example.net

# 改成自己的ip
IP.1 = 192.168.19.103
IP.2 = 192.168.19.102

step2: 生成私钥

san_domain_com 为最终生成的文件名,一般以服务器命名,可改。

1
openssl genrsa -out san_domain_com.key 2048

step3: 创建CSR文件

创建CSR文件命令:

1
openssl req -new -out san_domain_com.csr -key san_domain_com.key -config openssl.cnf

执行后,系统会提示输入组织等信息,按提示输入如即可。
测试CSR文件是否生成成功,可以使用下面的命令:

1
openssl req -text -noout -in san_domain_com.csr

step4: 自签名并创建证书

1
openssl x509 -req -days 3650 -in san_domain_com.csr -signkey san_domain_com.key -out san_domain_com.crt -extensions v3_req -extfile openssl.cnf

执行后,可看到本目录下多了以下三个文件

1
2
3
san_domain_com.crt
san_domain_com.csr
san_domain_com.key

如果是给nginx用就是一个key 一个crt的

我们准备给ceph的证书(用上面生成的)

1
2
cp san_domain_com.crt  ceph.crt
cat san_domain_com.key >> ceph.crt

ceph的配置

1
2
3
4
[client.radosgw1]
host = lab103
rgw frontends = civetweb port=192.168.19.103:7481+192.168.19.103:443s ssl_certificate=/ceph.crt
rgw_content_length_compat = true

客户端导入证书san_domain_com.crt
注意,导入的时候要添加到选择受信任的颁发机构里面




安装以后,这个就是再访问https就是正常的了


改成https的之后进行访问,这样可以不用关闭证书验证了,证书是可以认证的了