cloudfront_sign_url.py 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. import datetime
  2. from cryptography.hazmat.backends import default_backend
  3. from cryptography.hazmat.primitives import hashes
  4. from cryptography.hazmat.primitives import serialization
  5. from cryptography.hazmat.primitives.asymmetric import padding
  6. from botocore.signers import CloudFrontSigner
  7. def rsa_signer(message):
  8. with open('D:/project_svn/Ansjer/test/pk-APKAINI6BNPKV54NHH7Q.pem', 'rb') as key_file:
  9. private_key = serialization.load_pem_private_key(
  10. key_file.read(),
  11. password=None,
  12. backend=default_backend()
  13. )
  14. signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1())
  15. signer.update(message)
  16. return signer.finalize()
  17. key_id = 'APKAINI6BNPKV54NHH7Q'
  18. url = 'http://d3om3d8c0l14oc.cloudfront.net/L59KVYDAEPHR1T6M111A_0/*'
  19. expire_date = datetime.datetime(2018, 9, 30)
  20. print(expire_date)
  21. cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)
  22. # Create a signed url that will be valid until the specfic expiry date
  23. # provided using a canned policy.
  24. signed_url = cloudfront_signer.generate_presigned_url(
  25. url, date_less_than=expire_date)
  26. print(signed_url)