iphone提示服务器证书无效
方法一:检查系统时间是否正确,修改系统时间
1、单击开始–控制面板,打开控制面板。
2、在控制面板中,找到始终语言和区域,点击设置时间和日期。
3、选择internet时间。勾选设置与internet时间服务器同步,然后确定即可。
方法二:重新安装服务器证书
服务器证书是指SSL服务器证书,无效说明该网站部署的SSL证书不可信,不是由合法的CA机构颁发,浏览器不信任,这时需要重新安装证书。
方法三:取消代理服务器设置或者重装系统
有时服务器证书无效,我们打开浏览器–工具–代理服务器–选中(不使用代理服务器);如果取消代理服务器设置还是不行,可以尝试重装系统。
服务器证书简称SSL证书,证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道确保数据在传送中不被随意查看、窃取、修改。经过身份验证的SSL证书包含企业身份信息,网民可以查看该证书判断网站身份。如果你的客户来自国外,如果由于客户不信任你的SSL证书,造成对网站的不信任,最终白白流失交易量就得不偿失了。所以最好选择大品牌的、知名度较高的SSL证书产品,如VeriSign。SSL证书签发一般由当地服务机构负责签发证书,在中国境内, VeriSign证书超过95%的证书由天威诚信代为签发。据统计全球,仅VeriSign SSL证书签发量就超过400万张。
一直在用Nginx做反向代理,但是其SSL的配置只用过普通的服务端单向证书。在Google,百度狂搜一通之后,一无所获,依旧是那老三样,只有单向认证的示例。浏览器端双向认证的配置好像从没人写过。
因为要来回的设置所有直接使用域名操作比如:
chaodiquancom 解析到 IP上面(IP要用你自己的,如果使用CDN另算)
这个是主要在最后的实际应用的测试的使用会用到
因为是自己实际应用,只好从OpenSSL的客户端证书开始学起,一点一点啃,大段大段的E文让我这半瓶子醋看的头晕眼晕。
的提示下终于把这个证书搞定,来秀一个。
这需要一下几个步骤:
1) 安装openssl用来做证书认证
2) 创建一个CA根证书
3) 创建一个自签名的服务器证书
4) 设置Nginx
5) 创建客户端证书
6) 安装客户端证书到浏览器
7) Profit
1)
这一步我是在ubuntu下直接apt-get装的openssl, 配置文件安装在/etc/ssl/opensslcnf
修改opensslcnf的以下几段
[ ca ]
default_ca = foo
Openssl将会寻找名称为foo的配置段
[ foo ]
dir = /etc/ssl/private
database = $dir/indextxt
serial = $dir/serial
private_key = $dir/cakey
certificate = $dir/cacrt
default_days = 3650
default_md = md5
new_certs_dir = $dir
policy = policy_match
policy_match 我保持默认值没有改
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = match
commonName = supplied
emailAddress = optional
默认签发有效期为10年,你可以自己设置一个合适的值
2)
创建一个新的CA根证书
下面的几个脚本我都放在/etc/ssl目录下
new_cash:
#!/bin/sh
# Generate the key genrsa意思是生成一个私钥
openssl genrsa -out private/cakey
# Generate a certificate request req表示生成证书,还能生成ca证书,-new表示产生一个新csr,需要输入一些信息,-key表示私钥,
openssl req -new -key private/cakey -out private/cacsr
#
Self signing key is bad this could work with a third party signed
key registeryfly has them on for $16 but I'm too cheap lazy to get
one on a lark
# I'm also not 100% sure if any old certificate will
work or if you have to buy a special one that you can sign with I could
investigate further but since this
# service will never see the light of an unencrypted Internet see the cheap and lazy remark
# So self sign our root key
x509是一个证书生成工具,显示证书内容,转换格式,给CSR签名等
-signkey用来处理CSR和给证书签名,就像CA。使用时得同时提供私钥,把输入文件变成自签名的证书,如果输入CSR文件,则生成自签名文件
-days证书有效时间
-in输入文件 -out输出文件
openssl x509 -req -days 3650 -in private/cacsr -signkey private/cakey -out private/cacrt
#
Setup the first serial number for our keys can be any 4 digit hex
string not sure if there are broader bounds but everything I've seen
uses 4 digits
echo FACE > private/serial
# Create the CA's key database
touch private/indextxt
# Create a Certificate Revocation list for removing 'user certificates'
gencrl在index文件中生成一个CRL相关的信息
-crldays是crl过期的时间
openssl ca -gencrl -out /etc/ssl/private/cacrl -crldays 7
执行 sh new_cash 生成新的CA证书
3)
生成服务器证书的脚本
new_serversh:
#
Create us a key Don't bother putting a password on it since you will
need it to start apache If you have a better work around I'd love to
hear it
openssl genrsa -out private/serverkey
# Take our key and create a Certificate Signing Request for it
openssl req -new -key private/serverkey -out private/servercsr
# Sign this bastard key with our bastard CA key
-cert CA本身的证书名
-keyfile CA本身的私钥
这句就是相当于CA用他的证书和私钥,根据服务器的证书,来给出一个CA认证的证书
openssl ca -in private/servercsr -cert private/cacrt -keyfile private/cakey -out private/servercrt
执行 sh new_serversh 生成新服务器的证书
4)
最要命的一步,尝试多次后终于搞明白。
配置 nginx 的ssl支持
我的配置如下:
# HTTPS server
#
server {
listen 443;
server_name localhost;
# 打开ssl
ssl on;
# 上一步生成的服务器证书
ssl_certificate /etc/ssl/private/servercrt;
# 服务器证书公钥
ssl_certificate_key /etc/ssl/private/serverkey;
# 客户端证书签名 也就是第二步生成的CA签名证书
ssl_client_certificate /etc/ssl/private/cacrt;
# ssl session 超时
ssl_session_timeout 5m;
# 打开SSL客户端校验 (双向证书检测)
ssl_verify_client on;
#ssl_protocols SSLv2 SSLv3 TLSv1;
#ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
root /var/www/nginx-default;
index indexhtml indexhtm;
}
启动你的nginx ,等待客户连接
5)
现在来生成客户端证书
new_usersh:
#!/bin/sh
# The base of where our SSL stuff lives
base="/etc/ssl/private"
# Were we would like to store keys in this case we take the username given to us and store everything there
mkdir -p $base/users/$1/
# Let's create us a key for this user yeah not sure why people want to use DES3 but at least let's make us a nice big key
生成用户私钥
openssl genrsa -des3 -out $base/users/$1/$1key 1024
# Create a Certificate Signing Request for said key
根据用户私钥生成他的证书
openssl req -new -key $base/users/$1/$1key -out $base/users/$1/$1csr
# Sign the key with our CA's key and cert and create the user's certificate out of it
模拟CA来给出CA认证过的证书
openssl ca -in $base/users/$1/$1csr -cert $base/cacrt -keyfile $base/cakey -out $base/users/$1/$1crt
# This is the tricky bit convert the certificate into a form that most browsers will understand PKCS12 to be specific
#
The export password is the password used for the browser to extract the
bits it needs and insert the key into the user's keychain
# Take the same precaution with the export password that would take with any other password based authentication scheme
pkcs12 处理pkcs12文件
根据CA认证过的证书和用户的私钥来生成p12验证证书,可用服务器导入。
openssl pkcs12 -export -clcerts -in $base/users/$1/$1crt -inkey $base/users/$1/$1key -out $base/users/$1/$1p12
执行 sh new_usersh yourname 来生成一个 yourname 的client证书
按照提示一步一步来,这里要注意的是客户证书的几个项目要和根证书匹配
也就是第一步时配置的:
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = match
不一致的话无法生成最后的客户证书
6)
发送上一步生成的 yournamep12 到客户端。
IE下双击安装就可以导入。
FireFox安装 :
Go into preferences
Advanced
View Certificates
Import
Enter master password for FireFox (if you don't have one set one here otherwise stolen laptop = easy access)
Enter in the export password given to you by the dude who created your cert
Hit OK like a mad man
打开第一步进行设置的域名解析会弹出对话框来要求你选择使用哪个证书,选择刚才安装的证书。选择接受服务器证书。现在你可以正常访问服务器拉。如果没弄对的话就会出现400 Bad request certification的错误
7)没啥拉,有问题多试几次,其实都是很简单的事。就是中文的资料太少了。
希望可以帮助到你哈
0条评论