From d05bf09e420266da183b6159fd2944b71e42a0dc Mon Sep 17 00:00:00 2001 From: brian <brian@mails.bcrl.ch> Date: Mon, 24 Jun 2024 16:32:26 +0200 Subject: [PATCH] yippie --- bob.p12 | Bin 0 -> 3043 bytes bob@example.com.cert.pem | 29 ++++ bob@example.com.key.pem | 28 ++++ ca/.env | 2 + ca/.gitignore | 1 + ca/README.md | 19 +++ ca/ca/certs/ca.cert.pem | 34 ++++ ca/ca/index.txt | 2 + ca/ca/index.txt.attr | 1 + ca/ca/index.txt.attr.old | 1 + ca/ca/index.txt.old | 1 + ca/ca/intermediate/certs/bibi.ch.cert.pem | 34 ++++ ca/ca/intermediate/certs/ca-chain.cert.pem | 67 ++++++++ .../intermediate/certs/intermediate.cert.pem | 33 ++++ ca/ca/intermediate/csr/andrewtate.ch.csr.pem | 18 +++ ca/ca/intermediate/csr/bibi.ch.csr.pem | 17 ++ ca/ca/intermediate/csr/intermediate.csr.pem | 28 ++++ ca/ca/intermediate/index.txt | 2 + ca/ca/intermediate/index.txt.attr | 1 + ca/ca/intermediate/index.txt.attr.old | 1 + ca/ca/intermediate/index.txt.old | 1 + ca/ca/intermediate/newcerts/1000.pem | 34 ++++ ca/ca/intermediate/newcerts/1001.pem | 34 ++++ ca/ca/intermediate/openssl.cnf | 141 +++++++++++++++++ .../private/andrewtate.ch.key.pem | 30 ++++ .../intermediate/private/intermediate.key.pem | 54 +++++++ ca/ca/intermediate/serial | 1 + ca/ca/intermediate/serial.old | 1 + ca/ca/newcerts/1000.pem | 33 ++++ ca/ca/newcerts/1001.pem | 33 ++++ ca/ca/openssl.cnf | 132 ++++++++++++++++ ca/ca/private/ca.key.pem | 54 +++++++ ca/ca/serial | 1 + ca/ca/serial.old | 1 + ca/crl/ca.crl.pem | 19 +++ ca/crlnumber | 1 + ca/crlnumber.old | 1 + ca/full_chain.pem | 60 +++++++ ca/gen_cert.py | 149 ++++++++++++++++++ ca/index.txt | 1 + ca/index.txt.old | 1 + .../certs/bob@example.com.cert.pem | 29 ++++ ca/intermediate/crl/intermediate.crl.pem | 18 +++ ca/intermediate/crlnumber | 1 + ca/intermediate/crlnumber.old | 1 + ca/intermediate/index.txt | 1 + ca/intermediate/index.txt.old | 2 + ca/intermediate/newcerts/1002.pem | 29 ++++ ca/intermediate/openssl.cnf | 1 - ca/intermediate/serial | 2 +- ca/intermediate/serial.old | 2 +- ca/newcompany/certs/out.pem | 27 ++++ ca/newcompany/company.csr | 17 ++ ca/newcompany/privatekey.key | 30 ++++ ca/openssl.cnf | 1 + ca/requirements.txt | 3 + mutual_tls.png | Bin 0 -> 78351 bytes 57 files changed, 1262 insertions(+), 3 deletions(-) create mode 100644 bob.p12 create mode 100644 bob@example.com.cert.pem create mode 100644 bob@example.com.key.pem create mode 100644 ca/.env create mode 100644 ca/.gitignore create mode 100644 ca/README.md create mode 100644 ca/ca/certs/ca.cert.pem create mode 100644 ca/ca/index.txt create mode 100644 ca/ca/index.txt.attr create mode 100644 ca/ca/index.txt.attr.old create mode 100644 ca/ca/index.txt.old create mode 100644 ca/ca/intermediate/certs/bibi.ch.cert.pem create mode 100644 ca/ca/intermediate/certs/ca-chain.cert.pem create mode 100644 ca/ca/intermediate/certs/intermediate.cert.pem create mode 100644 ca/ca/intermediate/csr/andrewtate.ch.csr.pem create mode 100644 ca/ca/intermediate/csr/bibi.ch.csr.pem create mode 100644 ca/ca/intermediate/csr/intermediate.csr.pem create mode 100644 ca/ca/intermediate/index.txt create mode 100644 ca/ca/intermediate/index.txt.attr create mode 100644 ca/ca/intermediate/index.txt.attr.old create mode 100644 ca/ca/intermediate/index.txt.old create mode 100644 ca/ca/intermediate/newcerts/1000.pem create mode 100644 ca/ca/intermediate/newcerts/1001.pem create mode 100644 ca/ca/intermediate/openssl.cnf create mode 100644 ca/ca/intermediate/private/andrewtate.ch.key.pem create mode 100644 ca/ca/intermediate/private/intermediate.key.pem create mode 100644 ca/ca/intermediate/serial create mode 100644 ca/ca/intermediate/serial.old create mode 100644 ca/ca/newcerts/1000.pem create mode 100644 ca/ca/newcerts/1001.pem create mode 100644 ca/ca/openssl.cnf create mode 100644 ca/ca/private/ca.key.pem create mode 100644 ca/ca/serial create mode 100644 ca/ca/serial.old create mode 100644 ca/crl/ca.crl.pem create mode 100644 ca/crlnumber create mode 100644 ca/crlnumber.old create mode 100644 ca/full_chain.pem create mode 100644 ca/gen_cert.py create mode 100644 ca/intermediate/certs/bob@example.com.cert.pem create mode 100644 ca/intermediate/crl/intermediate.crl.pem create mode 100644 ca/intermediate/crlnumber create mode 100644 ca/intermediate/crlnumber.old create mode 100644 ca/intermediate/newcerts/1002.pem create mode 100644 ca/newcompany/certs/out.pem create mode 100644 ca/newcompany/company.csr create mode 100644 ca/newcompany/privatekey.key create mode 100644 ca/requirements.txt create mode 100644 mutual_tls.png diff --git a/bob.p12 b/bob.p12 new file mode 100644 index 0000000000000000000000000000000000000000..b0534fbb24f4ba278c7f5915b09529c309c70b2c GIT binary patch literal 3043 zcmXqL;=a$s$ZXKWJ(Z19tIebBJ1-+U<ANscHkKytCW9vKI)f(GR|qM#1x>8C4VqZ5 zGcht4G_hVl$S@kj!#S+H20;df2riF-3X8y=Pb;@eXA~^|FZ|9+hDXMkiHU>3fQO9( zVk;9TD}#Y78)rhB2V*KT3!@f`fYrVnt26(Pe<^wA^>!V9b7MmjYeL1;!)LT}1GzcO zcAdE?<P}+K<Tgn`d$;h}r0U=rQPa4UrxqU5EHF2op!;e{ywc@U*4EA%kIpP`a?3vw zC-&>QdFtiKPgi>tEbp!V)R>vc?CTg?wyQ{D-4q=rmMaOJdWHL|*g}I6`8#*;e0Bb? z;?Ntp1GaH@PDmV(xFMlaSTIjKca^2p^vat~yWekjGP^2J)tz|jwEmk~h57H*MU%{f znb;Tk-<`I>;NbrCiQiY3W*+mon6!3c{P8n+Piil&S|5D>ZP5EopQ61#`S*sLxwt0z zUIeR~OZE5p+>af1UCYvYVlQ*=+aIIVsf@iUMVH@q<TEiRC9F8vxOkpN>;(UsguoMb zMWWK|Z?5_D;_z`hfmv@B%4wXg*l8ss(_Z`_ak<a?2XaQzGW>66T0gk*>(TG~ojvTn zJG`=z9v@J?SJ$rn#WPNAVq?#ysY-#D`M0`WX$n~Rzb`AdH~nPgzr*Wf9$u_$jehXi zsPMD-eZdQ6u@7BNzL_BQdUczRq92=EZtvsYR}Op@+;-toWrbM4s~7)z8V_$#vMApC z_V`=PaQRJ3)HF>34Xlqbva-zc%R2wq*~GT8`}!4zh-rH36~4C5IXq$F1y<&Dlg(v= zgUVV%Ca}JI-+5ntg0$4#wYK*HEOm_ENcOz)-mWI}DxR-Nb<X_nH#^?GP`jSnTQB|X zp8A2aZBKG9ZE;*FEPwCj#3?)ii%Q>XRxGeMFK2dWb&T%Zea9xtx=wr^+}ppR?#QAW zTbk+_;!89+nfJaF*?xjiI{b9<rVCCHHd{sh2a88e$k1nytdW~FWB>Q~f1Bo+9QWV; zf5*w7ttlByQQsc4u9<gyyU%s+h>3Pi9(VIYx+fGH^yg37Z5t<JQ1|B6ty`Dox~BN= z3Hx~2Dn`RLsa50S-_K7f^tY}(bYdA_mSRtSz=4Qtw?CgN{^ajoajO3P%j;euC!2k~ zESWD`>^3QwukOH1_ly$V|A$yLWy2ayo_ZjaBiw#B@4}BV5gnN+AHE#*d9~zgZmsFJ z37j()?5w?>aqa*&!yKC*t{k566GTl9+fVyH@66#{Ghdvvvzz@{ba89SteW{(Oa4}r z?5(>kuvvJ?|K;zzUaM~9UjBne-Qd!eT-yn2r0g!rWyQI<+KOd1e3tj>e<%5Ui9r}g z><^Vq#&X7D2J7al?*DZ1pcSu{QGRf)p`LW2;~Z7ru$6mn&ptWt=H!)z3+rzkJ0l~0 zx^{k_mw@zxiEpO8ow7bBcA-bhN{^?f-)L?Lw3|@!p#Lme*8J3e9gfx_3ofNtd%rrx zwEDKitw{mj3vZn^exkngcjh}L&5L$-_i8u3oOZBRKPGZYb6$_&zwb7;$}L{~5_lgM z`uTsw7yqKCU!UI3Q!*1=!TN5o)P<X?C4CP_<=7e7_n)}eGB?Yp^ng@vXIbGwtA_nN zfq9c1Qkh$BxXH|&J>|OfOa6QF`>w5@YV-VmrK#AGU*&%yguQKeELQe}yu9-2FYn<m z{+Z^XTMg_#xUchM^|mbQlIPQ%5L@>AgKMv1NzUCVD&MUPb+q}?dl$aEzWmka@`TB| zgV#hfsL9KG;kl`|c-soK#1)H{S@q7V5K!GSb>fOCqBCN|W0%{$xmS=^$=EmV)H0T+ z9*$SMi)toCt4U63`!%C=e#N1Er&xafu6f@sZ?Glq_18P|3gr0M9OhQVoZ{W~Bu=G$ zPRbYV*#+$?9o$QNAI@4~|F&e8t!uPK6;pC*c|z854e<we!mn+cDQM&I?rE3d)zW#N z<96+Ks@}xDUZ>{9TRo-~XM5jvCEQb#pJ^TOtv*a;+1Ga4Ikvgp7G?#9MSEkm+g#V% zQFHB)`?`JIH~*XI=CmBGeRey-ck{U;N`bSLL&P(p=k4Q<{b<m{+5<1QK@|aOElU$? zr9l&GsX-HKAsaWOv}WYtVq{v-#A<2K#A-^Y;8)os%Ju)2(f+E-hbAQOPwXLB@ZVZ~ z{f?1We1rA*4L%-zdAcl3EEn=t#MnuTFsCow?%(_KThQTc?Pj4$GghvR{S|JsR+UY^ zE@e+lqetvPu{ZnPIP7l=ja}HD^YPw=n1<!s)wli<xqje^V_2%NZIZyE6+NFT_|$Lk zIh~%#css+WP3EBAjGGJpG2K%W+MRYZ?Kt}n3AIfsWkzfw3#I3Z`~MSiZ7w#H`Qdri zao^z(&Rn^$zq`$6tVm!re-#_yx}|z*hSa&(Nt_m$Hy4Un%3E#9>JC1A^x*lBb@#J7 zyY<9!D-Wu338wz<EbG(WGSlh9&W``GN1NYRYcM-Tv&;87r|k@T9=!bWbMs%X4z_Nq zofP`@+xsh(r@3xuo|f)<c|m(s>)pRLu1{x{TE6>f%(42%)U`HGI;27#2JP_X5SjeT zu2{fCcES7D(B<3K-;ewHE%*D&OEtY#e>YmGecoH%{(51{lM^1*4%1F;(!9BEhs{r$ z(?0Xdx}w&94m);H<%V&{ioNBHR{OoRgDr%PG`9TL)Sl$}aw-3PpWo9LpV)o7jnhQ@ zto`Ty>ZK>^SYGa9U9WqtCTVGeans$BTW7Yaf1lr)r}E-b)xxELyPq1~c(`!IdC}Cb z_tV@SYUG}`H@M>^&uCF~z$iVvi2wK7-?laKBCL{LtDToE2+1xLT>9KQzQbZcMBK3+ z7q^vt&-ZL)Jbgd@(#0E#<i9=esoQkz<3^5yPH7SM{U4k@B6F^Ku7dIwPjSsd=3!N$ z8dq=EJc<3$w?RMZVWmaHkFWI$8P>C&zZ>xLasB6ubB^(Ty29wkVjS}O`MLjFbS`Qn zbO+zJ+@<;L;?FNfc1~&SDqx*neu~{~8SA9x=l2A1eeNyayned~Lqdj?Bm3S&f8Nq( z+_O_37Qahr(EQjU)ueHE$9LuqhmHD;NsLi`hLcKq9gfX>e~{%z(-x~GB|0CL<tAJ$ zTFdvB`AyRjDF>TPAK7+lPVfA`Gt3}R+seT}afeThPvH6uf0+4i%r)JpeTwV6<Q!4w zS)0BKSf5ON;c;_&_$lN5w%lEhQ>NaDePQZnb}CBsHG5xV_-xMi9`^z)Oqz}z@0|GN z_L1`+&KOm`ZL^L3wA)1Y|D+!q&lg>EcHDYaIn>PU!wpx#rBM$W6dkKCT`1~!5`AyQ z1r=?H+kXUe{`-i!#BBEew3Btpfl1e;uU$SPwD-1!mYS$VI>QI%dpj3|$nx#^5#N7P z^^;GE%)}Xc4HvLoKX&GFkJyRCdacjB5zP}N8O78dxJI7u4CcBenSZ1D{+<JTlHbhA z4`tnvd?;yFnWf5f{jlk5&)1U2@`dhBvYh&S)uB)K*Q!61Y;W7XXzu!O?%L${zNvSV z7Obt?#HexetLfyeB5Mz=u+-(-@OOLHxwl*!J90u_x_4IdvT6%Uyl0zp*k9>G|H~%= zE$ijqH;4Sb9}#to=k>q6Hb2>~@3<b%bTjAB!asSo=>@iD=F}#-ZFf<yi%DGf`NtXF zte=n8E&Wnxx45RsE-bA5AxqBO|M>-d*<JIG%KpBU{$Qm}TCmP%%dg^FHa2k0VLeg( zE5P}NghI;)@#yP!p6RzKo?4V%HLcHOZ#3f{n-rrX7nJwAv3XmkdijQS=6Pj)Iu&Wy zc|q)=dH4aX%OB#cRPDaZm}<$P^=GxOdr;=m%9_|mX+m$5jfJYWPs!OhMbWpgiQ&|h zDW<cSH!Wv!+IM2djIGi!x1$VI4V2*pEvKlV7>kITL1^h?{U>LPxz1enx;I(Speeb? zz|p|afEV5@W@2PzU{MIJnz{E#;U>M3$p1Z|`Wfvt+}q<O+@2{I@NK&6z2E!JvvBx- OoL86Q_RRxS)B*tQEu#DY literal 0 HcmV?d00001 diff --git a/bob@example.com.cert.pem b/bob@example.com.cert.pem new file mode 100644 index 0000000..70e6f1b --- /dev/null +++ b/bob@example.com.cert.pem @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIFADCCAuigAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQ0gx +DTALBgNVBAgMBFZhdWQxGjAYBgNVBAoMEUhvcnNlIFRpbmRlciBTYXJsMQwwCgYD +VQQLDANJU0MxFjAUBgNVBAMMDWFuZHJld3RhdGUuY2gwHhcNMjQwNjI0MTM0MjQz +WhcNMjUwNzA0MTM0MjQzWjBgMQswCQYDVQQGEwJGUjEMMAoGA1UECAwDQWluMQ8w +DQYDVQQHDAZGZXJuZXkxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 +ZDEPMA0GA1UEAwwGYm9iLmNoMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAwU3uA3zfpFf0mLf/wsJwpQ5alNymgoO+FdTpKMqkousgLxglZlgq4V2TNqzw +AngPxKh9r4vaJK7TZeFf0GqOU4RNKKsnZEp+nJR45m/+txKplaNXxBn4pgpIU+dj +/bk4PIKZAcea0HdrmR0/g26mDN4YR6k421AJcFAAEWEDu1XYMczakf1La5BmPK6k +qJ7LVueEoRfraogmjJhRVukqdAtdy0oLSZADs4tucC6MYCmhRaUIQWsGdZm4JKZS +K8zFZ+7poCdjJOZa6Bdz2TKhLt8ww9Up5G1ytV6GPnmksGZaAMIyomQk2D8pu0bZ +Z6vw9aem8S/NIXdTDJVCbVLgrwIDAQABo4HFMIHCMAkGA1UdEwQCMAAwEQYJYIZI +AYb4QgEBBAQDAgWgMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBD +bGllbnQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFLxgCLGmSngsuDMhT1yMn5NhTDeM +MB8GA1UdIwQYMBaAFN6ATyzm7FYoUHlX5afUB9g9RLGTMA4GA1UdDwEB/wQEAwIF +4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcNAQELBQAD +ggIBADPfZDlqypv0i+A1VfPnekZhi/MCMcppPJNOmL4smapdPtlw6RzUxzNb2llx +JYOmYapgQZJFbC7j7bV4mOkC1sO/dhYTr52RHNz01U1+6Eaj+tbWbEKz63VQWuzT +tIGoisNIW3LfaaSrjnEHppDkEAYoeHScTlFh/aPSMemrsQhkhbHKZX2FN9EvxYO5 +QwahOIhxudBTd4knHlyPYblnCwlunv6VCPAB1/6nn0XUlRpY4MQVY3s8ud+yLG9V +PLlT8Pa7jSmnb55eRJBgs3IXezWgi0/FLjjFDuz+bzV1d7hj+ufDKkevvSkSZuM8 +WQ9G9dDlZk3RMtCH5vMaZbSINosXnQk/rTbkf8Xfs82NCoSvkIJK7l2jFdLp8pCB +AacCQOf/Z+8FopzlbYcvFol0hnhH+VXb7SBQO19slgTv9DFjNuhQWdbiVlwIjizK +t1h2TJ2FnjB2nEtBIpzcVVKSBkjjN7Kfxd/N0lKpuJFPIP/Qo3LaZMSUPUqWYgdn +Coym52m5QZ/OizF0s5jmiiMej8DAVLKi/IceewUbiOL7RZDIvCdgaJkZ0NHW33jH +7IqQzeoYLVa0yrZc+hTaW8zH9kjudsxyEFixaZjPMb7haOa6CRTtMgO3f+468yyJ +Xo90S3mgR2yuJAQoEWdCXg2CnFWnuDvx0wntsBqkTEHL/uJj +-----END CERTIFICATE----- diff --git a/bob@example.com.key.pem b/bob@example.com.key.pem new file mode 100644 index 0000000..048ccbe --- /dev/null +++ b/bob@example.com.key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBTe4DfN+kV/SY +t//CwnClDlqU3KaCg74V1OkoyqSi6yAvGCVmWCrhXZM2rPACeA/EqH2vi9okrtNl +4V/Qao5ThE0oqydkSn6clHjmb/63EqmVo1fEGfimCkhT52P9uTg8gpkBx5rQd2uZ +HT+DbqYM3hhHqTjbUAlwUAARYQO7VdgxzNqR/UtrkGY8rqSonstW54ShF+tqiCaM +mFFW6Sp0C13LSgtJkAOzi25wLoxgKaFFpQhBawZ1mbgkplIrzMVn7umgJ2Mk5lro +F3PZMqEu3zDD1SnkbXK1XoY+eaSwZloAwjKiZCTYPym7Rtlnq/D1p6bxL80hd1MM +lUJtUuCvAgMBAAECggEAEUjKk31C8gr7T/yD3gJM2DVkXBMuwFTPVlxnTMJx3i9v +/UYHchNIIkafty/XdiEOJ+N4+Y1jwAvx0xZH3vboKweVbqF/MDSJBa8w8EnrWKtO +hpbIbjx0Q0SAGyCBjFpXcPGshMA4U5OaB2LaHwJxzoy9VwsGjnWlomlE2Ej4cHOg +xSEUR/7snda3ms5qntP2/mfYjTyYzRI/j4m5gNQCEgBx4b4Ql0V+kyG+QeUI5KsZ +ijRK3XrA7TskEogr1NQoec//BWuJdOLobABzfKR6l6tetEAPEEaRkj2ynTnHGF/5 +JzmvYqMAo36BtC8cypZKSKmtwH0u5ujOsDgWb9MKYQKBgQDV5hTIRYK5hlfT6O1t +659g+aNCerX8g2ns9JmtXc3ugXjO/MPZ1WvuEzQImDqnhthJEdquDBtZ9O6Rq1K9 +vkYzWcVPiDyffd/RRXyfnE7TWy7ZjEDytKocAA6Xq759RHU4l43j4IkNayMRZK1C +xX7IwAT+UNRS/EPHrfPrdMn9uwKBgQDnWiRZ5ZbaCAYuqBFb54W2zHRbyj4Fi/F2 +gFkcyM+ePZpAbQT0lZnIAzuNhrpIB3NSunAjQt7b2+HJyVk+PD+RRS+uegLtkpCH +PIQiebPIZ0MFoNQzrVUrVhvSIw1xxMCo32HNQgN9MWJ27pdy6VZbzgOJQKTlbyF5 +2bQYl0//nQKBgQDEhbkwbBT4ScMl8os6g9KSMapbKQ1NbJwE1pLfYyEScihB3KBA +4sJgIYqcHuk9BDpxoBLP+FWk59HNSqAhrtEm2uLa+KviSa86weIHb4BI1i0MOb1u +gKkOQssldOj2hNBCZ5Q4+xJQns/AakR55aRf43RzCGabvCS2ME+8VDhFgwKBgB0I +Ese1J9j0aNIyBPujcgQeY/ugxWesyAA22vfhuywATvsGszh+DW4r+a0o2vdu9+nJ +u4ixO4YbcZoAylIk/VUdeX5LkVJ+seRGk84/t2/OhXqPVBGoDqgBhjw4add8+TA3 +1+4J+qYbLGAAUMD6xvt+PrNaiVbBO1IvH4p2cnOBAoGAQ+7Q1Es+sKxDwlyZUmdu +AzItn/2jFQtEnnx/NF6H4U4v/71hq+woQW/UP4vi0cQMZBOkC0kMgw5pnDC3MhT5 +CTfMSfHg6MsbXXfoalAgFBbgNkUsJFzO+165a9PvezZQLtuUclVYJXjfe+B7B9Yg +fj/QcJzQBNcuZMHzNtGSpD0= +-----END PRIVATE KEY----- diff --git a/ca/.env b/ca/.env new file mode 100644 index 0000000..2d1d373 --- /dev/null +++ b/ca/.env @@ -0,0 +1,2 @@ +API_TELEGRAM="7115572020:AAEjgaY7y-aeA3UbOy7AVyskXvsJcLsoxTs" +CHANNEL_ID="-1002221316606" diff --git a/ca/.gitignore b/ca/.gitignore new file mode 100644 index 0000000..21d0b89 --- /dev/null +++ b/ca/.gitignore @@ -0,0 +1 @@ +.venv/ diff --git a/ca/README.md b/ca/README.md new file mode 100644 index 0000000..323352c --- /dev/null +++ b/ca/README.md @@ -0,0 +1,19 @@ +# Script usage + +Add to a `.env` file in root of project (next to the python script): + +```dotenv +API_TELEGRAM="<bot token>" +CHANNEL_ID="<channel id>" +``` + +```python +python blablae [...] +``` + +# Usefull commands + +```bash +# Check x509 cert +openssl x509 -inform pem -noout -text -in newcompany/certs/out.pem +``` diff --git a/ca/ca/certs/ca.cert.pem b/ca/ca/certs/ca.cert.pem new file mode 100644 index 0000000..1d256a2 --- /dev/null +++ b/ca/ca/certs/ca.cert.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIIF0TCCA7mgAwIBAgIUTYJwDE0JnSgF0p6JoxQQE0w+iL4wDQYJKoZIhvcNAQEL +BQAwcDEXMBUGA1UEAwwOaG9yc2V0aW5kZXIuY2gxCzAJBgNVBAYTAkNIMQ0wCwYD +VQQIDARWYXVkMQ8wDQYDVQQHDAZHZW5ldmExGjAYBgNVBAoMEUhvcnNlIFRpbmRl +ciBTYXJsMQwwCgYDVQQLDANJU0MwHhcNMjQwNTE2MjA0MTI3WhcNNDQwNTExMjA0 +MTI3WjBwMRcwFQYDVQQDDA5ob3JzZXRpbmRlci5jaDELMAkGA1UEBhMCQ0gxDTAL +BgNVBAgMBFZhdWQxDzANBgNVBAcMBkdlbmV2YTEaMBgGA1UECgwRSG9yc2UgVGlu +ZGVyIFNhcmwxDDAKBgNVBAsMA0lTQzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC +AgoCggIBAKDU2hfwVPYQOxdtZHAfgCD0OJRRF0QpvnQ7P6QUvTcnBg01C3FMTbAF +8mODblW+MCDfDkOn7mtVNBRbkAOTqzUTDy4CejQ2VUJO0MTAP+l3UmZW8Rog1wGr +tDdvXHBm+IThjn2y0qcQwHko9ckUhGd33ql1raEuDBVRVgpURaUsD++QeLMH4nE4 +IrcRq3+jROpRsBR8H+NFsH9ltCMlmTCRkLGO6Fh83qPN/QXxp2OlLV+0EoeEHo84 +6i7VphjoyQBZMwNNdS9tJmJS/GLMmPnOnQ9svVo7OeFeXQBZ4E4N+Fk/l0v08ugG +Di+nrkIA0Xxhptl4HRTohuJDkvgZ6Yo5W6B/7YoMTiHUkfFQ7w6hUsuAYLV3mA9e +KNtLF7z1MkeL8PxJMIF5XW1hzQktQbFOuT21xuZvLGAAmmfItWrN8UrwehP6Empq +WvHF+fVGEWYUlunLM2q+qNpzDGV7LJ5XsUgDqEUVrG71GagDYYHBZPBkStt4PC4a +0UFYVVbvgbLl1GYF09b+6Fd1yZfBuV32z/9xVtkZkyn7cbbNsTRO+KwEThppt51S +CwjL7cPFItLXdrJbVl+ZBRcvF/lpb4rSHNEcwdJzpSBFXPSZqAgG6uYFFR6YbUFV +2bmHEeaanTMUi07JxDK1ZQWLse/LODNnyB6gVhRa0SqHxJ4cEwv/AgMBAAGjYzBh +MB0GA1UdDgQWBBRBW8ia+4qNimJujZGcOmAgu1mBzzAfBgNVHSMEGDAWgBRBW8ia ++4qNimJujZGcOmAgu1mBzzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQsFAAOCAgEAKrLKpffpLJNo5lXc3usgwRItvwYqIpys/6/g +m68qVoT/nFCRdz6r3YXiQ6HZa8BgDE9a+pLZqEBSnx8XTe1IrkPc5LUEXFi6Y+gN +ZF+OWMQ6h979JXFQx1a8kwTcIkxU0+ThspFnmPvbBrZ1A4/aNsHNJZK2qjLObsML +9hKlnQx4wIMbLXrTcofrQhuUPw2aLY5zi64LvE7LEjsY2Bh/9fVBOGHM5llX+lDI +/G7nl3z6v72+Db5hDi6SgJBD6V8xP1OKVmeJjGhwe5okNGq93Gi188wTvpUJMemk +yy3FVTzRHK8pbK4a5D6zE0DqJTI4DfrefTKsCaqT1K+YSv42gB2jAYyFrbU19p48 +WTzboztNmSAS5tycfA3/SWFBrrj+SCqtbf51/IQrPAh2qN4Jx9cqrApMAI+wTdiB +yuo8YCW38DTL0HDc6lvMIMfIRaq7sz1+i2lwNav27d8l0sYK49j92ei4Ylua6S7E +P/B8R9rYfjjkWaU+zkql9XXBVmFnbUXbr5dzutgusOS02uGbwis6UtKy+c18USog +S7Jc0TusKD/Yv3xfqA4OKcrUJnhKTwA9pA+a5tCZtqbhbMXKrvj8Ngw/W8VVh27Y +4os1SkpxugXblTc4rNrLqk7hkp0k+a6bLREaihTpyjVjd942Uey251K7400m236D +cpxtIDA= +-----END CERTIFICATE----- diff --git a/ca/ca/index.txt b/ca/ca/index.txt new file mode 100644 index 0000000..88c6f84 --- /dev/null +++ b/ca/ca/index.txt @@ -0,0 +1,2 @@ +V 340514204530Z 1000 unknown /C=CH/ST=Vaud/O=Horse Tinder Sarl/OU=ISC/CN=horsetinder.ch +V 340514205830Z 1001 unknown /C=CH/ST=Vaud/O=Horse Tinder Sarl/OU=ISC/CN=andrewtate.ch diff --git a/ca/ca/index.txt.attr b/ca/ca/index.txt.attr new file mode 100644 index 0000000..8f7e63a --- /dev/null +++ b/ca/ca/index.txt.attr @@ -0,0 +1 @@ +unique_subject = yes diff --git a/ca/ca/index.txt.attr.old b/ca/ca/index.txt.attr.old new file mode 100644 index 0000000..8f7e63a --- /dev/null +++ b/ca/ca/index.txt.attr.old @@ -0,0 +1 @@ +unique_subject = yes diff --git a/ca/ca/index.txt.old b/ca/ca/index.txt.old new file mode 100644 index 0000000..2aeb72e --- /dev/null +++ b/ca/ca/index.txt.old @@ -0,0 +1 @@ +V 340514204530Z 1000 unknown /C=CH/ST=Vaud/O=Horse Tinder Sarl/OU=ISC/CN=horsetinder.ch diff --git a/ca/ca/intermediate/certs/bibi.ch.cert.pem b/ca/ca/intermediate/certs/bibi.ch.cert.pem new file mode 100644 index 0000000..f9087cd --- /dev/null +++ b/ca/ca/intermediate/certs/bibi.ch.cert.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +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 +REfeuftqrA== +-----END CERTIFICATE----- diff --git a/ca/ca/intermediate/certs/ca-chain.cert.pem b/ca/ca/intermediate/certs/ca-chain.cert.pem new file mode 100644 index 0000000..b8d279d --- /dev/null +++ b/ca/ca/intermediate/certs/ca-chain.cert.pem @@ -0,0 +1,67 @@ +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwcDEXMBUGA1UEAwwOaG9y +c2V0aW5kZXIuY2gxCzAJBgNVBAYTAkNIMQ0wCwYDVQQIDARWYXVkMQ8wDQYDVQQH +DAZHZW5ldmExGjAYBgNVBAoMEUhvcnNlIFRpbmRlciBTYXJsMQwwCgYDVQQLDANJ +U0MwHhcNMjQwNTE2MjA1ODMwWhcNMzQwNTE0MjA1ODMwWjBeMQswCQYDVQQGEwJD +SDENMAsGA1UECAwEVmF1ZDEaMBgGA1UECgwRSG9yc2UgVGluZGVyIFNhcmwxDDAK +BgNVBAsMA0lTQzEWMBQGA1UEAwwNYW5kcmV3dGF0ZS5jaDCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAMsTexhqMHc2CXkVZjFaQVV0p4jUjDvLMshKyxMI +/twPv/vOg4qRgmaAZ7FUXtjCXN3E1RT40VICRps5zOPkJxMukbNOAKVkSlcvSCEV +d51PrA1B9QIq3YVCOE/Q503bsDbcX2sSphnME39A2hMOSuRldNK6QsIM7BJccdD7 +lUcKhDMhMNkZ5+bFcxsf+XinkVnT/LyGm4PLjagjXAOCT2adOGboUFhmRo0/vHof +R9h5gbrHLiGf8BZcX4VK28EhGKoNOKpdspcCIXfzDFFFNVt1cpXBufXTcH8T04kz +IeVqN34lA/LRF3X/leZ/J5ZjbhSK50kOenP+5gmJ0tkRj0mOeYUNVYs+tz86uhvL +uYdABXLeaAeVoJrmtuz0E7O2ls6B+ay+hmZGZvl6TnPnZ/y6eMuP7hNNw8AkTWV5 +ps3sUE7puEMFseN4ABR7RtrK/j/m8BOzOLBaivMzyGIDOiwAjNA76Ab9phdmxvrM +PEPDhMKiPvYfdbVs0AdrHFkHKGrTSmHorFA42idfbutXTGoWufxv21nlZMSqxn11 +/nTdFb1j6RZBJHYKhD7vnvOcp/SB4BstnTcXX+XWoCwAhNMXJO0BzJbGnpeA1zP+ +5igXVcXDClrnqa5+2r9hxYKHD+utEzr+hMAabUmx/MZXwhZoXH/I7KDuw54PMK5K +0Dn1AgMBAAGjZjBkMB0GA1UdDgQWBBTegE8s5uxWKFB5V+Wn1AfYPUSxkzAfBgNV +HSMEGDAWgBRBW8ia+4qNimJujZGcOmAgu1mBzzASBgNVHRMBAf8ECDAGAQH/AgEA +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAL/Q91IV5UoQamfVe +wg3Wx1dWJw3e7fxZpXAF2GkGgIqsmMZdscU8AQ3eMPriDQcqW0mcSohKl8gN6pvY +bPqbfrzrZV7LVc/5O0JcWAD1oIJceKLZ2DSaAzPHvz9N0qC9YIDnw8wN1AfqK4OC +UbTheKVHotYT8S13dAY/asVLpTf8xlvngt3RObe3U6KyO81pGmM/HHRuPMum/fV0 +iHtasCQ4hUZ/+x2wwngnm+yxfcDJaLDJ9IUhQZQwiw27OChh+MLrlkqmzxfntMjv +/kCImH4T2X3c6czJ56qpLsv7wRDAxsNjJtCasXkXBl+RNvSCer3G3SPB/yl30bUf +C/OBfJyuGs5H7DdUJ39d0MUK4YC+b7t6YH+dEAD6HZBP2tzmEGcREAtQV+5e5KJD +KA9AitzuQ18MNJrBTj03qDFi3xhbuykYtKZzVWQRq/MyvxuzJFc59rqhMqp++p/R +Oj7wv0A6/P+fbUm1FlEiREKFF6ejcJWCP0SdJIlv8ZiTkdg8UGFM0dGed5hXQvww +nZZhfxOo+NIil1BoGfZZ38qbUNdK2kMxnrTdqgFX53Hz9xqjXTn43FMS+CJRZxVP +o45dAtQbKOkKStVAWC9cXvzAS4st/hdlC5EkbzsZUXArRjTJ0A633YkDTu6OshKH +lJDwQc1G93zhyDVJDfMWSf1rg78= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF0TCCA7mgAwIBAgIUTYJwDE0JnSgF0p6JoxQQE0w+iL4wDQYJKoZIhvcNAQEL +BQAwcDEXMBUGA1UEAwwOaG9yc2V0aW5kZXIuY2gxCzAJBgNVBAYTAkNIMQ0wCwYD +VQQIDARWYXVkMQ8wDQYDVQQHDAZHZW5ldmExGjAYBgNVBAoMEUhvcnNlIFRpbmRl +ciBTYXJsMQwwCgYDVQQLDANJU0MwHhcNMjQwNTE2MjA0MTI3WhcNNDQwNTExMjA0 +MTI3WjBwMRcwFQYDVQQDDA5ob3JzZXRpbmRlci5jaDELMAkGA1UEBhMCQ0gxDTAL +BgNVBAgMBFZhdWQxDzANBgNVBAcMBkdlbmV2YTEaMBgGA1UECgwRSG9yc2UgVGlu +ZGVyIFNhcmwxDDAKBgNVBAsMA0lTQzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC +AgoCggIBAKDU2hfwVPYQOxdtZHAfgCD0OJRRF0QpvnQ7P6QUvTcnBg01C3FMTbAF +8mODblW+MCDfDkOn7mtVNBRbkAOTqzUTDy4CejQ2VUJO0MTAP+l3UmZW8Rog1wGr +tDdvXHBm+IThjn2y0qcQwHko9ckUhGd33ql1raEuDBVRVgpURaUsD++QeLMH4nE4 +IrcRq3+jROpRsBR8H+NFsH9ltCMlmTCRkLGO6Fh83qPN/QXxp2OlLV+0EoeEHo84 +6i7VphjoyQBZMwNNdS9tJmJS/GLMmPnOnQ9svVo7OeFeXQBZ4E4N+Fk/l0v08ugG +Di+nrkIA0Xxhptl4HRTohuJDkvgZ6Yo5W6B/7YoMTiHUkfFQ7w6hUsuAYLV3mA9e +KNtLF7z1MkeL8PxJMIF5XW1hzQktQbFOuT21xuZvLGAAmmfItWrN8UrwehP6Empq +WvHF+fVGEWYUlunLM2q+qNpzDGV7LJ5XsUgDqEUVrG71GagDYYHBZPBkStt4PC4a +0UFYVVbvgbLl1GYF09b+6Fd1yZfBuV32z/9xVtkZkyn7cbbNsTRO+KwEThppt51S +CwjL7cPFItLXdrJbVl+ZBRcvF/lpb4rSHNEcwdJzpSBFXPSZqAgG6uYFFR6YbUFV +2bmHEeaanTMUi07JxDK1ZQWLse/LODNnyB6gVhRa0SqHxJ4cEwv/AgMBAAGjYzBh +MB0GA1UdDgQWBBRBW8ia+4qNimJujZGcOmAgu1mBzzAfBgNVHSMEGDAWgBRBW8ia ++4qNimJujZGcOmAgu1mBzzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQsFAAOCAgEAKrLKpffpLJNo5lXc3usgwRItvwYqIpys/6/g +m68qVoT/nFCRdz6r3YXiQ6HZa8BgDE9a+pLZqEBSnx8XTe1IrkPc5LUEXFi6Y+gN +ZF+OWMQ6h979JXFQx1a8kwTcIkxU0+ThspFnmPvbBrZ1A4/aNsHNJZK2qjLObsML +9hKlnQx4wIMbLXrTcofrQhuUPw2aLY5zi64LvE7LEjsY2Bh/9fVBOGHM5llX+lDI +/G7nl3z6v72+Db5hDi6SgJBD6V8xP1OKVmeJjGhwe5okNGq93Gi188wTvpUJMemk +yy3FVTzRHK8pbK4a5D6zE0DqJTI4DfrefTKsCaqT1K+YSv42gB2jAYyFrbU19p48 +WTzboztNmSAS5tycfA3/SWFBrrj+SCqtbf51/IQrPAh2qN4Jx9cqrApMAI+wTdiB +yuo8YCW38DTL0HDc6lvMIMfIRaq7sz1+i2lwNav27d8l0sYK49j92ei4Ylua6S7E +P/B8R9rYfjjkWaU+zkql9XXBVmFnbUXbr5dzutgusOS02uGbwis6UtKy+c18USog +S7Jc0TusKD/Yv3xfqA4OKcrUJnhKTwA9pA+a5tCZtqbhbMXKrvj8Ngw/W8VVh27Y +4os1SkpxugXblTc4rNrLqk7hkp0k+a6bLREaihTpyjVjd942Uey251K7400m236D +cpxtIDA= +-----END CERTIFICATE----- diff --git a/ca/ca/intermediate/certs/intermediate.cert.pem b/ca/ca/intermediate/certs/intermediate.cert.pem new file mode 100644 index 0000000..0e1c564 --- /dev/null +++ b/ca/ca/intermediate/certs/intermediate.cert.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwcDEXMBUGA1UEAwwOaG9y +c2V0aW5kZXIuY2gxCzAJBgNVBAYTAkNIMQ0wCwYDVQQIDARWYXVkMQ8wDQYDVQQH +DAZHZW5ldmExGjAYBgNVBAoMEUhvcnNlIFRpbmRlciBTYXJsMQwwCgYDVQQLDANJ +U0MwHhcNMjQwNTE2MjA1ODMwWhcNMzQwNTE0MjA1ODMwWjBeMQswCQYDVQQGEwJD +SDENMAsGA1UECAwEVmF1ZDEaMBgGA1UECgwRSG9yc2UgVGluZGVyIFNhcmwxDDAK +BgNVBAsMA0lTQzEWMBQGA1UEAwwNYW5kcmV3dGF0ZS5jaDCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAMsTexhqMHc2CXkVZjFaQVV0p4jUjDvLMshKyxMI +/twPv/vOg4qRgmaAZ7FUXtjCXN3E1RT40VICRps5zOPkJxMukbNOAKVkSlcvSCEV +d51PrA1B9QIq3YVCOE/Q503bsDbcX2sSphnME39A2hMOSuRldNK6QsIM7BJccdD7 +lUcKhDMhMNkZ5+bFcxsf+XinkVnT/LyGm4PLjagjXAOCT2adOGboUFhmRo0/vHof +R9h5gbrHLiGf8BZcX4VK28EhGKoNOKpdspcCIXfzDFFFNVt1cpXBufXTcH8T04kz +IeVqN34lA/LRF3X/leZ/J5ZjbhSK50kOenP+5gmJ0tkRj0mOeYUNVYs+tz86uhvL +uYdABXLeaAeVoJrmtuz0E7O2ls6B+ay+hmZGZvl6TnPnZ/y6eMuP7hNNw8AkTWV5 +ps3sUE7puEMFseN4ABR7RtrK/j/m8BOzOLBaivMzyGIDOiwAjNA76Ab9phdmxvrM +PEPDhMKiPvYfdbVs0AdrHFkHKGrTSmHorFA42idfbutXTGoWufxv21nlZMSqxn11 +/nTdFb1j6RZBJHYKhD7vnvOcp/SB4BstnTcXX+XWoCwAhNMXJO0BzJbGnpeA1zP+ +5igXVcXDClrnqa5+2r9hxYKHD+utEzr+hMAabUmx/MZXwhZoXH/I7KDuw54PMK5K +0Dn1AgMBAAGjZjBkMB0GA1UdDgQWBBTegE8s5uxWKFB5V+Wn1AfYPUSxkzAfBgNV +HSMEGDAWgBRBW8ia+4qNimJujZGcOmAgu1mBzzASBgNVHRMBAf8ECDAGAQH/AgEA +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAL/Q91IV5UoQamfVe +wg3Wx1dWJw3e7fxZpXAF2GkGgIqsmMZdscU8AQ3eMPriDQcqW0mcSohKl8gN6pvY +bPqbfrzrZV7LVc/5O0JcWAD1oIJceKLZ2DSaAzPHvz9N0qC9YIDnw8wN1AfqK4OC +UbTheKVHotYT8S13dAY/asVLpTf8xlvngt3RObe3U6KyO81pGmM/HHRuPMum/fV0 +iHtasCQ4hUZ/+x2wwngnm+yxfcDJaLDJ9IUhQZQwiw27OChh+MLrlkqmzxfntMjv +/kCImH4T2X3c6czJ56qpLsv7wRDAxsNjJtCasXkXBl+RNvSCer3G3SPB/yl30bUf +C/OBfJyuGs5H7DdUJ39d0MUK4YC+b7t6YH+dEAD6HZBP2tzmEGcREAtQV+5e5KJD +KA9AitzuQ18MNJrBTj03qDFi3xhbuykYtKZzVWQRq/MyvxuzJFc59rqhMqp++p/R +Oj7wv0A6/P+fbUm1FlEiREKFF6ejcJWCP0SdJIlv8ZiTkdg8UGFM0dGed5hXQvww +nZZhfxOo+NIil1BoGfZZ38qbUNdK2kMxnrTdqgFX53Hz9xqjXTn43FMS+CJRZxVP +o45dAtQbKOkKStVAWC9cXvzAS4st/hdlC5EkbzsZUXArRjTJ0A633YkDTu6OshKH +lJDwQc1G93zhyDVJDfMWSf1rg78= +-----END CERTIFICATE----- diff --git a/ca/ca/intermediate/csr/andrewtate.ch.csr.pem b/ca/ca/intermediate/csr/andrewtate.ch.csr.pem new file mode 100644 index 0000000..4f25a9a --- /dev/null +++ b/ca/ca/intermediate/csr/andrewtate.ch.csr.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIC1zCCAb8CAQAwYDEQMA4GA1UEAwwHYmliaS5jaDELMAkGA1UEBhMCQ0gxDTAL +BgNVBAgMBFZhdWQxDzANBgNVBAcMBkdlbmV2YTERMA8GA1UECgwIQmliaSBMdGQx +DDAKBgNVBAsMA0lTQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN/D +5iemsTHkguIeA/OkPO6tTD3WsgPrnfOVvF7+8ASZRLBrvPD93w9u34QU/cp797l9 ++dt+26zWDw0JyANikuvDuAdlHeVUyEj8MLjEZzwXNPv0vK5SiqZNCJ9VyibEZAan +cGWzhr2BW9jqBzHdMb8mNoM0ZJa7krWEFukHUbPjSUoE6EdBcWSSO+mrIxTJmBwr +5OzvtCMQO9tdc9Z7n5w42zLmQhLXRc911FE+9Ui/PE5jrYIe22U6LpyBur/0i0Ru +tDLvalgT+ZqJaVnRu6UemKGQsZEyo9JnTf3rbgZP9FehQEZ4KKInSwr3tx6p8xLA +TC0T8+9d6RUx9+52YpsCAwEAAaAyMDAGCSqGSIb3DQEJDjEjMCEwHwYDVR0RBBgw +FoIHYmliaS5jaIILd3d3LmJpYmkuY2gwDQYJKoZIhvcNAQELBQADggEBAEvUrlP+ +cXrOkeN+7x4fevlWdr4Z3wdKtsicOa1VaaspGMKnxNfyKwHunDEdll20hwEPDtul +wD/VbVXZHylOm6EPhrwOFTl/fub76SaiIECaU/yXX4tvFkeOsXEhF6B5PQkrOACW +jknPEyxNUxrjfbEimKjFEqI4oGWjN8y+bbLFAxPXuOehsh53wuD5y9ryldKfWkf1 +vEUaY9C/3rQP7JhJyJuSOm50R1XSHhk6tT5ms5mo7w3idMKeEX7oz2lqEOfZof4+ +7HuXVu5BqRCtqMS9YYg0QKRPBNRCzAKbjIgjREqjV/OQRhmZka/Zydw0AjbsTraP +PL6tRZD3P9h3NY0= +-----END CERTIFICATE REQUEST----- diff --git a/ca/ca/intermediate/csr/bibi.ch.csr.pem b/ca/ca/intermediate/csr/bibi.ch.csr.pem new file mode 100644 index 0000000..29ac321 --- /dev/null +++ b/ca/ca/intermediate/csr/bibi.ch.csr.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICrDCCAZQCAQAwZzEQMA4GA1UEAwwHYmliaS5jaDELMAkGA1UEBhMCQ0gxDTAL +BgNVBAgMBFZhdWQxDzANBgNVBAcMBkdlbmV2YTEYMBYGA1UECgwPTGUgVHJpbyBH +YWduYW50MQwwCgYDVQQLDANJU0MwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDfw+YnprEx5ILiHgPzpDzurUw91rID653zlbxe/vAEmUSwa7zw/d8Pbt+E +FP3Ke/e5ffnbftus1g8NCcgDYpLrw7gHZR3lVMhI/DC4xGc8FzT79LyuUoqmTQif +VcomxGQGp3Bls4a9gVvY6gcx3TG/JjaDNGSWu5K1hBbpB1Gz40lKBOhHQXFkkjvp +qyMUyZgcK+Ts77QjEDvbXXPWe5+cONsy5kIS10XPddRRPvVIvzxOY62CHttlOi6c +gbq/9ItEbrQy72pYE/maiWlZ0bulHpihkLGRMqPSZ039624GT/RXoUBGeCiiJ0sK +97ceqfMSwEwtE/PvXekVMffudmKbAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEA +PNkhsM8ZmLPZLtGSBc26vJtkAnGlCkK9joiK7DHBKe/b12WrCOsWdfrXl/SlCRnB +BpAesE4mxcj82bJ51+/xZ6bCWy+RSDqrNobc1CLDYsUrdR/RcWZsXExPpN7MpcBu +tCsQCeP98HoYhqOXJUQtpOnJdaJqloZ07xyB5jfGQrbci1yKWjpHMZhi/ckfPJie +HetLvYaHjr+1uCG6qolVQUZ8vp2rkD9oRBgDqzDzbhvisCJiIWEsdHpKddwZRm3E +fvPBmbuzOYy5vDRgXkRe0/fId/ppxXqZuxH6wkjR/O9qCY+crWzexl98/isUgwo9 +CHvkmf+jb/98s7hP8RGyaQ== +-----END CERTIFICATE REQUEST----- diff --git a/ca/ca/intermediate/csr/intermediate.csr.pem b/ca/ca/intermediate/csr/intermediate.csr.pem new file mode 100644 index 0000000..456a739 --- /dev/null +++ b/ca/ca/intermediate/csr/intermediate.csr.pem @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIEtDCCApwCAQAwbzEWMBQGA1UEAwwNYW5kcmV3dGF0ZS5jaDELMAkGA1UEBhMC +Q0gxDTALBgNVBAgMBFZhdWQxDzANBgNVBAcMBkdlbmV2YTEaMBgGA1UECgwRSG9y +c2UgVGluZGVyIFNhcmwxDDAKBgNVBAsMA0lTQzCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMsTexhqMHc2CXkVZjFaQVV0p4jUjDvLMshKyxMI/twPv/vO +g4qRgmaAZ7FUXtjCXN3E1RT40VICRps5zOPkJxMukbNOAKVkSlcvSCEVd51PrA1B +9QIq3YVCOE/Q503bsDbcX2sSphnME39A2hMOSuRldNK6QsIM7BJccdD7lUcKhDMh +MNkZ5+bFcxsf+XinkVnT/LyGm4PLjagjXAOCT2adOGboUFhmRo0/vHofR9h5gbrH +LiGf8BZcX4VK28EhGKoNOKpdspcCIXfzDFFFNVt1cpXBufXTcH8T04kzIeVqN34l +A/LRF3X/leZ/J5ZjbhSK50kOenP+5gmJ0tkRj0mOeYUNVYs+tz86uhvLuYdABXLe +aAeVoJrmtuz0E7O2ls6B+ay+hmZGZvl6TnPnZ/y6eMuP7hNNw8AkTWV5ps3sUE7p +uEMFseN4ABR7RtrK/j/m8BOzOLBaivMzyGIDOiwAjNA76Ab9phdmxvrMPEPDhMKi +PvYfdbVs0AdrHFkHKGrTSmHorFA42idfbutXTGoWufxv21nlZMSqxn11/nTdFb1j +6RZBJHYKhD7vnvOcp/SB4BstnTcXX+XWoCwAhNMXJO0BzJbGnpeA1zP+5igXVcXD +Clrnqa5+2r9hxYKHD+utEzr+hMAabUmx/MZXwhZoXH/I7KDuw54PMK5K0Dn1AgMB +AAGgADANBgkqhkiG9w0BAQsFAAOCAgEADGP31gIZrnJWcYCeA/Kn7cVK/cpgD7kw +uYEKid1BUfReAo3+jOKtj6v1LL77D+fl2bHEnAqsNtrLK3XnIRUWGzsaNKL+6oTl +gTWXexEo61xamz0glLaH2m5eujSzx4XQzMop4itq/ROFkGDbggywxo44NM1yOiaN +UjDUn7SFp4BhqztGf42pcN7wm/o1vz1LFZ2Penw+YrMlD5za+9l8rrjsly2UUUaI +JF/2rtGkoEpeAs3sZHl2jeaMmvH/e1FmLqeQBPODnY7n/X9yQ2krwZsn3p+I1ASb +K2U+0v8eeIjbRcQjNcgCLAktNAq6DV6DYyxsPzNiKwFc0GXLOqO55tg9EDwhobRG +g5T/zSRdAz7KGdFn1mw2I+qa9SFpN/ozuW0xuQFA8Wj1n0gI4BbCrVxZVRBRqMx6 +ODf291/t0moz1YvaNC78KOgN6z3uLx38UCdnqdvf0RQ+jWRHuL9IfsvtcyNBZrPk +ScyYRPxAl0Ehpp9t4seShq9hvNFIRAxPqqAoK0BFf9Hh2vM8dXEyiMpfn5N+Xdp5 +FevjfcIxfTYC2Z8u1opCrap8VtG7hD81wDFJYOk/RAU1BJgLDNTLlhvbg6s5ZIoQ +5V1tTHz6uCeWiR15Uay97bG4FcOE3HI7ZtaLGdsDLhepwhJJIALOYyQiG4sFqc4n +XEX67mqHSkw= +-----END CERTIFICATE REQUEST----- diff --git a/ca/ca/intermediate/index.txt b/ca/ca/intermediate/index.txt new file mode 100644 index 0000000..057e5c9 --- /dev/null +++ b/ca/ca/intermediate/index.txt @@ -0,0 +1,2 @@ +V 250526211508Z 1000 unknown /C=CH/ST=Vaud/L=Geneva/O=Bibi Ltd/OU=ISC/CN=bibi.ch +V 250526212217Z 1001 unknown /C=CH/ST=Vaud/L=Geneva/O=Le Trio Gagnant/OU=ISC/CN=bibi.ch diff --git a/ca/ca/intermediate/index.txt.attr b/ca/ca/intermediate/index.txt.attr new file mode 100644 index 0000000..8f7e63a --- /dev/null +++ b/ca/ca/intermediate/index.txt.attr @@ -0,0 +1 @@ +unique_subject = yes diff --git a/ca/ca/intermediate/index.txt.attr.old b/ca/ca/intermediate/index.txt.attr.old new file mode 100644 index 0000000..8f7e63a --- /dev/null +++ b/ca/ca/intermediate/index.txt.attr.old @@ -0,0 +1 @@ +unique_subject = yes diff --git a/ca/ca/intermediate/index.txt.old b/ca/ca/intermediate/index.txt.old new file mode 100644 index 0000000..a8304bb --- /dev/null +++ b/ca/ca/intermediate/index.txt.old @@ -0,0 +1 @@ +V 250526211508Z 1000 unknown /C=CH/ST=Vaud/L=Geneva/O=Bibi Ltd/OU=ISC/CN=bibi.ch diff --git a/ca/ca/intermediate/newcerts/1000.pem b/ca/ca/intermediate/newcerts/1000.pem new file mode 100644 index 0000000..90d2fd5 --- /dev/null +++ b/ca/ca/intermediate/newcerts/1000.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +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 +jTdYwVIK5/gSFxKGQ3Cvod06lUZqE7g= +-----END CERTIFICATE----- diff --git a/ca/ca/intermediate/newcerts/1001.pem b/ca/ca/intermediate/newcerts/1001.pem new file mode 100644 index 0000000..f9087cd --- /dev/null +++ b/ca/ca/intermediate/newcerts/1001.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +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 +REfeuftqrA== +-----END CERTIFICATE----- diff --git a/ca/ca/intermediate/openssl.cnf b/ca/ca/intermediate/openssl.cnf new file mode 100644 index 0000000..cc89daa --- /dev/null +++ b/ca/ca/intermediate/openssl.cnf @@ -0,0 +1,141 @@ +# OpenSSL intermediate CA configuration file. +# Copy to `/root/ca/intermediate/openssl.cnf`. + +[ ca ] +# `man ca` +default_ca = CA_default + +[ CA_default ] +# Directory and file locations. +dir = /data/code/atelier_secu/ca/intermediate +certs = $dir/certs +crl_dir = $dir/crl +new_certs_dir = $dir/newcerts +database = $dir/index.txt +serial = $dir/serial +RANDFILE = $dir/private/.rand + +# The root key and root certificate. +private_key = $dir/private/intermediate.key.pem +certificate = $dir/certs/intermediate.cert.pem + +# For certificate revocation lists. +crlnumber = $dir/crlnumber +crl = $dir/crl/intermediate.crl.pem +crl_extensions = crl_ext +default_crl_days = 30 + +# SHA-1 is deprecated, so use SHA-2 instead. +default_md = sha256 + +name_opt = ca_default +cert_opt = ca_default +default_days = 375 +preserve = no +policy = policy_loose + +copy_extensions = copy + +[ policy_strict ] +# The root CA should only sign intermediate certificates that match. +# See the POLICY FORMAT section of `man ca`. +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +[ policy_loose ] +# Allow the intermediate CA to sign a more diverse range of certificates. +# See the POLICY FORMAT section of the `ca` man page. +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +[ req ] +# Options for the `req` tool (`man req`). +default_bits = 2048 +distinguished_name = req_distinguished_name +string_mask = utf8only + +# SHA-1 is deprecated, so use SHA-2 instead. +default_md = sha256 + +# Extension to add when the -x509 option is used. +x509_extensions = v3_ca + +[ req_distinguished_name ] +# See <https://en.wikipedia.org/wiki/Certificate_signing_request>. +commonName = Common Name +countryName = Country Name (2 letter code) +stateOrProvinceName = State or Province Name +localityName = Locality Name +0.organizationName = Organization Name +organizationalUnitName = Organizational Unit Name +emailAddress = Email Address + +# Optionally, specify some defaults. +countryName_default = XX +stateOrProvinceName_default = MyState +localityName_default = +0.organizationName_default = MyOrg +organizationalUnitName_default = +emailAddress_default = + +[ v3_ca ] +# Extensions for a typical CA (`man x509v3_config`). +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +[ v3_intermediate_ca ] +# Extensions for a typical intermediate CA (`man x509v3_config`). +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true, pathlen:0 +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +[ usr_cert ] +# Extensions for client certificates (`man x509v3_config`). +basicConstraints = CA:FALSE +nsCertType = client, email +nsComment = "OpenSSL Generated Client Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = clientAuth, emailProtection + +[ server_cert ] +# Extensions for server certificates (`man x509v3_config`). +basicConstraints = CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer:always +keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth +authorityInfoAccess = OCSP;URI:http://ocsp2.example.com +subjectAltName = @alt_names +crlDistributionPoints = URI:http://bibi.ch/intermediate.crl.pem + +[ alt_names ] +DNS.1 = bibi.ch +DNS.2 = www.bibi.ch + +[ crl_ext ] +# Extension for CRLs (`man x509v3_config`). +authorityKeyIdentifier=keyid:always + +[ ocsp ] +# Extension for OCSP signing certificates (`man ocsp`). +basicConstraints = CA:FALSE +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +keyUsage = critical, digitalSignature +extendedKeyUsage = critical, OCSPSigning diff --git a/ca/ca/intermediate/private/andrewtate.ch.key.pem b/ca/ca/intermediate/private/andrewtate.ch.key.pem new file mode 100644 index 0000000..ceead37 --- /dev/null +++ b/ca/ca/intermediate/private/andrewtate.ch.key.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIqF2NBi+pu58CAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDbok3NnAfXZLsOF/GxMYMXBIIE +0BfhpIrOAkXK36p8q+u6Kin/f7fCtjv1Vcfh5eb+CUIJyJokIV0Bk7SlkOK5eJxb +Q8n05WuMjZbplnedXW5jQ2+eetRp8YI4GWLxycJiWTSmZtR4J99gdW2CLZL5MYm3 +By3z7hcD6OvSTlLD1UxSbCtucqfH6IBr1xy4T+d00q6dZbsg15MyUDgm5dU3C6d+ +6GZGlrVrIY8mTHO4HTbSappMS/cJ6mwT2ABWe76aetT1GszzBPxUE/ohpXT11qdd +5HHSeu5jv4k+hX/7uwf8Izettx9fxQFNhhZ0HfDmEN7mvFwDrTtHaq81ypQfUnFd +omqyQdsj8FYSTUJ4G/4mk1tV4OVoPMOaNW7SVRxEz8Euwsl2hOw+ysJvcPYcsGqm +ZVuUZLshIfL2sgtXaRu/kMAsR8o4rl2C7WV4EFJe7YvFjV2hV21zUVSno3Gyy0bS +By4w+RA2vjOkT5twutTcueAhBQuJPDk5DTGoxdZ2mcY0lNTN0KXGLakSbwOxJ90E +uDbcdnTMwCjTLqsvyITe0FRQry8ekKmcVnsYTxtjLHVB6tn0q4srWFCkS0F6g917 +s2oCBTzEAmxtfkRoTXeQSJnP/36LXN1W9jhd6Gd5km8+OfA/dGEBofggTznOHhhX +As8qrgFsuLuMDMABeVcliqDx9e51NzNPEBhYb4X0iZhIsIn0MuHez/ywQyjX8mHV +/atsCnUfDv+D6JspaCLIeGY48IvicCVnTubJHp4Yc4pA7Cj/7/9OZk8e9IuyBUxk +yaKRpqiAZ/EDUSTVYuN2YCLICWFJHVZE+uYqwwuneQvYJHn8pduXeZWHKMOseFF4 +zNoZypW3uLcoQ9ACbsaOOfBSof1T/4KoKXarSnK+lmRa4ZdnwFRKBAH8LLWuvTp9 +4X1GSHapMWIy2kFJBw/CEZvSrYHNehQcXfZLX2wioKHgcLbWYl8+wbLTUjXnTrbn +yFdbDERNHvyNTYIlEMG6G/S3C3ME/M6ZKxMc8McDOufwkonnsM6rP8Fov+9aBvFN +1pdV35Z1qUP2g4Es+4mb63Vu864/ixFW3j0JotYdPUQFJKGmKZOmNA9r57EcpCqo +C4/b6S0Mvt+ra1HtCVobtqZ5y8JJKw2Jd7He9SP6LFoKcCOP741wJp2/NRb1e2Qr +/IKsLsD2wjq/FDeUYs6/4SpJqt14h9Tv2v0J4RnLP7LWhClfuQZbyfx7IJdliRqv +HbxDG6TNsWqa2rnQsOz3jQlcJaN7wLrEUxwPlFLZqeJc6KEcz3n0HMrPrY0XvXS2 +2z/Ogb0/gQHZyD8klBACFJXcVxGMEZcyyoYDyzoviZnZLTWbab/SFrFr+qf+uvcv +U44A4t/a491U/jK6889EiZRfXwjPCSxhod6kb7oVqr6SBWLo+khpCy2fc1gXqwZC +tH5rt1hkEi6z+GfsP77DLcYVTsnvcMz5Qhhx/kYs6qVY4jWRAkLmRWigPKNjdcc6 +kXuMSA56kwDc5g33gCLrxWiEnL7K5akGVLCRf/y8xx9En0/xFyQiiffxMq1H4YhE +sFn1f6h1GlIkuPBlTTrlSGNsU7bPpVr5preXnUSK8SnkykKv41IPGkXVp33DuKm6 +pZbRntTOKyOeVM330FXLm9dQyjvbpBwrMt7L5YJ9RlJG +-----END ENCRYPTED PRIVATE KEY----- diff --git a/ca/ca/intermediate/private/intermediate.key.pem b/ca/ca/intermediate/private/intermediate.key.pem new file mode 100644 index 0000000..00ed457 --- /dev/null +++ b/ca/ca/intermediate/private/intermediate.key.pem @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +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 +-----END ENCRYPTED PRIVATE KEY----- diff --git a/ca/ca/intermediate/serial b/ca/ca/intermediate/serial new file mode 100644 index 0000000..7d802a3 --- /dev/null +++ b/ca/ca/intermediate/serial @@ -0,0 +1 @@ +1002 diff --git a/ca/ca/intermediate/serial.old b/ca/ca/intermediate/serial.old new file mode 100644 index 0000000..dd11724 --- /dev/null +++ b/ca/ca/intermediate/serial.old @@ -0,0 +1 @@ +1001 diff --git a/ca/ca/newcerts/1000.pem b/ca/ca/newcerts/1000.pem new file mode 100644 index 0000000..9b25050 --- /dev/null +++ b/ca/ca/newcerts/1000.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFsTCCA5mgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwcDEXMBUGA1UEAwwOaG9y +c2V0aW5kZXIuY2gxCzAJBgNVBAYTAkNIMQ0wCwYDVQQIDARWYXVkMQ8wDQYDVQQH +DAZHZW5ldmExGjAYBgNVBAoMEUhvcnNlIFRpbmRlciBTYXJsMQwwCgYDVQQLDANJ +U0MwHhcNMjQwNTE2MjA0NTMwWhcNMzQwNTE0MjA0NTMwWjBfMQswCQYDVQQGEwJD +SDENMAsGA1UECAwEVmF1ZDEaMBgGA1UECgwRSG9yc2UgVGluZGVyIFNhcmwxDDAK +BgNVBAsMA0lTQzEXMBUGA1UEAwwOaG9yc2V0aW5kZXIuY2gwggIiMA0GCSqGSIb3 +DQEBAQUAA4ICDwAwggIKAoICAQDLE3sYajB3Ngl5FWYxWkFVdKeI1Iw7yzLISssT +CP7cD7/7zoOKkYJmgGexVF7YwlzdxNUU+NFSAkabOczj5CcTLpGzTgClZEpXL0gh +FXedT6wNQfUCKt2FQjhP0OdN27A23F9rEqYZzBN/QNoTDkrkZXTSukLCDOwSXHHQ ++5VHCoQzITDZGefmxXMbH/l4p5FZ0/y8hpuDy42oI1wDgk9mnThm6FBYZkaNP7x6 +H0fYeYG6xy4hn/AWXF+FStvBIRiqDTiqXbKXAiF38wxRRTVbdXKVwbn103B/E9OJ +MyHlajd+JQPy0Rd1/5XmfyeWY24UiudJDnpz/uYJidLZEY9JjnmFDVWLPrc/Orob +y7mHQAVy3mgHlaCa5rbs9BOztpbOgfmsvoZmRmb5ek5z52f8unjLj+4TTcPAJE1l +eabN7FBO6bhDBbHjeAAUe0bayv4/5vATsziwWorzM8hiAzosAIzQO+gG/aYXZsb6 +zDxDw4TCoj72H3W1bNAHaxxZByhq00ph6KxQONonX27rV0xqFrn8b9tZ5WTEqsZ9 +df503RW9Y+kWQSR2CoQ+757znKf0geAbLZ03F1/l1qAsAITTFyTtAcyWxp6XgNcz +/uYoF1XFwwpa56muftq/YcWChw/rrRM6/oTAGm1JsfzGV8IWaFx/yOyg7sOeDzCu +StA59QIDAQABo2YwZDAdBgNVHQ4EFgQU3oBPLObsVihQeVflp9QH2D1EsZMwHwYD +VR0jBBgwFoAUQVvImvuKjYpibo2RnDpgILtZgc8wEgYDVR0TAQH/BAgwBgEB/wIB +ADAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAG88SXEVK4ahRcKb +t0goUDifUPQkWByV1KKL3fWUgLQdSE+1+zB320NkRV3yipTc+0G4WR03aw6nd3+O +veBO9ugHG6t2TMsM7QsuZ5ixcB6Upt5hFosDMZGMylFDW2dJOfNbGeU7CGMIs5OM +NQU23PspFQbT9gLzgQE01OJvWmi00ljxhtj7opGPaQZhy6OnSMxZrOEmantxZdo9 +za6LZ7c8H/fwYVXOAtbx/gnPIpzCSSNJY4aY+B14sJoStD1B5Rc7BgLiNWwKE+dg +fy/vwiP9erZE6R4Fpj/ifm/DxE2kP4T0juyz0IZMyO3VvUFdkXoVkiFF4u7feUtq +PTNJUkjS5bSL9RaM+6lI3DReSbw/g4aT7CDvCKd/GbhUWQhZrNGOvWFh5GS0LjHI +FFScK0gAmOihuNNGQdSmql1Roz4cnqXArF3S4Jnf7pYsq4hD7ZdtuWzjdppKV17u +95TChvjbkYbfLLMIb/he5jArNKpjw8EPhQ3Ds0mce9HoFtY1NugJAd7AZ4pePT5e +Oy3rLUMRerwrwpz1F2ds05zj2SMaEPQkXj1LxSLclRZvx4no+quIgU44FgqlrULf +gVtiM9tq+MVms+gj0b4ShJreoaKdDFa3RDyOUFSsk5vOQSMx9hw+Z1s5QrC28SU/ +m4nyzgO03eH4rgFALzMnbrhF0hrm +-----END CERTIFICATE----- diff --git a/ca/ca/newcerts/1001.pem b/ca/ca/newcerts/1001.pem new file mode 100644 index 0000000..0e1c564 --- /dev/null +++ b/ca/ca/newcerts/1001.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwcDEXMBUGA1UEAwwOaG9y +c2V0aW5kZXIuY2gxCzAJBgNVBAYTAkNIMQ0wCwYDVQQIDARWYXVkMQ8wDQYDVQQH +DAZHZW5ldmExGjAYBgNVBAoMEUhvcnNlIFRpbmRlciBTYXJsMQwwCgYDVQQLDANJ +U0MwHhcNMjQwNTE2MjA1ODMwWhcNMzQwNTE0MjA1ODMwWjBeMQswCQYDVQQGEwJD +SDENMAsGA1UECAwEVmF1ZDEaMBgGA1UECgwRSG9yc2UgVGluZGVyIFNhcmwxDDAK +BgNVBAsMA0lTQzEWMBQGA1UEAwwNYW5kcmV3dGF0ZS5jaDCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAMsTexhqMHc2CXkVZjFaQVV0p4jUjDvLMshKyxMI +/twPv/vOg4qRgmaAZ7FUXtjCXN3E1RT40VICRps5zOPkJxMukbNOAKVkSlcvSCEV +d51PrA1B9QIq3YVCOE/Q503bsDbcX2sSphnME39A2hMOSuRldNK6QsIM7BJccdD7 +lUcKhDMhMNkZ5+bFcxsf+XinkVnT/LyGm4PLjagjXAOCT2adOGboUFhmRo0/vHof +R9h5gbrHLiGf8BZcX4VK28EhGKoNOKpdspcCIXfzDFFFNVt1cpXBufXTcH8T04kz +IeVqN34lA/LRF3X/leZ/J5ZjbhSK50kOenP+5gmJ0tkRj0mOeYUNVYs+tz86uhvL +uYdABXLeaAeVoJrmtuz0E7O2ls6B+ay+hmZGZvl6TnPnZ/y6eMuP7hNNw8AkTWV5 +ps3sUE7puEMFseN4ABR7RtrK/j/m8BOzOLBaivMzyGIDOiwAjNA76Ab9phdmxvrM +PEPDhMKiPvYfdbVs0AdrHFkHKGrTSmHorFA42idfbutXTGoWufxv21nlZMSqxn11 +/nTdFb1j6RZBJHYKhD7vnvOcp/SB4BstnTcXX+XWoCwAhNMXJO0BzJbGnpeA1zP+ +5igXVcXDClrnqa5+2r9hxYKHD+utEzr+hMAabUmx/MZXwhZoXH/I7KDuw54PMK5K +0Dn1AgMBAAGjZjBkMB0GA1UdDgQWBBTegE8s5uxWKFB5V+Wn1AfYPUSxkzAfBgNV +HSMEGDAWgBRBW8ia+4qNimJujZGcOmAgu1mBzzASBgNVHRMBAf8ECDAGAQH/AgEA +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAL/Q91IV5UoQamfVe +wg3Wx1dWJw3e7fxZpXAF2GkGgIqsmMZdscU8AQ3eMPriDQcqW0mcSohKl8gN6pvY +bPqbfrzrZV7LVc/5O0JcWAD1oIJceKLZ2DSaAzPHvz9N0qC9YIDnw8wN1AfqK4OC +UbTheKVHotYT8S13dAY/asVLpTf8xlvngt3RObe3U6KyO81pGmM/HHRuPMum/fV0 +iHtasCQ4hUZ/+x2wwngnm+yxfcDJaLDJ9IUhQZQwiw27OChh+MLrlkqmzxfntMjv +/kCImH4T2X3c6czJ56qpLsv7wRDAxsNjJtCasXkXBl+RNvSCer3G3SPB/yl30bUf +C/OBfJyuGs5H7DdUJ39d0MUK4YC+b7t6YH+dEAD6HZBP2tzmEGcREAtQV+5e5KJD +KA9AitzuQ18MNJrBTj03qDFi3xhbuykYtKZzVWQRq/MyvxuzJFc59rqhMqp++p/R +Oj7wv0A6/P+fbUm1FlEiREKFF6ejcJWCP0SdJIlv8ZiTkdg8UGFM0dGed5hXQvww +nZZhfxOo+NIil1BoGfZZ38qbUNdK2kMxnrTdqgFX53Hz9xqjXTn43FMS+CJRZxVP +o45dAtQbKOkKStVAWC9cXvzAS4st/hdlC5EkbzsZUXArRjTJ0A633YkDTu6OshKH +lJDwQc1G93zhyDVJDfMWSf1rg78= +-----END CERTIFICATE----- diff --git a/ca/ca/openssl.cnf b/ca/ca/openssl.cnf new file mode 100644 index 0000000..41cf9f3 --- /dev/null +++ b/ca/ca/openssl.cnf @@ -0,0 +1,132 @@ +# OpenSSL root CA configuration file. +# Copy to `/root/ca/openssl.cnf`. + +[ ca ] +# `man ca` +default_ca = CA_default + +[ CA_default ] +# Directory and file locations. +dir = /root/ca +certs = $dir/certs +crl_dir = $dir/crl +new_certs_dir = $dir/newcerts +database = $dir/index.txt +serial = $dir/serial +RANDFILE = $dir/private/.rand + +# The root key and root certificate. +private_key = $dir/private/ca.key.pem +certificate = $dir/certs/ca.cert.pem + +# For certificate revocation lists. +crlnumber = $dir/crlnumber +crl = $dir/crl/ca.crl.pem +crl_extensions = crl_ext +default_crl_days = 30 + +# SHA-1 is deprecated, so use SHA-2 instead. +default_md = sha256 + +name_opt = ca_default +cert_opt = ca_default +default_days = 375 +preserve = no +policy = policy_strict + +[ policy_strict ] +# The root CA should only sign intermediate certificates that match. +# See the POLICY FORMAT section of `man ca`. +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +[ policy_loose ] +# Allow the intermediate CA to sign a more diverse range of certificates. +# See the POLICY FORMAT section of the `ca` man page. +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +[ req ] +# Options for the `req` tool (`man req`). +default_bits = 2048 +distinguished_name = req_distinguished_name +string_mask = utf8only + +# SHA-1 is deprecated, so use SHA-2 instead. +default_md = sha256 + +# Extension to add when the -x509 option is used. +x509_extensions = v3_ca + +[ req_distinguished_name ] +# See <https://en.wikipedia.org/wiki/Certificate_signing_request>. +commonName = Common Name +countryName = Country Name (2 letter code) +stateOrProvinceName = State or Province Name +localityName = Locality Name +0.organizationName = Organization Name +organizationalUnitName = Organizational Unit Name +emailAddress = Email Address + +# Optionally, specify some defaults. +countryName_default = XX +stateOrProvinceName_default = MyState +localityName_default = +0.organizationName_default = MyOrg +organizationalUnitName_default = +emailAddress_default = + +[ v3_ca ] +# Extensions for a typical CA (`man x509v3_config`). +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +[ v3_intermediate_ca ] +# Extensions for a typical intermediate CA (`man x509v3_config`). +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid:always,issuer +basicConstraints = critical, CA:true, pathlen:0 +keyUsage = critical, digitalSignature, cRLSign, keyCertSign + +[ usr_cert ] +# Extensions for client certificates (`man x509v3_config`). +basicConstraints = CA:FALSE +nsCertType = client, email +nsComment = "OpenSSL Generated Client Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = clientAuth, emailProtection + +[ server_cert ] +# Extensions for server certificates (`man x509v3_config`). +basicConstraints = CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer:always +keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth + +[ crl_ext ] +# Extension for CRLs (`man x509v3_config`). +authorityKeyIdentifier=keyid:always + +[ ocsp ] +# Extension for OCSP signing certificates (`man ocsp`). +basicConstraints = CA:FALSE +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer +keyUsage = critical, digitalSignature +extendedKeyUsage = critical, OCSPSigning diff --git a/ca/ca/private/ca.key.pem b/ca/ca/private/ca.key.pem new file mode 100644 index 0000000..4f9edfe --- /dev/null +++ b/ca/ca/private/ca.key.pem @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +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 +-----END ENCRYPTED PRIVATE KEY----- diff --git a/ca/ca/serial b/ca/ca/serial new file mode 100644 index 0000000..7d802a3 --- /dev/null +++ b/ca/ca/serial @@ -0,0 +1 @@ +1002 diff --git a/ca/ca/serial.old b/ca/ca/serial.old new file mode 100644 index 0000000..dd11724 --- /dev/null +++ b/ca/ca/serial.old @@ -0,0 +1 @@ +1001 diff --git a/ca/crl/ca.crl.pem b/ca/crl/ca.crl.pem new file mode 100644 index 0000000..369b32d --- /dev/null +++ b/ca/crl/ca.crl.pem @@ -0,0 +1,19 @@ +-----BEGIN X509 CRL----- +MIIDAjCB6wIBATANBgkqhkiG9w0BAQsFADBwMRcwFQYDVQQDDA5ob3JzZXRpbmRl +ci5jaDELMAkGA1UEBhMCQ0gxDTALBgNVBAgMBFZhdWQxDzANBgNVBAcMBkdlbmV2 +YTEaMBgGA1UECgwRSG9yc2UgVGluZGVyIFNhcmwxDDAKBgNVBAsMA0lTQxcNMjQw +NjI0MTQzMDI0WhcNMjQwNzI0MTQzMDI0WjAVMBMCAhACFw0yNDA2MjQxNDI5Mjha +oDAwLjAfBgNVHSMEGDAWgBRBW8ia+4qNimJujZGcOmAgu1mBzzALBgNVHRQEBAIC +EAAwDQYJKoZIhvcNAQELBQADggIBAJRXiECGosPAEfaN51urbw381VTe32qfoV8w +47mZdbK9Q78zG1pObAMw0o0pzWYV8siST7RwQlsOFR4tXb1NePpsyU+fz0/eIwzE +PDQie43B0sajiWEugRMnYS/PKJBigvLYj1ILZh9A1Ku1LYVQFYONV/mESF2hylpe +pnosfiByzwbmGEioTDYbB2dX7F6jZXXfQvA4tWwhiI0q9Yx/TCw37Gj244HDnSNS +mO6+Ag0ghHGWr6KBBGeK+DeQBslIdcNTteufKmBYrgFi4ih1h/3b52vssnYqVqwR +UqPIGf6CO/1N41PJXWglOEgh8mk2oMDlVG9/og2tZrRkHggg2Jasjo1A8Z7ygjYl +t8nmWqlLU+KQazow7hdaOGmodDYAnxPSc4dsnpOpYUdDFdgxXuubYLvnBnSs7Xcq +ieKN0F3HtjVAvGm8yzRmqBpa0+zxlaEJrlO3PHBGdwn94ljvbcYPL0tqF4Vdwgy1 +s39CTaJNXw96D16Tkly7jA8++e3UM1yfOlHkwO1pXwqmwYNynhPAbIXcxW4WQ/qE +A/qNW/nIPEiHgIGIdpH+sx7f8BVc0YUCqbplZ7YAoFN/AvUz+NzGvaaMIPWrsvTd +B5Lpmvh7P2X1jGrt1BfFqpLp2Qbe86npJ25Q3dhx2cG0njIAOOUw7mrx2XeKU3Jn +nf6jpcwQ +-----END X509 CRL----- diff --git a/ca/crlnumber b/ca/crlnumber new file mode 100644 index 0000000..dd11724 --- /dev/null +++ b/ca/crlnumber @@ -0,0 +1 @@ +1001 diff --git a/ca/crlnumber.old b/ca/crlnumber.old new file mode 100644 index 0000000..83b33d2 --- /dev/null +++ b/ca/crlnumber.old @@ -0,0 +1 @@ +1000 diff --git a/ca/full_chain.pem b/ca/full_chain.pem new file mode 100644 index 0000000..dd2ab75 --- /dev/null +++ b/ca/full_chain.pem @@ -0,0 +1,60 @@ +-----BEGIN CERTIFICATE----- +MIIElzCCAn+gAwIBAgIUCPlRQLy/Sh2+/US9YJTB+zvLbdswDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCQ0gxDTALBgNVBAgMBFZhdWQxGjAYBgNVBAoMEUhvcnNl +IFRpbmRlciBTYXJsMQwwCgYDVQQLDANJU0MxFjAUBgNVBAMMDWFuZHJld3RhdGUu +Y2gwHhcNMjQwNjE4MTg1NzExWhcNMjUwNjE4MTg1NzExWjBbMQswCQYDVQQGEwJD +SDEPMA0GA1UECAwGR2VuZXZhMQ8wDQYDVQQHDAZHZW5ldmExEDAOBgNVBAoMB0Nv +bXBhbnkxGDAWBgNVBAMMD2NvbXBhbnkuYmliaS5jaDCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAK+IC/2VqLLJ/PzzWeV2dbsvxUIrg26UJZnxJ5FlK1tg +G0QSyK/aGA162es1slL5grwgjCSu8OFKHEKey8Y75v49+9IWLtOnqtx4y/l6zY6c +6KrR1yJ88u9yCHVHODmqhnENWVduAdFDQZXFSDrlP0Udn8Agka+VxIUZn7GxiCQW +etgMp4zQ4UNDZjECzsQ46Hp3WqpdeAVxFxblfDPlrVBnAdWnlbBdZ3798XHDOvDX +Josmoc8DnWkkiVOmL0KFKw9R7dAhWyTXnVojqotPxGZPbDwwPv0QSaSsolrPQ9x4 +BOSf/QgZKQXW0Q35UgDT0bzT+wIyUezu3prJRd/2oIsCAwEAAaNQME4wHQYDVR0O +BBYEFJbDmkp+DYOTwK255fK13gEd1u15MB8GA1UdIwQYMBaAFN6ATyzm7FYoUHlX +5afUB9g9RLGTMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAAMgdzDm +APOTu/UwuZPeTBY8qwkG74omNSG/8Yrz0XG8bYIBwFITvigbaPhMqOpSaztODiE2 +KLl4B58087M5UYHaDjv1O2Ps6KepOyUqPi3VWIplrUJYGk23Xe252fL5HbgSTsTK +QFl6k/YMvw5YPNILRm3YP9Ud0KeSGJkE8/HGzyFChmGMwhgez1XhUjs8+PftCrf9 +xAZHigy8stkwU/Jwa0KfyxepF898AV9DEaVzJt4b+pM8BAWKWRTM+ioOjqL5z3b3 +TdRg8g8b8bfKEAotgy1S7SOZd5k0t/osp+rn97BwmK2VjkUGa4MLlQzz4Po4UGAc +s1mHPpoigjTaHilH9UL2ByavGgK2bEIK3hkht/MYzqPJrOyT9QaJ9xU9j/syLQPA +86qQ03Wo40QPZj91lLbZianiw4c2WXYDcpSD4exAOXSfVtaey3rvkbnVNR9uKigs +Npm38Fbr6adNKWD+klwDzS4BEcUFcJsh68rzNW5hNM26dp4r3dajxumPg5RD+9yu +iG+WlvonDoHFXIrtXcT9vSUGuoDOp0V3BpB9cBV8MGN7f5ROdMGJSf6BlBuNe0/c +FUnbxtzct3uDQyCDn67xhZ3UMcjsU3ithRnuJbLfOaJEFEQqw/3qMD8ABrTudmHX +5SVV97xuOTyQUgeCqA32JnBzWdXWB69HAOdk +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwcDEXMBUGA1UEAwwOaG9y +c2V0aW5kZXIuY2gxCzAJBgNVBAYTAkNIMQ0wCwYDVQQIDARWYXVkMQ8wDQYDVQQH +DAZHZW5ldmExGjAYBgNVBAoMEUhvcnNlIFRpbmRlciBTYXJsMQwwCgYDVQQLDANJ +U0MwHhcNMjQwNTE2MjA1ODMwWhcNMzQwNTE0MjA1ODMwWjBeMQswCQYDVQQGEwJD +SDENMAsGA1UECAwEVmF1ZDEaMBgGA1UECgwRSG9yc2UgVGluZGVyIFNhcmwxDDAK +BgNVBAsMA0lTQzEWMBQGA1UEAwwNYW5kcmV3dGF0ZS5jaDCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAMsTexhqMHc2CXkVZjFaQVV0p4jUjDvLMshKyxMI +/twPv/vOg4qRgmaAZ7FUXtjCXN3E1RT40VICRps5zOPkJxMukbNOAKVkSlcvSCEV +d51PrA1B9QIq3YVCOE/Q503bsDbcX2sSphnME39A2hMOSuRldNK6QsIM7BJccdD7 +lUcKhDMhMNkZ5+bFcxsf+XinkVnT/LyGm4PLjagjXAOCT2adOGboUFhmRo0/vHof +R9h5gbrHLiGf8BZcX4VK28EhGKoNOKpdspcCIXfzDFFFNVt1cpXBufXTcH8T04kz +IeVqN34lA/LRF3X/leZ/J5ZjbhSK50kOenP+5gmJ0tkRj0mOeYUNVYs+tz86uhvL +uYdABXLeaAeVoJrmtuz0E7O2ls6B+ay+hmZGZvl6TnPnZ/y6eMuP7hNNw8AkTWV5 +ps3sUE7puEMFseN4ABR7RtrK/j/m8BOzOLBaivMzyGIDOiwAjNA76Ab9phdmxvrM +PEPDhMKiPvYfdbVs0AdrHFkHKGrTSmHorFA42idfbutXTGoWufxv21nlZMSqxn11 +/nTdFb1j6RZBJHYKhD7vnvOcp/SB4BstnTcXX+XWoCwAhNMXJO0BzJbGnpeA1zP+ +5igXVcXDClrnqa5+2r9hxYKHD+utEzr+hMAabUmx/MZXwhZoXH/I7KDuw54PMK5K +0Dn1AgMBAAGjZjBkMB0GA1UdDgQWBBTegE8s5uxWKFB5V+Wn1AfYPUSxkzAfBgNV +HSMEGDAWgBRBW8ia+4qNimJujZGcOmAgu1mBzzASBgNVHRMBAf8ECDAGAQH/AgEA +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAL/Q91IV5UoQamfVe +wg3Wx1dWJw3e7fxZpXAF2GkGgIqsmMZdscU8AQ3eMPriDQcqW0mcSohKl8gN6pvY +bPqbfrzrZV7LVc/5O0JcWAD1oIJceKLZ2DSaAzPHvz9N0qC9YIDnw8wN1AfqK4OC +UbTheKVHotYT8S13dAY/asVLpTf8xlvngt3RObe3U6KyO81pGmM/HHRuPMum/fV0 +iHtasCQ4hUZ/+x2wwngnm+yxfcDJaLDJ9IUhQZQwiw27OChh+MLrlkqmzxfntMjv +/kCImH4T2X3c6czJ56qpLsv7wRDAxsNjJtCasXkXBl+RNvSCer3G3SPB/yl30bUf +C/OBfJyuGs5H7DdUJ39d0MUK4YC+b7t6YH+dEAD6HZBP2tzmEGcREAtQV+5e5KJD +KA9AitzuQ18MNJrBTj03qDFi3xhbuykYtKZzVWQRq/MyvxuzJFc59rqhMqp++p/R +Oj7wv0A6/P+fbUm1FlEiREKFF6ejcJWCP0SdJIlv8ZiTkdg8UGFM0dGed5hXQvww +nZZhfxOo+NIil1BoGfZZ38qbUNdK2kMxnrTdqgFX53Hz9xqjXTn43FMS+CJRZxVP +o45dAtQbKOkKStVAWC9cXvzAS4st/hdlC5EkbzsZUXArRjTJ0A633YkDTu6OshKH +lJDwQc1G93zhyDVJDfMWSf1rg78= +-----END CERTIFICATE----- diff --git a/ca/gen_cert.py b/ca/gen_cert.py new file mode 100644 index 0000000..035f418 --- /dev/null +++ b/ca/gen_cert.py @@ -0,0 +1,149 @@ +import os +import datetime +import argparse +from cryptography import x509 +from cryptography.hazmat.primitives import hashes, serialization +import requests as req +from dotenv import dotenv_values + + +def load_ca(ca_cert_path, ca_key_path, ca_key_password): + with open(ca_cert_path, 'rb') as cert_file: + ca_cert = x509.load_pem_x509_certificate(cert_file.read()) + + with open(ca_key_path, 'rb') as key_file: + ca_key = serialization.load_pem_private_key( + key_file.read(), password=ca_key_password) + + return ca_cert, ca_key + + +def load_csr(csr_path): + """ Load CSR file + + Args: + csr_path (): string representing the path to the CSR + + Returns: + + """ + with open(csr_path, 'rb') as csr_file: + csr = x509.load_pem_x509_csr(csr_file.read()) + return csr + + +def create_certificate(csr, issuer_cert, issuer_key, is_intermediate=False): + subject = csr.subject + issuer = issuer_cert.subject + builder = x509.CertificateBuilder().subject_name( + subject + ).issuer_name( + issuer + ).public_key( + csr.public_key() + ).serial_number( + x509.random_serial_number() + ).not_valid_before( + datetime.datetime.now(datetime.UTC) + ).not_valid_after( + datetime.datetime.now(datetime.UTC) + datetime.timedelta(days=365) + ).add_extension( + x509.SubjectKeyIdentifier.from_public_key(csr.public_key()), + critical=False + ).add_extension( + x509.AuthorityKeyIdentifier.from_issuer_public_key( + issuer_cert.public_key()), + critical=False + ).add_extension( + # is_intermediate: True => new cert can sign certificates + x509.BasicConstraints(ca=is_intermediate, path_length=None), + critical=True + ) + + certificate = builder.sign( + private_key=issuer_key, algorithm=hashes.SHA256()) + return certificate + + +def save_certificate(cert, filepath): + with open(filepath, "wb") as f: + f.write(cert.public_bytes(serialization.Encoding.PEM)) + +def get_certificate_details(cert, cert_name): + txt = f"Details of {cert_name}\n" + subject = cert.subject + for attr in subject: + txt += f"{attr.oid._name}: {attr.value}\n" + + txt += f"Validity for {cert_name}\n" + txt += f"\t Not valid before: {cert.not_valid_before}\n" + txt += f"\t Not valid after: {cert.not_valid_after}" + + return txt + +def main(): + parser = argparse.ArgumentParser() + + parser.add_argument("ca_cert_path", help="Path to the CA certificate") + parser.add_argument("ca_key_path", help="Path to the CA private key") + parser.add_argument( + "csr_path", help="Path to the Certificate Signing Request (CSR)") + parser.add_argument("output_cert_path", + help="Output path for the signed certificate") + args = parser.parse_args() + + config = dotenv_values(".env") + + bot_token = config["API_TELEGRAM"] + channel_id = config["CHANNEL_ID"] + + + + ca_cert_path = args.ca_cert_path + ca_key_path = args.ca_key_path + csr_path = args.csr_path + output_cert_path = args.output_cert_path + + os.system("stty -echo") + ca_pass = input("Enter private key password: ") + os.system("stty echo") + print("\n") + + try: + ca_cert, ca_key = load_ca( + ca_cert_path, ca_key_path, ca_key_password=ca_pass.encode()) + except: + print("Bad password") + exit(1) + + csr = load_csr(csr_path) + + signed_cert = create_certificate( + csr, ca_cert, ca_key, is_intermediate=False) + + save_certificate(signed_cert, output_cert_path) + + with open("full_chain.pem", "wb") as f: + f.write(signed_cert.public_bytes(serialization.Encoding.PEM)) + f.write(ca_cert.public_bytes(serialization.Encoding.PEM)) + + + msg = f"Certificate {csr_path} saved at { + output_cert_path}.\nSigned by {ca_cert_path}\n\n{ + get_certificate_details(ca_cert, "Signer certificate")}\n\n{get_certificate_details(signed_cert, "Signed cert")}" + + url = f"https://api.telegram.org/bot{bot_token}/sendMessage" + + payload = { + 'chat_id': channel_id, + 'text': msg + } + + print(msg) + + response = req.post(url, payload) + print(response.json()) + + +if __name__ == "__main__": + main() diff --git a/ca/index.txt b/ca/index.txt index 88c6f84..fd3887b 100644 --- a/ca/index.txt +++ b/ca/index.txt @@ -1,2 +1,3 @@ V 340514204530Z 1000 unknown /C=CH/ST=Vaud/O=Horse Tinder Sarl/OU=ISC/CN=horsetinder.ch V 340514205830Z 1001 unknown /C=CH/ST=Vaud/O=Horse Tinder Sarl/OU=ISC/CN=andrewtate.ch +R 250704134243Z 240624142928Z 1002 unknown /C=FR/ST=Ain/L=Ferney/O=Internet Widgits Pty Ltd/CN=bob.ch diff --git a/ca/index.txt.old b/ca/index.txt.old index 2aeb72e..88c6f84 100644 --- a/ca/index.txt.old +++ b/ca/index.txt.old @@ -1 +1,2 @@ V 340514204530Z 1000 unknown /C=CH/ST=Vaud/O=Horse Tinder Sarl/OU=ISC/CN=horsetinder.ch +V 340514205830Z 1001 unknown /C=CH/ST=Vaud/O=Horse Tinder Sarl/OU=ISC/CN=andrewtate.ch diff --git a/ca/intermediate/certs/bob@example.com.cert.pem b/ca/intermediate/certs/bob@example.com.cert.pem new file mode 100644 index 0000000..70e6f1b --- /dev/null +++ b/ca/intermediate/certs/bob@example.com.cert.pem @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIFADCCAuigAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQ0gx +DTALBgNVBAgMBFZhdWQxGjAYBgNVBAoMEUhvcnNlIFRpbmRlciBTYXJsMQwwCgYD +VQQLDANJU0MxFjAUBgNVBAMMDWFuZHJld3RhdGUuY2gwHhcNMjQwNjI0MTM0MjQz +WhcNMjUwNzA0MTM0MjQzWjBgMQswCQYDVQQGEwJGUjEMMAoGA1UECAwDQWluMQ8w +DQYDVQQHDAZGZXJuZXkxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 +ZDEPMA0GA1UEAwwGYm9iLmNoMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAwU3uA3zfpFf0mLf/wsJwpQ5alNymgoO+FdTpKMqkousgLxglZlgq4V2TNqzw +AngPxKh9r4vaJK7TZeFf0GqOU4RNKKsnZEp+nJR45m/+txKplaNXxBn4pgpIU+dj +/bk4PIKZAcea0HdrmR0/g26mDN4YR6k421AJcFAAEWEDu1XYMczakf1La5BmPK6k +qJ7LVueEoRfraogmjJhRVukqdAtdy0oLSZADs4tucC6MYCmhRaUIQWsGdZm4JKZS +K8zFZ+7poCdjJOZa6Bdz2TKhLt8ww9Up5G1ytV6GPnmksGZaAMIyomQk2D8pu0bZ +Z6vw9aem8S/NIXdTDJVCbVLgrwIDAQABo4HFMIHCMAkGA1UdEwQCMAAwEQYJYIZI +AYb4QgEBBAQDAgWgMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBD +bGllbnQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFLxgCLGmSngsuDMhT1yMn5NhTDeM +MB8GA1UdIwQYMBaAFN6ATyzm7FYoUHlX5afUB9g9RLGTMA4GA1UdDwEB/wQEAwIF +4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcNAQELBQAD +ggIBADPfZDlqypv0i+A1VfPnekZhi/MCMcppPJNOmL4smapdPtlw6RzUxzNb2llx +JYOmYapgQZJFbC7j7bV4mOkC1sO/dhYTr52RHNz01U1+6Eaj+tbWbEKz63VQWuzT +tIGoisNIW3LfaaSrjnEHppDkEAYoeHScTlFh/aPSMemrsQhkhbHKZX2FN9EvxYO5 +QwahOIhxudBTd4knHlyPYblnCwlunv6VCPAB1/6nn0XUlRpY4MQVY3s8ud+yLG9V +PLlT8Pa7jSmnb55eRJBgs3IXezWgi0/FLjjFDuz+bzV1d7hj+ufDKkevvSkSZuM8 +WQ9G9dDlZk3RMtCH5vMaZbSINosXnQk/rTbkf8Xfs82NCoSvkIJK7l2jFdLp8pCB +AacCQOf/Z+8FopzlbYcvFol0hnhH+VXb7SBQO19slgTv9DFjNuhQWdbiVlwIjizK +t1h2TJ2FnjB2nEtBIpzcVVKSBkjjN7Kfxd/N0lKpuJFPIP/Qo3LaZMSUPUqWYgdn +Coym52m5QZ/OizF0s5jmiiMej8DAVLKi/IceewUbiOL7RZDIvCdgaJkZ0NHW33jH +7IqQzeoYLVa0yrZc+hTaW8zH9kjudsxyEFixaZjPMb7haOa6CRTtMgO3f+468yyJ +Xo90S3mgR2yuJAQoEWdCXg2CnFWnuDvx0wntsBqkTEHL/uJj +-----END CERTIFICATE----- diff --git a/ca/intermediate/crl/intermediate.crl.pem b/ca/intermediate/crl/intermediate.crl.pem new file mode 100644 index 0000000..88b91ec --- /dev/null +++ b/ca/intermediate/crl/intermediate.crl.pem @@ -0,0 +1,18 @@ +-----BEGIN X509 CRL----- +MIIC8DCB2QIBATANBgkqhkiG9w0BAQsFADBeMQswCQYDVQQGEwJDSDENMAsGA1UE +CAwEVmF1ZDEaMBgGA1UECgwRSG9yc2UgVGluZGVyIFNhcmwxDDAKBgNVBAsMA0lT +QzEWMBQGA1UEAwwNYW5kcmV3dGF0ZS5jaBcNMjQwNjI0MTM0NTQ1WhcNMjQwNzI0 +MTM0NTQ1WjAVMBMCAhACFw0yNDA2MjQxMzQ0NTJaoDAwLjAfBgNVHSMEGDAWgBTe +gE8s5uxWKFB5V+Wn1AfYPUSxkzALBgNVHRQEBAICEAEwDQYJKoZIhvcNAQELBQAD +ggIBAGFhDINRAUjwZMsItiX6GWZ/VaMPF1gkhA0aDk80Aa1rDKLfcxhnhHbOtKOL +PaA0NpJqQAa2xXnWMMj8H9BNx/EuFEL50JSgOCNmw2BloHd7QaYUC3kxT00oe+hR +Upva8AikDmAlb4ZVSRiVWOeHqx6NPUURPHjnxPDeCen1DDCh69KP/xSz5W+DwoEh +l2DKtwv2MPGPRrBkcYIQcx3b1Uk6nS4llWMhmLiDUut5oahpnCFLcZuTKt5RnGKe +wZdmXz70olMZ5gmqXS2lDjxnUdU2hpNCoDDjT1psJ1/eMFvfPM7WcWdVJ0L3QahF +xgjU/RqSocD1nbktikhXHcWPgJtFuxV4iMRij2XkZV1FUdqTQMi43LdYGbm9d8W9 +4+CE7zW1ZEJddXOVUNbFibeeUxTb72FfFOlp8lFf0/DMTotYNXW1vT7ot/11FZmq +ilgW0pEAEb+1dLWAbFyzDx+qgJC6uLPcQBBWhayu2vpH10Mx+ycz8oGfBvWn53xw +uLAFoGPs76QhkkaDshSLqjg+l53I6+oq4Q6dtIEfS/Gv3tnXYH0yzFvssU4XjlP6 +mibHuBFCpjR5phhR7JUAz5pQQbcDD4bq5KKnDw2Zt8g40WyJVx0PGvz9tiPQQ6Ka +Qhttl0x6Se8JKjtOhsahpwpu4U4eJlUnEEWzzqYPXPOsv79Z +-----END X509 CRL----- diff --git a/ca/intermediate/crlnumber b/ca/intermediate/crlnumber new file mode 100644 index 0000000..7d802a3 --- /dev/null +++ b/ca/intermediate/crlnumber @@ -0,0 +1 @@ +1002 diff --git a/ca/intermediate/crlnumber.old b/ca/intermediate/crlnumber.old new file mode 100644 index 0000000..dd11724 --- /dev/null +++ b/ca/intermediate/crlnumber.old @@ -0,0 +1 @@ +1001 diff --git a/ca/intermediate/index.txt b/ca/intermediate/index.txt index 057e5c9..648abdb 100644 --- a/ca/intermediate/index.txt +++ b/ca/intermediate/index.txt @@ -1,2 +1,3 @@ V 250526211508Z 1000 unknown /C=CH/ST=Vaud/L=Geneva/O=Bibi Ltd/OU=ISC/CN=bibi.ch V 250526212217Z 1001 unknown /C=CH/ST=Vaud/L=Geneva/O=Le Trio Gagnant/OU=ISC/CN=bibi.ch +R 250704134243Z 240624134452Z 1002 unknown /C=FR/ST=Ain/L=Ferney/O=Internet Widgits Pty Ltd/CN=bob.ch diff --git a/ca/intermediate/index.txt.old b/ca/intermediate/index.txt.old index a8304bb..3e0bb89 100644 --- a/ca/intermediate/index.txt.old +++ b/ca/intermediate/index.txt.old @@ -1 +1,3 @@ V 250526211508Z 1000 unknown /C=CH/ST=Vaud/L=Geneva/O=Bibi Ltd/OU=ISC/CN=bibi.ch +V 250526212217Z 1001 unknown /C=CH/ST=Vaud/L=Geneva/O=Le Trio Gagnant/OU=ISC/CN=bibi.ch +V 250704134243Z 1002 unknown /C=FR/ST=Ain/L=Ferney/O=Internet Widgits Pty Ltd/CN=bob.ch diff --git a/ca/intermediate/newcerts/1002.pem b/ca/intermediate/newcerts/1002.pem new file mode 100644 index 0000000..70e6f1b --- /dev/null +++ b/ca/intermediate/newcerts/1002.pem @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIFADCCAuigAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQ0gx +DTALBgNVBAgMBFZhdWQxGjAYBgNVBAoMEUhvcnNlIFRpbmRlciBTYXJsMQwwCgYD +VQQLDANJU0MxFjAUBgNVBAMMDWFuZHJld3RhdGUuY2gwHhcNMjQwNjI0MTM0MjQz +WhcNMjUwNzA0MTM0MjQzWjBgMQswCQYDVQQGEwJGUjEMMAoGA1UECAwDQWluMQ8w +DQYDVQQHDAZGZXJuZXkxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 +ZDEPMA0GA1UEAwwGYm9iLmNoMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAwU3uA3zfpFf0mLf/wsJwpQ5alNymgoO+FdTpKMqkousgLxglZlgq4V2TNqzw +AngPxKh9r4vaJK7TZeFf0GqOU4RNKKsnZEp+nJR45m/+txKplaNXxBn4pgpIU+dj +/bk4PIKZAcea0HdrmR0/g26mDN4YR6k421AJcFAAEWEDu1XYMczakf1La5BmPK6k +qJ7LVueEoRfraogmjJhRVukqdAtdy0oLSZADs4tucC6MYCmhRaUIQWsGdZm4JKZS +K8zFZ+7poCdjJOZa6Bdz2TKhLt8ww9Up5G1ytV6GPnmksGZaAMIyomQk2D8pu0bZ +Z6vw9aem8S/NIXdTDJVCbVLgrwIDAQABo4HFMIHCMAkGA1UdEwQCMAAwEQYJYIZI +AYb4QgEBBAQDAgWgMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdlbmVyYXRlZCBD +bGllbnQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFLxgCLGmSngsuDMhT1yMn5NhTDeM +MB8GA1UdIwQYMBaAFN6ATyzm7FYoUHlX5afUB9g9RLGTMA4GA1UdDwEB/wQEAwIF +4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcNAQELBQAD +ggIBADPfZDlqypv0i+A1VfPnekZhi/MCMcppPJNOmL4smapdPtlw6RzUxzNb2llx +JYOmYapgQZJFbC7j7bV4mOkC1sO/dhYTr52RHNz01U1+6Eaj+tbWbEKz63VQWuzT +tIGoisNIW3LfaaSrjnEHppDkEAYoeHScTlFh/aPSMemrsQhkhbHKZX2FN9EvxYO5 +QwahOIhxudBTd4knHlyPYblnCwlunv6VCPAB1/6nn0XUlRpY4MQVY3s8ud+yLG9V +PLlT8Pa7jSmnb55eRJBgs3IXezWgi0/FLjjFDuz+bzV1d7hj+ufDKkevvSkSZuM8 +WQ9G9dDlZk3RMtCH5vMaZbSINosXnQk/rTbkf8Xfs82NCoSvkIJK7l2jFdLp8pCB +AacCQOf/Z+8FopzlbYcvFol0hnhH+VXb7SBQO19slgTv9DFjNuhQWdbiVlwIjizK +t1h2TJ2FnjB2nEtBIpzcVVKSBkjjN7Kfxd/N0lKpuJFPIP/Qo3LaZMSUPUqWYgdn +Coym52m5QZ/OizF0s5jmiiMej8DAVLKi/IceewUbiOL7RZDIvCdgaJkZ0NHW33jH +7IqQzeoYLVa0yrZc+hTaW8zH9kjudsxyEFixaZjPMb7haOa6CRTtMgO3f+468yyJ +Xo90S3mgR2yuJAQoEWdCXg2CnFWnuDvx0wntsBqkTEHL/uJj +-----END CERTIFICATE----- diff --git a/ca/intermediate/openssl.cnf b/ca/intermediate/openssl.cnf index 0217615..520a0a9 100644 --- a/ca/intermediate/openssl.cnf +++ b/ca/intermediate/openssl.cnf @@ -122,7 +122,6 @@ keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth authorityInfoAccess = OCSP;URI:http://ocsp2.example.com subjectAltName = @alt_names -crlDistributionPoints = URI:http://bibi.ch/intermediate.crl.pem [ alt_names ] DNS.1 = bibi.ch diff --git a/ca/intermediate/serial b/ca/intermediate/serial index 7d802a3..baccd03 100644 --- a/ca/intermediate/serial +++ b/ca/intermediate/serial @@ -1 +1 @@ -1002 +1003 diff --git a/ca/intermediate/serial.old b/ca/intermediate/serial.old index dd11724..7d802a3 100644 --- a/ca/intermediate/serial.old +++ b/ca/intermediate/serial.old @@ -1 +1 @@ -1001 +1002 diff --git a/ca/newcompany/certs/out.pem b/ca/newcompany/certs/out.pem new file mode 100644 index 0000000..8bb40a2 --- /dev/null +++ b/ca/newcompany/certs/out.pem @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIElzCCAn+gAwIBAgIUCPlRQLy/Sh2+/US9YJTB+zvLbdswDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCQ0gxDTALBgNVBAgMBFZhdWQxGjAYBgNVBAoMEUhvcnNl +IFRpbmRlciBTYXJsMQwwCgYDVQQLDANJU0MxFjAUBgNVBAMMDWFuZHJld3RhdGUu +Y2gwHhcNMjQwNjE4MTg1NzExWhcNMjUwNjE4MTg1NzExWjBbMQswCQYDVQQGEwJD +SDEPMA0GA1UECAwGR2VuZXZhMQ8wDQYDVQQHDAZHZW5ldmExEDAOBgNVBAoMB0Nv +bXBhbnkxGDAWBgNVBAMMD2NvbXBhbnkuYmliaS5jaDCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAK+IC/2VqLLJ/PzzWeV2dbsvxUIrg26UJZnxJ5FlK1tg +G0QSyK/aGA162es1slL5grwgjCSu8OFKHEKey8Y75v49+9IWLtOnqtx4y/l6zY6c +6KrR1yJ88u9yCHVHODmqhnENWVduAdFDQZXFSDrlP0Udn8Agka+VxIUZn7GxiCQW +etgMp4zQ4UNDZjECzsQ46Hp3WqpdeAVxFxblfDPlrVBnAdWnlbBdZ3798XHDOvDX +Josmoc8DnWkkiVOmL0KFKw9R7dAhWyTXnVojqotPxGZPbDwwPv0QSaSsolrPQ9x4 +BOSf/QgZKQXW0Q35UgDT0bzT+wIyUezu3prJRd/2oIsCAwEAAaNQME4wHQYDVR0O +BBYEFJbDmkp+DYOTwK255fK13gEd1u15MB8GA1UdIwQYMBaAFN6ATyzm7FYoUHlX +5afUB9g9RLGTMAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAAMgdzDm +APOTu/UwuZPeTBY8qwkG74omNSG/8Yrz0XG8bYIBwFITvigbaPhMqOpSaztODiE2 +KLl4B58087M5UYHaDjv1O2Ps6KepOyUqPi3VWIplrUJYGk23Xe252fL5HbgSTsTK +QFl6k/YMvw5YPNILRm3YP9Ud0KeSGJkE8/HGzyFChmGMwhgez1XhUjs8+PftCrf9 +xAZHigy8stkwU/Jwa0KfyxepF898AV9DEaVzJt4b+pM8BAWKWRTM+ioOjqL5z3b3 +TdRg8g8b8bfKEAotgy1S7SOZd5k0t/osp+rn97BwmK2VjkUGa4MLlQzz4Po4UGAc +s1mHPpoigjTaHilH9UL2ByavGgK2bEIK3hkht/MYzqPJrOyT9QaJ9xU9j/syLQPA +86qQ03Wo40QPZj91lLbZianiw4c2WXYDcpSD4exAOXSfVtaey3rvkbnVNR9uKigs +Npm38Fbr6adNKWD+klwDzS4BEcUFcJsh68rzNW5hNM26dp4r3dajxumPg5RD+9yu +iG+WlvonDoHFXIrtXcT9vSUGuoDOp0V3BpB9cBV8MGN7f5ROdMGJSf6BlBuNe0/c +FUnbxtzct3uDQyCDn67xhZ3UMcjsU3ithRnuJbLfOaJEFEQqw/3qMD8ABrTudmHX +5SVV97xuOTyQUgeCqA32JnBzWdXWB69HAOdk +-----END CERTIFICATE----- diff --git a/ca/newcompany/company.csr b/ca/newcompany/company.csr new file mode 100644 index 0000000..1ba0a29 --- /dev/null +++ b/ca/newcompany/company.csr @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICoDCCAYgCAQAwWzELMAkGA1UEBhMCQ0gxDzANBgNVBAgMBkdlbmV2YTEPMA0G +A1UEBwwGR2VuZXZhMRAwDgYDVQQKDAdDb21wYW55MRgwFgYDVQQDDA9jb21wYW55 +LmJpYmkuY2gwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCviAv9laiy +yfz881nldnW7L8VCK4NulCWZ8SeRZStbYBtEEsiv2hgNetnrNbJS+YK8IIwkrvDh +ShxCnsvGO+b+PfvSFi7Tp6rceMv5es2OnOiq0dcifPLvcgh1Rzg5qoZxDVlXbgHR +Q0GVxUg65T9FHZ/AIJGvlcSFGZ+xsYgkFnrYDKeM0OFDQ2YxAs7EOOh6d1qqXXgF +cRcW5Xwz5a1QZwHVp5WwXWd+/fFxwzrw1yaLJqHPA51pJIlTpi9ChSsPUe3QIVsk +151aI6qLT8RmT2w8MD79EEmkrKJaz0PceATkn/0IGSkF1tEN+VIA09G80/sCMlHs +7t6ayUXf9qCLAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAQOpjWvDPho8VS+0q +nWpThInV3XPUNrWprhihmPPVs0gZFZasEaRs5FGfOqBT1ha6fH0w+Jxt6LVe8icT +RMKsde0bNRc8R5MafyHmV7zju1qoYBLbwCYU4VF3QVtTKmBMgUpFNloH32WL1S2Y +jFBKzTzJjJRVMuEcgOZZix2L66ZIK6fIz1dYzp7umye9vdlyn1u4cfOJnL+BAgT8 +lHPLBLFKvIbCHuAfSmz0K/G/EaRBaa1MSI288z9Ag1r4rupEcQm/2OMHh9ZsAZLD +JPYT69dwLbYNyRMz/IEE68nzYgWSuUeD2nRUokZ+fQFzxUUDEzWQyG4tq/T1WT4u +PaJmgg== +-----END CERTIFICATE REQUEST----- diff --git a/ca/newcompany/privatekey.key b/ca/newcompany/privatekey.key new file mode 100644 index 0000000..b8a16c4 --- /dev/null +++ b/ca/newcompany/privatekey.key @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFJDBWBgkqhkiG9w0BBQ0wSTAxBgkqhkiG9w0BBQwwJAQQcoGkxCywLauiIU1j +4C68rAICCAAwDAYIKoZIhvcNAgkFADAUBggqhkiG9w0DBwQI3UMqjsHllfEEggTI +FcjufttQSb0R/vrqNRYYXbWHySe1h53hewWlH8zcyY9iemqZKUwkt1G45PLb7Ccd +DS+Lx2M+El2o1wal0I55hszumky77NBDQSVjNQTW86bLoSjw+OnDxxbGqNtfpfz3 +sSwUHfyyGuO3LxsmWjVp9OxByLGoOT+sjkX89fS1mr8JAXAo3YtWMTnFSIDtjIMI +PuM0KlV9wp4b9flirpgUwLrMpKxqImkcXyYIVjR8Zsjbr9BKgKy+bmqWwnob97Tf +rPjWwfdbRzV6a8K52z+vmAtl27GVBekdsXtDsqS0fb6kpQbZzt90kNCVvNxiIzG/ +/+IuocbeJi/sASdMJZKO70Q/p6So8X37hkWqgBGat+wUtFLx4ojz7jLNQ/wCZ5+l +xFMzPejJVPQvEFPi3lmD2/ds5iiG1/5aoCIUyV8sPDfgHVSAy5dlapg14jbo09R3 +AqPFLPDVkKFB1BvfOFOuCIFK3GRdA0b2/lyEZ1rzuZHTFRm0r86l8NB5AnNIs97q +iUJBXJiAFGeSoviEODHLkv+5fAovkIjncu8MW6JioJhW3LBzT4eA4Jba1xOOATVI +vdQYs+9TPD82e3VxbQemGUn5XtcVpVhDJFZuT3AEtg9zDDxoiLTjXNIF0RqMHKH3 +piKcL/KNgczxNF8sAcMMozSqGhh5me8M+fpno2O8PvHdl0/1El6mUnw1RbcifvbH +OwN7Xyt3J14CQFsXZb6OSGmH+luu3KRIeOqeh1DsMJCy4/8/bIIqbUdvq0sB0bqI +TtYxHIkXAUCxMLjTIOjHKwQIM78RwM4RaY4SKF3PWeBGoZV4DGnRrGHluJ1DaJ+7 +DkzswonRVa3trOZsnldT07oxfK7a5p4hpvNT072mXHWyyw9P2G1WS/Qy6XNSCz0Q +KoR81HReKVjIqFMeyPY+hLmleMVwvMwiLFPIaMUnn9Ql+rwUqIKrPUzifiGyQJVt +XsAUjk1+jw9N+GRLBXahUlxDoqNMcmpCtlnECvnxcdF0yhk8/xi5mNT0Paxozzr3 +n463XlQuw2ih6tX0J1It420sd9wynND385pTXlyjOH8aFN6DhenGZkJ39uC5fvKR +oMEE0GKcV9g3nVonPl5PJEPUSUvery5lFZ7Tlzxn/v6nvDhVI6NioaD9qz6CEf5I +BDLSOdHfa02uN4/MaYq4bVVuyzzNBb5F99I3EFKzSHwd89udQhPgpJrwz/xrTPpq +GNPt9dxtlENmPOsN33aRw9w2bpEIbX+PupO8mGh1GYRE8y5RHs33rrTVkYMtpyjY +V6gXFTL5Lo7UCN9tXwvg8BYj5ZZzkRd8/tSBK83gKNpl5ZrtMBVsBnzicljs5IDP +K4hh9/uqFYfYvhsofSAYQAqlTLblGrD0hjYTE5ONSBFfft3rBL0tIY6HCasmF2eN +RrgxrlNFNMTSDFf3/GXN1U8kBVaxo6Yn7M8Fr5yW1K62g9ovcpoD2zsVNMAx7TZ3 +aSHr6DMcN7uqXJfFLbQLOtvGpQTeIKjmtQJxjiuMCpkY6wQKr75r5Y8lOA9TBTuZ +GrYOOrZZo81YE99UxjPwJ7dGFWiqM+8/9PBmK1QOAyPTJBt+lRgk6vbwaKdeGjf7 +zqyYAqDIQgkYKaYVngLuvwy0zuIMz3OH +-----END ENCRYPTED PRIVATE KEY----- diff --git a/ca/openssl.cnf b/ca/openssl.cnf index 41cf9f3..e41f4e7 100644 --- a/ca/openssl.cnf +++ b/ca/openssl.cnf @@ -118,6 +118,7 @@ subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth +crlDistributionPoints = URI:http://bibi.ch/intermediate.crl.pem [ crl_ext ] # Extension for CRLs (`man x509v3_config`). diff --git a/ca/requirements.txt b/ca/requirements.txt new file mode 100644 index 0000000..6951028 --- /dev/null +++ b/ca/requirements.txt @@ -0,0 +1,3 @@ +cffi==1.16.0 +cryptography==42.0.8 +pycparser==2.22 diff --git a/mutual_tls.png b/mutual_tls.png new file mode 100644 index 0000000000000000000000000000000000000000..9ff4dd035edf86520136f46a4196a2a52fb80ede GIT binary patch literal 78351 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℞{@& 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 B>v;eG literal 0 HcmV?d00001 -- GitLab