生成CA服务端证书

mac下面

openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

然后输入CN,省,市,组织名称,组织下属部门,通用名字,email等信息
生成一个证书cert.pem 和对应的私钥 key.pem 有效期 365 天。

Installing snapd

certbot certonly –webroot -w /var/www/example -d example.com -d www.example.com

这个命令会为 example.com 和 www.example.com 这两个域名生成一个证书,
使用 –webroot 模式会在 /var/www/example 中创建 .well-known 文件夹,
这个文件夹里面包含了一些验证文件,certbot 会通过访问 example.com/.well-known/acme-challenge
来验证你的域名是否绑定的这个服务器。这个命令在大多数情况下都可以满足需求,

但是有些时候我们的一些服务并没有根目录,例如一些微服务,这时候使用 –webroot 就走不通了。
certbot 还有另外一种模式 –standalone , 这种模式不需要指定网站根目录,他会自动启用服务器的443端口,
来验证域名的归属。我们有其他服务(例如nginx)占用了443端口,就必须先停止这些服务,在证书生成完毕后,再启用。

certbot certonly –standalone -d example.com -d www.example.com
证书生成完毕后,我们可以在 /etc/letsencrypt/live/ 目录下看到对应域名的文件夹

IP SSL证书
不是所有IP地址都能申请到SSL证书,要申请IP SSL证书,必须满足以下几个条件。

1,必须是公网IP,暂不支持内网IP申请可信的SSL证书。
2,申请者必须具有IP管理权限。
3,没有IP段通配符SSL证书,只能申请单个IP或者多个IP绑定在一起。
4,需要开通或者临时开通80或443端口,在验证IP管理权限的时候,会上传一个验证文本到根目录上,中间不允许添加其他端口号的。

浏览器是如何验证SSL证书的有效性的?
A、检查SSL证书中的域名是否与该网站的域名一致
浏览器会对域名和SSL证书的一致性进行检查,如果不一致,则浏览器会发出 “此网站出具的安全证书是为其他网站地址颁发的。
安全证书问题可能显示试图欺骗您或截获您向服务器发送的数据。建议关闭此网页,并且不要继续浏览该网站” 等类似这样的警告信息。

B、检查SSL证书是否由受信任的CA机构颁发
正规CA机构的根证书都会被植入到各大浏览器中,如果浏览器发现SSL证书不是由受信任的CA机构颁发的,则会有安全警告发出,
例如非正规CA机构颁发的自签名SSL证书就会出现这种情况。

C、检查SSL证书是否在有效期内
浏览器会检查SSL证书的有效期的,如果证书过期,则会发出 “此网站出具的安全证书已过期或还未生效”。
安全证书问题可能显示试图欺骗您或截获您向服务器发送的数据。

D、检查SSL证书的吊销列表是否可用
浏览器会检查SSL证书中的证书吊销列表,如果已经被吊销,浏览器则会显示警告信息:”此组织的证书已被吊销”。
安全证书问题可能显示试图欺骗您或截获您向服务器发送的数据。

网站安装了SSL证书,但是提示SSL证书无效是什么原因?
A、使用自签名SSL证书:
自签名证书是一种自己生成的SSL证书,其并没有通过合法第三方CA机构进行审核签发,所以任何人都是可以签发生成(钓鱼网站也不例外),
所以容易被仿冒或者伪造,以及受到中间人的攻击,其风险是非常大的,因此许多浏览器都是不信任自签名证书。
B、SSL证书兼容性较差:
并不是所有的CA机构签发的SSL证书都是支持全球通用所有浏览器都信任的。若用户选择的CA机构并不是通过国际WebTrust认证,
那么他签发的SSL证书在许多浏览器上都不被信任。所以网站申请SSL证书时,一定要选择通过国际WebTrust认证的CA机构,且能够兼容老旧系统的品牌。
C、SSL证书没有正确安装:
如果网站的SSL证书没有正确的安装,用户在进行访问的时候也会有一些风险提示,如提示该页面存在不安全因素。
这时只需要将这些http调用资源改为https调用即可。
D、浏览器对指定的SSL证书不信任:
有部分SSL证书品牌因为某些原因被浏览器列入”黑名单”,也是公开宣布将不再信任该CA机构签发的SSL证书。
所以用户若选择这类的SSL证书,浏览器就会提示证书无效。
E、网站SSL证书已经过期或者还没有生效:
出现这种原因主要是电脑系统的日期出现了错误,或者是安装的SSL证书已经过有效期。
F、SSL证书中包含的域名和网站不一致:
通常情况下每个SSL证书所对应的网站域名也都是唯一的,当网站部署的SSL证书中所包含的域名与访问的域名不一致,
系统就会发出SSL证书无效警告等。
解决方法:用户可以重新去申请一个SSL证书,或者原先申请的是多域名型证书可以直接将该域名增加到证书上即可。
G、网站页面中存在不安全信息,目前都提倡每一个页面使用HTTPS,则网站所有的内容都必须是HTTPS。
如果遇到图片、JS脚本,FLASH插件是通过HTTP方式去调用的,就会发生这种错误。解决方法:将调用的元素http改成HTTPS即可。

创建 ca.cnf 文件

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = CH
ST = ShangHai
L = ShangHai
O = LanBe
OU = IT Department
CN = LanBe.com

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

[alt_names]

# 改成自己的域名
# DNS.1 = 192.168.0.10

# 改成自己的ip
IP.1 = 192.168.0.10

针对 ip 地址生成证书

openssl genrsa -out ca.key 2048
openssl req -new -out ca.csr -key ca.key -config ca.cnf
openssl req -text -noout -in ca.csr
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt -extensions v3_req -extfile ca.cnf
生成CA证书
创建私钥
openssl genrsa -out ca-key.pem 1024
创建证书请求
openssl req -new -out ca-req.csr -key ca-key.pem
自签署证书
openssl x509 -req -in ca-req.csr -out ca-cert.pem -signkey ca-key.pem -days 3650
将证书导出成浏览器支持的.p12格式
openssl pkcs12 -export -clcerts -in ca-cert.pem -inkey ca-key.pem -out ca.p12
输入除了CN和城市是shanghai外都是debug,

生成server证书

创建私钥
openssl genrsa -out server-key.pem 1024
创建证书请求
openssl req -new -out server-req.csr -key server-key.pem
自签署证书
openssl x509 -req -in server-req.csr -out server-cert.pem -signkey server-key.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -days 3650
将证书导出成浏览器支持的.p12格式
openssl pkcs12 -export -clcerts -in server-cert.pem -inkey server-key.pem -out server.p12

生成client证书

创建私钥
openssl genrsa -out client-key.pem 1024
创建证书请求
openssl req -new -out client-req.csr -key client-key.pem
自签署证书
openssl x509 -req -in client-req.csr -out client-cert.pem -signkey client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650
将证书导出成浏览器支持的.p12格式
openssl pkcs12 -export -clcerts -in client-cert.pem -inkey client-key.pem -out client.p12