Jak włączyć SSL dla aplikacji internetowej i interfejsu API HTTP działającego w AWS?


Nie zawracałem sobie głowy pisaniem tego pytania, ponieważ nie jestem pewien, czy dotyczy ono ServerFault czy StackOverflow.
Mam aplikację internetową React hostowaną w wiadrze AWS S3 i używającą CloudFront. Mam interfejs API REST napisany jako aplikacja Java Spring Boot działająca na instancji AWS EC2. Próbuję włączyć SSL na obu, aby chronić mój ruch.
Do tej pory użyłem wygenerowanego przez AWS certyfikatu SSL do zabezpieczenia aplikacji internetowej. Próbowałem użyć tego samego certyfikatu SSL wygenerowanego przez AWS do zabezpieczenia mojej aplikacji Java Spring Boot i doszedłem do wniosku, że nie jest to możliwe w przypadku tego certyfikatu. Wszystkie próby wymuszenia na aplikacji Java Spring Boot obsługi SSL przy użyciu tego certyfikatu nie powiodły się podczas uruchamiania aplikacji.
Eksperymentowałem lokalnie z samopodpisanymi certyfikatami, które po zaakceptowaniu ostrzeżenia przeglądarki działają dla aplikacji internetowej, ale nie dla aplikacji Java Spring Boot. Aplikacja Java Spring Boot uruchamia się dobrze i mogę użyć Postmana, aby uzyskać dostęp do API (po skonfigurowaniu Postmana tak, aby pominął sprawdzanie certyfikatu). Uważam, że biblioteka JavaScript, której używam (Axios) do wywołania aplikacji Java Spring Boot, nie obsługuje certyfikatu z podpisem własnym i nie byłem w stanie skonfigurować go tak, aby akceptował/ignorował certyfikat z podpisem własnym. Ostatecznie nie będę używał certyfikatów z podpisem własnym, więc i tak jest to ślepy zaułek.
Moje wdrożenie aplikacji internetowej hostowanej przez S3 z interfejsem HTTP API w instancji EC2 nie wydaje się niezwykłe. To? Powinienem zrobić to inaczej?
Zanim przejdę dalej do króliczej nory, kupując certyfikaty i korzystając z dodatkowych usług AWS, mam nadzieję, że ktoś tutaj może udzielić mi kilku wskazówek.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Po pierwsze, nie wierzę, że AWS pobiera opłaty za certyfikaty stosowane w ich infrastrukturze. Umieściłbym load balancer między CloudFront a instancją EC2 i użyłbym certyfikatu na load balancerze i po prostu użyłbym niezaszyfrowanego ruchu pomiędzy load balancerem a instancją EC2. Mam nadzieję, że to rozwiąże problem z aplikacją. Możesz użyć reguł zabezpieczeń, aby zablokować wystąpienie tylko dla modułu równoważenia obciążenia.
Istnieje kilka sposobów blokowania modułu równoważenia obciążenia w CloudFront - jednym z często udokumentowanych sposobów jest dodanie małej i rzadko uruchamianej funkcji Lambda w celu ograniczenia dostępu tylko do adresów IP CloudFront, jak opisano w dokumentacji.

Tutaj
https://aws.amazon.com/blogs/s ... mbda/
.
Mam również CloudFront, który dodaje niestandardowy nagłówek z magicznym ciągiem jako jego wartością, a apache na EC2 filtruje każdy ruch bez magicznego ciągu. Te dwa środki wydają się być całkowicie skuteczne w blokowaniu dostępu do serwera innego niż chmura i możesz skoncentrować dalsze środki WAF na samej dystrybucji CloudFront.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się