OpenSSL自签发CA证书chrome浏览器安全访问
### 一:
安装相关包
```
yum install openssl openssl-devel -y
```
新建一个存放ssl证书的文件夹
```
mkdir -p /opt/openssl
```
```
vim http.ext
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName
[ SubjectAlternativeName ]
IP.1=127.0.0.1
IP.2=192.168.0.135 # 内网访问的IP地址
```
```
openssl req -new -newkey rsa:2048 -sha256 -nodes -out 192.168.0.135.csr -keyout 192.168.0.135.key -subj "/C=CN/ST=SICHUAN/L=SICHUAN/O=Super Inc./OU=Web Security/CN=192.168.0.135"
说明:双引号中的内容依次是国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。
```
```
openssl x509 -req -days 365 -in 192.168.0.135.csr -signkey 192.168.0.135.key -out 192.168.0.135.crt -extfile http.ext
```

配置nginx

然后再次将 192.168.0.135.crt 下载到 window 导入 chrome 。

注意:这里需要重新载入下 nginx,清空下 chrome 的缓存,再次启动。

完成!
火狐浏览器也需要修改配置,不然也会报错

火狐浏览器处理
Firefox默认情况不,还是不信任自签名证书
打开火狐浏览器输入about:config进行设置界面

第二步:
输入security.enterprise_roots.enabled修改为true

第三步:

完成!
重启浏览器即可
### 二:
可以通过写配置文件来生成ssl证书,这样简单方便。
```
vim req.cnf
# 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
distinguished_name = req_distinguished_name
# 生成自签名证书时要使用的证书扩展项字段名,该扩展字段定义了要加入到证书中的一系列扩展项。
x509_extensions = v3_req
# 如果设为no,那么 req 指令将直接从配置文件中读取证书字段的信息,而不提示用户输入。
prompt = no
[req_distinguished_name]
#国家代码,一般都是CN(大写)
C = CN
#省份
ST = Beijing
#城市
L = Beijing
#企业/单位名称
O = phpkoo
#企业部门
OU = phpkoo
#证书的主域名
CN = phpkoo.com
##### 要加入到证书请求中的一系列扩展项 #####
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[ alt_names ]
DNS.1=第一个域名
DNS.2=第二个域名
DNS.N=第N个域名
IP.1=第一个IP
IP.2=第二个IP
IP.N=第N个IP
```
执行如下命令即可生成证书
```
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./ssl/private.key -out ./ssl/ssl.crt -config ./req.cnf -sha256
```
openssl 命令参数说明:
```
req 大致有3个功能:生成证书请求文件、验证证书请求文件和创建根CA。
-x509 说明生成自签名证书。
-nodes openssl req在自动创建私钥时,将总是加密该私钥文件,并提示输入加密的密码。可以使用”-nodes”选项禁止加密私钥文件。
-days 指定所颁发的证书有效期。
-key 指定输入的密钥,如果不指定此选项会根据 -newkey 选项的参数生成密钥对。
-newkey 指定生成一个新的密钥对,只有在没有 -key 选项的时候才生效,参数形式为rsa:numbits或者dsa:file,例如:rsa:2048 rsa表示创建rsa私钥,2048表示私钥的长度。
-keyout 指定私钥保存位置。
-out 新的证书请求文件位置。
-config 指定req的配置文件,指定后将忽略所有的其他配置文件。如果不指定则默认使用/etc/pki/tls/openssl.cnf中req段落的值。
```