首页 > 其他分享 >https代理服务器

https代理服务器

时间:2022-12-13 13:58:14浏览次数:74  
标签:证书 代理服务器 ssl https new v3CertGen com myhost

0 在

netty(二十五)http代理服务器(四)困难

 中,始终困惑于chrome(mac)不信任我们的自签名证书

然而charles是做到了,我们从头来过,先不搞代理服务器的,先搞个简单服务器,排除是否是mac chrome就是无法信任自签名证书的谣言

 

https://www.jianshu.com/p/7cb5c2cffaaa

http://www.manongjc.com/detail/54-fqaijnnojboynez.html

跟着走

输出myhost.com.pem 和myhost.com-key.pem

python服务器启动

brew install mkcert
mkcert -install
sudo vi /etc/hosts
mkcert myhost.com
import BaseHTTPServer, SimpleHTTPServer
import ssl

httpd = BaseHTTPServer.HTTPServer(('0.0.0.0', 443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='./myhost.com.pem', keyfile='./myhost.com-key.pem', server_side=True, ssl_version=ssl.PROTOCOL_TLSv1_2)
httpd.serve_forever()
访问https://myhost.com

 

safari and chrome都信任了

至此,证明了mac chrome可以信任自签名证书

 

2 再进一步

https://www.jianshu.com/p/7e5566f002bd

openssl pkcs12 -export -in myproxy.com.pem -inkey myproxy.com-key.pem -out proxy.p12
keytool -importkeystore -deststorepass 'hhh123' -destkeypass 'hhh123' -destkeystore proxy.jks -srckeystore proxy.p12 -srcstoretype PKCS12 -srcstorepass 'hhh123'

 

代理服务器失败,看来还有没有注意到的点

看了第3点的文章,认为我们制作的CA根只是签发了myhost.com的证书,而被代理的网站千千万,需要一一签发,可以先手动签发个baidu的试试

 

 

3 https://segmentfault.com/a/1190000011811150?sort=votes

自己制作的证书并不是浏览器中CA根证书签发的,所以我们需要把自己制作的CA根证书加入浏览器受信任的根证书颁发机构。

代理服务器返回的ssl证书中是由刚刚的CA证书签发的,这样就形成了一个受信任链,

java动态签发ssl证书

JAVA自带的SSL以及X509库只能使用SSL证书,不能生成SSL证书。因此我们使用“Bouncy Castle”这个算法库来实现SSL证书的生成。

//maven
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.49</version>
</dependency>
//注册bouncycastle
Security.addProvider(new BouncyCastleProvider());
//生成ssl证书公钥和私钥
KeyPairGenerator caKeyPairGen = KeyPairGenerator.getInstance("RSA", "BC");
caKeyPairGen.initialize(2048, new SecureRandom());
PrivateKey serverPriKey = keyPair.getPrivate();
PublicKey  serverPubKey = keyPair.getPublic();
//通过CA私钥动态签发ssl证书
public static X509Certificate genCert(String issuer, PublicKey serverPubKey, PrivateKey caPriKey, String host) throws Exception {
        X509V3CertificateGenerator v3CertGen = new X509V3CertificateGenerator();
        String issuer = "C=CN, ST=GD, L=SZ, O=lee, OU=study, CN=ProxyeeRoot";
        String subject = "C=CN, ST=GD, L=SZ, O=lee, OU=study, CN=" + host;
        v3CertGen.reset();
        v3CertGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
        v3CertGen.setIssuerDN(new X509Principal(issuer));
        v3CertGen.setNotBefore(new Date(System.currentTimeMillis() - 10 * ONE_DAY));
        v3CertGen.setNotAfter(new Date(System.currentTimeMillis() + 3650 * ONE_DAY));
        v3CertGen.setSubjectDN(new X509Principal(subject));
        v3CertGen.setPublicKey(serverPubKey);
        //SHA256 Chrome需要此哈希算法否则会出现不安全提示
        v3CertGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
        //SAN扩展 Chrome需要此扩展否则会出现不安全提示
        GeneralNames subjectAltName = new GeneralNames(new GeneralName(GeneralName.dNSName, host));
        v3CertGen.addExtension(X509Extensions.SubjectAlternativeName, false, subjectAltName);
        X509Certificate cert = v3CertGen.generateX509Certificate(caPriKey);
        return cert;
    }

至此我们最重要的功能已经实现了,接着就是拿着ssl证书返回给客户端即可捕获明文了。

 

4 接下去要做一些实践

证书链-spring boot-》证明mkcert证书链可用于java

自定义证书链-》看看是否 显示ca

单证书-spring boot -》证明单证书也可用于java

 

mkcerrt 那个host给改了 -》 确定二级证书是否跟域名有关,可用python

试一下不用mkcert,自签名根证书的python

 

标签:证书,代理服务器,ssl,https,new,v3CertGen,com,myhost
From: https://www.cnblogs.com/silyvin/p/16978548.html

相关文章

  • HTTPS 证书到期 阿里云重新申请,全程10分钟搞定,给阿里一个赞
    过去的网站,今天打开的时候报不是安全认证网站。HTTPS到期了。 阿里云证书服务:https://www.aliyun.com/product/cas?utm_content=se_1261823点立即购买,之后去控制台完成4步......
  • fiddler-安装https证书后访问https请求仍然报错443解决方案。
    一.问题描述:在安装https证书后仍然报443,类似如下:   二。解决方案:步骤:清除本地fiddler证书  在fiddler目录下安装官网"CertMakerforiOSandAn......
  • 网站补充支持HTTPS(免费方案),并让HTTPS支持伪静态重写
    一个客户的网站,要申请小程序,结果后台只认HTTPS开头的网站。看来都是苹果的标准要普遍化啊。1:申请又拍云,亲测可用1.1控制台-CDN下绑定域名;域名真实性核验的时候,还需要去解析......
  • nginx https作网关配置webapi路由规则
    为何有这篇文章?因为我有多个小程序,分别调用不同的api站点,服务器只能安装一个https单域名证书。 1、原webapi接口部署完毕,接口地址比如​​http://www.zyiz.net/api/getarti......
  • 【Https(一)】理论
    因为网络是不安全的,直接使用Http协议,会有如下问题:1.明文传输;如果信息被第三方截获,信息会被泄露;2.信息完整性;如果信息被第三方截获,信息可能被篡改;3.身份验证;交互的双方无法确......
  • 一图了解 HTTPS 的 SSL 协议
       参考链接:https://www.ruanyifeng.com/blog/2014/02/ssl_tls.htmlhttps://blog.csdn.net/qq_48508278/article/details/122588669......
  • https页面内http链接跳转时的referer问题
    no-referrer:即不添加referer信息;origin:即referer信息只有schema://domain:port,即协议://域名:端口,没有路径信息;no-referrer-when-downgrade:当协议降级时,不发送referer......
  • Fiddler error–HTTPS handshake failed
    情景描述当我在电脑上通过修改host文件,试图将某个软件的请求代理到我自己搭建服务上时,服务一直收不到请求。于是打开Fiddler观察发生了什么,等再次访问时,得到了如下......
  • 对接苹果 https://appleid.apple.com/auth/token
    c# 对接苹果 https://appleid.apple.com/auth/tokenusingMicrosoft.IdentityModel.Tokens;usingMobaFlyx.Utils;usingSystem;usingSystem.Collections.Generic......
  • mac下golang测试https
    1.自定义域名sudovi/etc/hosts增加自定义域名zhengzhihua.mac  保存退出   测试域名  2.生成证书脚本......