自签名免费(SSL)私有证书

(一)生成加密证书

1,生成加密自签名(SSL)证书

mkdir /data/ssls/www.haha.com
openssl req -new -x509 -newkey rsa:2048 -keyout /data/ssls/www.haha.com/server.key -out /data/ssls/www.haha.com/server.crt

在这里插入图片描述

注意:执行后需要输入密码,然后依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。

(二)生成不加密证书

1,使用openssl工具生成一个RSA私钥

openssl genrsa -des3 -out /data/ssls/www.haha.com/server.key 2048

在这里插入图片描述

注意:生成rsa私钥,des3算法,2048位强度,server.key是秘钥文件名,生成私钥,会要求你输入这个key文件的密码需要提供一个至少4位的密码,由于生成时候必须输入密码。你可以输入后,后面再删掉(因为以后要给nginx使用。每次reload nginx配置时候都要你验证这个PAM密码的)。

2,删除密码,重命名文件,导出key内容

mv /data/ssls/www.haha.com/server.key /data/ssls/www.haha.com/server.key.org(或cp /data/server.key /data/server.key.org)
openssl rsa -in /data/ssls/www.haha.com/server.key.org -out /data/ssls/www.haha.com/server.key

注意:导出key内容时候需要输入设置的密码。

3,生成CSR(证书签名请求)

使用生成的私钥(key文件)生成证书请求csr文件

openssl req -new -key /data/ssls/www.haha.com/server.key -out /data/ssls/www.haha.com/server.csr

在这里插入图片描述

注意:依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。

4,生成自签名crt证书

根据key和csr这2个文件生成crt证书文件

openssl x509 -req -days 3650 -in /data/ssls/www.haha.com/server.csr -signkey /data/ssls/www.haha.com/server.key -out /data/ssls/www.haha.com/server.crt

在这里插入图片描述

(三)添加证书到受信任的存储路径

1,下载证书到本地

在这里插入图片描述

2,win + r 打开mmc进入控制台1

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:导入成功后记得在本机hosts文件中添加domain ip映射后浏览器访问。

EDN:内容参考

Liunx环境下生成自签名免费(SSL)私有证书

(四)解决不安全告警的问题

1,背景描述:

遇到需要从http跨协议访问https的情况,此时就需要对要访问的https网址生成自签名证书,但是在谷歌浏览器中会报不安全的告警,必须手动操作下才能最终访问到https网址,很是麻烦

2,解决方法:

1.使用指定-subj “/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization”,生成根证书私钥和根证书 -keyout CA-private.key -out CA-certificate.crt
“/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization” (英文引号)

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization" -keyout CA-private.key -out CA-certificate.crt -reqexts v3_req -extensions v3_ca

2.生成自签名证书私钥 -out private.key

openssl genrsa -out private.key 2048

3.根据自签名证书私钥生成自签名证书申请文件 -out private.csr
“/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization/CN=ip/domain”

openssl req -new -key private.key -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization/CN=ip/domain" -sha256 -out private.csr

4.定义自签名证书扩展文件(解决chrome安全告警)。在默认情况下生成的证书一旦选择信任,在 Edge, Firefox 等浏览器都显示为安全,但是Chrome仍然会标记为不安全并警告拦截,
这是因为 Chrome 需要证书支持扩展 Subject Alternative Name, 因此生成时需要特别指定 SAN 扩展并添加相关参数,将下述内容放到一个文件中,命名为private.ext

[ req ]
default_bits        = 1024
distinguished_name  = req_distinguished_name
req_extensions      = san
extensions          = san
[ req_distinguished_name ]
countryName         = CN
stateOrProvinceName = Definesys
localityName        = Definesys
organizationName    = Definesys
[SAN]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = IP:xxx.xxx.xxx.xxx

扩展多个域名和IP,编辑配置文件(跟本章内容无关,仅供参考)
证书转换参考1
证书转换参考2

# 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
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

5.根据根证书私钥及根证书-CA CA-certificate.crt -CAkey CA-private.key、自签名证书申请文件 -in private.csr、自签名证书扩展文件 -extfile private.ext,生成自签名证书 -out private.crt

openssl x509 -req -days 3650 -in private.csr -CA CA-certificate.crt -CAkey CA-private.key -CAcreateserial -sha256 -out private.crt -extfile private.ext -extensions SAN

在这里插入图片描述

6,将根证书CA-certificate.crt下载在本地
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
选择确定
在这里插入图片描述
访问
在这里插入图片描述

3,解决linux curl提示证书安全问题。

方法:手动补齐证书链或将CA颁发机构加入信任列表解决该问题

cd /etc/pki/ca-trust/source/anchors/
cp /usr/local/openresty/nginx/ssl/CA-certificate.crt ./
update-ca-trust extract

EDN:内容参考

这里基本是搬运了。参考文章地址:
解决https网站通过nginx+openssl自签名证书访问,在谷歌浏览器报不安全告警的问题

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android Studio 中访问没有 SSL 证书的网页,可以通过以下两种方法: 1. 忽略证书验证 在请求中忽略证书验证是一种不安全的做法,不建议在生产环境中使用。但在测试和开发环境中,可以通过以下方式实现: ```java try { // 创建信任所有证书SSLContext 对象 SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }}, new SecureRandom()); // 创建忽略证书验证的 OkHttpClient 对象 OkHttpClient client = new OkHttpClient.Builder() .sslSocketFactory(sslContext.getSocketFactory()) .hostnameVerifier((hostname, session) -> true) .build(); // 构建请求 Request request = new Request.Builder() .url("https://example.com") .build(); // 发送请求 Response response = client.newCall(request).execute(); String responseBody = response.body().string(); } catch (Exception e) { e.printStackTrace(); } ``` 2. 安装自签名证书 如果你有自己的证书,可以将其安装到 Android 设备中,使设备信任该证书。步骤如下: 1. 将证书文件添加到项目的 assets 目录中。 2. 在应用启动时,将证书文件复制到设备的私有目录中,例如 /data/data/com.example.app/files/。 3. 创建信任该证书SSLContext 对象,并使用该 SSLContext 创建 OkHttpClient 对象。 4. 构建请求并发送请求。 以下是示例代码: ```java try { // 将证书文件从 assets 目录拷贝到应用私有目录中 File certFile = new File(getFilesDir(), "example.crt"); if (!certFile.exists()) { InputStream inputStream = getAssets().open("example.crt"); FileOutputStream outputStream = new FileOutputStream(certFile); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, length); } outputStream.flush(); outputStream.close(); inputStream.close(); } // 加载证书文件 CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); InputStream inputStream = new FileInputStream(certFile); X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(inputStream); // 创建信任该证书SSLContext 对象 KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(null, null); keyStore.setCertificateEntry("example", certificate); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustManagerFactory.getTrustManagers(), null); // 创建 OkHttpClient 对象 OkHttpClient client = new OkHttpClient.Builder() .sslSocketFactory(sslContext.getSocketFactory()) .build(); // 构建请求 Request request = new Request.Builder() .url("https://example.com") .build(); // 发送请求 Response response = client.newCall(request).execute(); String responseBody = response.body().string(); } catch (Exception e) { e.printStackTrace(); } ``` 注意:以上代码只适用于自签名证书,如果是公开的证书,应该使用系统默认的 SSLContext 对象和 OkHttpClient 对象进行请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值