myPKI.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/usr/bin/python2
  2. import sys, getopt, os
  3. def usage():
  4. print ' USAGE: ./myPKI.py [OPTIONS]'
  5. print
  6. print ' OPTIONS:'
  7. print '\t-A --initall\t-i -g -d -s'
  8. print '\t-i --init\tInitialise directorys of PKI'
  9. print '\t-g --genca\tGenerate CA root'
  10. print '\t-d --gender'
  11. print '\t-s --gensign\tGenerate and sign certificate'
  12. print '\t-h --help\tShows this help'
  13. def generate_sign():
  14. tld = raw_input("=> TLD of your certificate :")
  15. os.system("openssl genrsa -out ./certificats/"+tld+".key 4096")
  16. os.system("openssl req -days 3000 -new -key ./certificats/"+tld+".key -out certificats/"+tld+".csr")
  17. os.system("openssl ca -config config/ca.config -out "+tld+".crt -infiles certificats/"+tld+".csr")
  18. print "[*] Certificate Signed !"
  19. def generate_der():
  20. os.system("openssl x509 -in certificats/ca.crt -outform DER -out certificats/ca.der")
  21. print "[*] Put public CA ./certificats/ca.der on all browser you see !"
  22. def generate_ca():
  23. if not os.path.isfile("./certificats/ca.key"):
  24. os.system("openssl genrsa -out ./certificats/ca.key 4096")
  25. os.system("openssl req -utf8 -new -x509 -days 3000 -key ./certificats/ca.key -out ./certificats/ca.crt")
  26. print "[*] CA Certificate done !"
  27. else:
  28. print "[x] CA Certificate already exist..."
  29. def init_dir():
  30. if not os.path.exists("./db/ca.dbcerts"):
  31. print "[*] Creating directories"
  32. os.makedirs("./db/ca.db.certs")
  33. os.makedirs("./config")
  34. os.makedirs("./certificats")
  35. os.system("echo '01'> ./db/ca.db.serial")
  36. os.system("cp /dev/null ./db/ca.db.index")
  37. os.system("touch ./config/ca.config")
  38. os.system( "cat << EOF > ./config/ca.config\n"+
  39. "[ ca ]\n"+
  40. "default_ca = CA_own\n"+
  41. "[ CA_own ]\n"+
  42. "dir = ./db\n"+
  43. "certs = ./db\n"+
  44. "new_certs_dir = ./db/ca.db.certs\n"+
  45. "database = ./db/ca.db.index\n"+
  46. "serial = ./db/ca.db.serial\n"+
  47. "RANDFILE = ./db/ca.db.rand\n"+
  48. "certificate = ./certificats/ca.crt\n"+
  49. "private_key = ./certificats/ca.key\n"+
  50. "default_days = 3000\n"+
  51. "default_crl_days = 30\n"+
  52. "default_md = sha256\n"+
  53. "preserve = no\n"+
  54. "policy = policy_anything\n"+
  55. "[ policy_anything ]\n"+
  56. "countryName = France\n"+
  57. "stateOrProvinceName = Limousin\n"+
  58. "localityName = Limoges\n"+
  59. "organizationName = IMAO-SAS\n"+
  60. "organizationalUnitName = IT\n"+
  61. "commonName = supplied\n"+
  62. "emailAddress = it@imao-fr.com\n"+
  63. "EOF\n")
  64. print "[x] Directorys already exist"
  65. def main():
  66. try:
  67. opts, args = getopt.getopt(sys.argv[1:], "Ahigds", ["initall", "help", "init", "genca", "gender", "gensign"])
  68. for o, a in opts:
  69. if o in ("--help"):
  70. usage()
  71. sys.exit()
  72. elif o in ("--genca"):
  73. generate_ca()
  74. elif o in ("--init"):
  75. init_dir()
  76. elif o in ("--gender"):
  77. generate_der()
  78. elif o in ("--gensign"):
  79. generate_sign()
  80. elif o in ("--initall"):
  81. init_dir()
  82. generate_ca()
  83. generate_der()
  84. generate_sign()
  85. else:
  86. error("option '"+o+"' doesn't exists")
  87. except getopt.GetoptError, err:
  88. sys.stderr.write(str(err))
  89. usage()
  90. sys.exit(2)
  91. if __name__ == "__main__":
  92. main()